Compare commits

...

2 Commits

Author SHA1 Message Date
36ca29853b
Add icon, homepage and sitemap 2026-02-08 21:08:03 +01:00
a3efa02875
Add footer, canonical URLs, fix record parsing 2026-02-08 21:07:11 +01:00
16 changed files with 158 additions and 18 deletions

5
assets/images/icon.svg Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<rect stroke="black" stroke-width="6" fill="#EEE" x="6" y="20" width="88" height="60" />
<polyline points="6,20 50,50 94,20" stroke-width="6" stroke="black" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 290 B

View File

@ -17,10 +17,20 @@ export class DkimRecord extends TagListRecord {
.required() .required()
.pos(1), .pos(1),
new EnumTag("k", ["rsa", "ed25519"])
.label("Key type")
.desc("")
.options(["RSA", "Ed25519"])
.default("rsa")
.pos(1),
new FlagsTag("t", ["y", "s"]) new FlagsTag("t", ["y", "s"])
.label("Flags") .label("Flags")
.desc("Optional extra options that can be enabled") .options(["Test mode", "Strict mode (Recommended)"])
.options(["Test mode", "Require identical domain in i= and d= tags of DKIM signature (Recommended)"]) .optionDesc([
"Indicates the server is currently testing DKIM support",
"Require identical domain in i= and d= tags of DKIM signature (Recommended unless using subdomains)",
])
.default("") .default("")
.pos(1), .pos(1),
@ -38,11 +48,6 @@ export class DkimRecord extends TagListRecord {
.default("") .default("")
.pos(1), .pos(1),
new EnumTag("k", ["rsa"])
.disabled()
.default("rsa")
.pos(1),
new EnumTag("s", ["*", "email"]) new EnumTag("s", ["*", "email"])
.disabled() .disabled()
.default("*") .default("*")

View File

@ -50,7 +50,7 @@ export class SpfRecord {
.label("Include") .label("Include")
.desc("Check the SPF record of another domain. If it passes, return with the selected result") .desc("Check the SPF record of another domain. If it passes, return with the selected result")
.multiple() .multiple()
.pos(1), .pos(2),
new DomainMechanism("exists") new DomainMechanism("exists")
.label("Exists") .label("Exists")

View File

@ -11,11 +11,19 @@ export class FlagsTag extends Tag {
return this; return this;
} }
optionDesc(descriptions) {
this.flagDescriptions = descriptions;
return this;
}
getInputHtml() { getInputHtml() {
return ` return `
<div style="display: flex; flex-direction: column; gap: 0.5rem">` + <div style="display: flex; flex-direction: column; gap: 0.5rem">` +
this.flags.map((flag, i) => ` this.flags.map((flag, i) => `
<label><input id="${this.id + "-" + flag}" type="checkbox"> ${this.flagLabels[i]}</label> <label>
<input id="${this.id + "-" + flag}" type="checkbox"> ${this.flagLabels[i]}<br>
<span class="checkbox-desc">${this.flagDescriptions[i]}</span>
</label>
`).join("") + `).join("") +
"</div>"; "</div>";
} }

View File

@ -3,12 +3,12 @@ import { DmarcRecord } from "../records/DmarcRecord.js";
import { SpfRecord } from "../records/SpfRecord.js"; import { SpfRecord } from "../records/SpfRecord.js";
const records = { const records = {
"/dkim-creator": DkimRecord, "dkim-creator": DkimRecord,
"/dmarc-creator": DmarcRecord, "dmarc-creator": DmarcRecord,
"/spf-creator": SpfRecord, "spf-creator": SpfRecord,
}; };
const Record = records[location.pathname]; const Record = records[location.pathname.split("/")[1]];
const inputs = []; const inputs = [];

View File

@ -2,11 +2,11 @@ import { DmarcRecord } from "../records/DmarcRecord.js";
import { SpfRecord } from "../records/SpfRecord.js"; import { SpfRecord } from "../records/SpfRecord.js";
const records = { const records = {
"/dmarc-validator": DmarcRecord, "dmarc-validator": DmarcRecord,
"/spf-validator": SpfRecord, "spf-validator": SpfRecord,
}; };
const Record = records[location.pathname]; const Record = records[location.pathname.split("/")[1]];
document.getElementById("record").oninput = event => validate(event.target.value); document.getElementById("record").oninput = event => validate(event.target.value);

View File

@ -27,6 +27,16 @@ body {
padding: 1rem; padding: 1rem;
} }
footer {
font-size: 0.8rem;
text-align: center;
margin-bottom: 1rem;
}
footer a {
color: black;
}
h1, h2 { h1, h2 {
text-align: center; text-align: center;
} }
@ -67,7 +77,7 @@ main {
background-color: white; background-color: white;
border: 1px solid #BDBDBD; border: 1px solid #BDBDBD;
padding: 1rem 2rem; padding: 1rem 2rem;
margin: 2rem auto; margin: 1rem auto;
color: #424242; color: #424242;
font-size: 0.8rem; font-size: 0.8rem;
} }
@ -166,6 +176,11 @@ summary:hover {
color: black; color: black;
} }
.checkbox-desc {
color: #9E9E9E;
margin-left: 2em;
}
.field-container { .field-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -191,3 +206,25 @@ summary:hover {
.text-button:hover { .text-button:hover {
color: black; color: black;
} }
.tool-button {
display: inline-block;
margin: 0.25rem 1rem 0.25rem 0;
background-color: #F9F9F9;
padding: 0.75rem 1.5rem;
border: 1px solid #BDBDBD;
color: black;
text-decoration: none;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
font-weight: bold;
width: 170px;
text-align: center;
position: relative;
bottom: 0;
transition: box-shadow, bottom 200ms;
}
.tool-button:hover {
bottom: 3px;
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
}

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DKIM Record Creator - Generate DKIM DNS Records</title> <title>DKIM Record Creator - Generate DKIM DNS Records</title>
<link rel="canonical" href="https://email-dns.tools/dkim-creator/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/creator.js"></script> <script type="module" src="/assets/scripts/ui/creator.js"></script>
</head> </head>
@ -53,5 +54,9 @@
<a href="/spf-creator">SPF Creator Tool</a> <a href="/spf-creator">SPF Creator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DMARC Record Creator - Generate DMARC DNS Records</title> <title>DMARC Record Creator - Generate DMARC DNS Records</title>
<link rel="canonical" href="https://email-dns.tools/dmarc-creator/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/creator.js"></script> <script type="module" src="/assets/scripts/ui/creator.js"></script>
</head> </head>
@ -41,9 +42,13 @@
<center> <center>
<h3>More tools:</h3> <h3>More tools:</h3>
<a href="/dmarc-validator">DMARC Validator Tool</a> &bull; <a href="/dmarc-validator">DMARC Validator Tool</a> &bull;
<a href="/DKIM-creator">DKIM Creator Tool</a> &bull; <a href="/dkim-creator">DKIM Creator Tool</a> &bull;
<a href="/spf-creator">SPF Creator Tool</a> <a href="/spf-creator">SPF Creator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DMARC Record Validator - Validate DMARC DNS Records</title> <title>DMARC Record Validator - Validate DMARC DNS Records</title>
<link rel="canonical" href="https://email-dns.tools/dmarc-validator/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/validator.js"></script> <script type="module" src="/assets/scripts/ui/validator.js"></script>
</head> </head>
@ -78,5 +79,9 @@
<a href="/spf-validator">SPF Validator Tool</a> <a href="/spf-validator">SPF Validator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

47
index.html Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Email DNS Tools</title>
<link rel="canonical" href="https://email-dns.tools/">
<link rel="stylesheet" href="/assets/styles/main.css">
</head>
<body>
<h1>Email DNS Tools</h1>
<main>
<p>
This site provides various tools for managing email DNS records, such as for DKIM, DMARC and SPF.
If you have feedback, please send an email
<a href="mailto:?to=Reimar%20<%6D%61%69%6C%40%72%65%69%6D%2E%61%72>&subject=Email%20DNS%20Tools%20Feedback">here</a>.
</p>
<h2>Tools</h2>
<h3>DKIM</h3>
<a class="tool-button" href="/dkim-creator">DKIM Record Creator</a>
<h3>DMARC</h3>
<a class="tool-button" href="/dmarc-creator">DKIM Record Creator</a>
<a class="tool-button" href="/dmarc-validator">DMARC Record Validator</a>
<h3>SPF</h3>
<a class="tool-button" href="/spf-creator">SPF Record Creator</a>
<a class="tool-button" href="/spf-validator">SPF Record Validator</a>
<hr>
<h3>Articles</h3>
<ul>
<li><a href="/spf-macro-guide">SPF Macro Guide</a></li>
</ul>
</main>
</body>
</html>

8
sitemap.txt Normal file
View File

@ -0,0 +1,8 @@
https://email-dns.tools/
https://email-dns.tools/dkim-creator/
https://email-dns.tools/dmarc-creator/
https://email-dns.tools/dmarc-validator/
https://email-dns.tools/spf-creator/
https://email-dns.tools/spf-macro-guide/
https://email-dns.tools/spf-validator/

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SPF Record Creator - Generate SPF DNS Records</title> <title>SPF Record Creator - Generate SPF DNS Records</title>
<link rel="canonical" href="https://email-dns.tools/spf-creator/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/creator.js"></script> <script type="module" src="/assets/scripts/ui/creator.js"></script>
</head> </head>
@ -63,5 +64,9 @@
<a href="/dmarc-creator">DMARC Creator Tool</a> <a href="/dmarc-creator">DMARC Creator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SPF Macro Guide - Explanation of all SPF macros with examples</title> <title>SPF Macro Guide - Explanation of all SPF macros with examples</title>
<link rel="canonical" href="https://email-dns.tools/spf-macro-guide/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/validator.js"></script> <script type="module" src="/assets/scripts/ui/validator.js"></script>
</head> </head>
@ -149,5 +150,9 @@
<a href="/spf-creator">SPF Creator Tool</a> <a href="/spf-creator">SPF Creator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>

View File

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SPF Record Validator - Validate SPF DNS Records</title> <title>SPF Record Validator - Validate SPF DNS Records</title>
<link rel="canonical" href="https://email-dns.tools/spf-validator/">
<link rel="stylesheet" href="/assets/styles/main.css"> <link rel="stylesheet" href="/assets/styles/main.css">
<script type="module" src="/assets/scripts/ui/validator.js"></script> <script type="module" src="/assets/scripts/ui/validator.js"></script>
</head> </head>
@ -69,5 +70,9 @@
<a href="/dmarc-validator">DMARC Validator Tool</a> <a href="/dmarc-validator">DMARC Validator Tool</a>
</center> </center>
</main> </main>
<footer>
<a href="/">Home</a>
</footer>
</body> </body>
</html> </html>