Native Libraries
GoTotus provides native libraries for a more fluid syntax and simpler use:
Python
Location: https://github.com/GoTotus/pytotus
pip install totus
#!/usr/bin/env python3
from totus import Totus
t = Totus()
validate = t.Validate()
emails = [
"invalid@gototus.com",
"sdfsdf@sdfsdfsdfsfs.fdfsfs.fdfsds",
"temporary@blondmail.com",
"info@x.com",
"invalid.email@linkedin.com",
"info@linkedin.com",
"support.now@gmail.com"
]
for email in emails:
result = validate.email(email)
print(f"email {email}: good email? {'YES' if result.result() else 'NO'}; "
f"with score: {result.score()}/100")
print(result)
will Output:
email invalid@gototus.com: good email? NO; with score: 37/100
{
"email": "invalid@gototus.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": true,
"l2_dmarc": true,
"l2_dnssec": true,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "1",
"l2_score": 100,
"l2_spf": true,
"l3": "FAILED",
"l3_220_helo_correct": true,
"l3_explanation": "email server handshake terminated with error code 5xx, not good",
"l3_rcpt_ack": 550,
"l3_score": 60,
"l3_tls": true,
"mail_servers": [
"10 mail.kukino.uk."
],
"requested_level": "l5_smell",
"result": "FAILED",
"score": 37
}
email sdfsdf@sdfsdfsdfsfs.fdfsfs.fdfsds: good email? NO; with score: 5/100
{
"email": "sdfsdf@sdfsdfsdfsfs.fdfsfs.fdfsds",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "FAILED",
"l2_explanation": "the hostname for the email server does not exist",
"l2_score": 0,
"requested_level": "l5_smell",
"result": "FAILED",
"score": 5
}
email temporary@blondmail.com: good email? NO; with score: 25/100
{
"email": "temporary@blondmail.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": false,
"l2_dmarc": false,
"l2_dnssec": false,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "1",
"l2_score": 60,
"l2_spf": true,
"l3": "PASSED",
"l3_220_helo_correct": false,
"l3_explanation": "email server handshake successful",
"l3_rcpt_ack": 250,
"l3_score": 40,
"l3_tls": false,
"l4": "FAILED",
"l4_explanation": "email domain address belongs to a temporary email provider",
"l4_free_email": false,
"l4_score": 0,
"l4_temporary_email": true,
"mail_servers": [
"10 mail.blondmail.com."
],
"requested_level": "l5_smell",
"result": "FAILED",
"score": 25
}
email info@x.com: good email? YES; with score: 85/100
{
"email": "info@x.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": false,
"l2_dmarc": true,
"l2_dnssec": false,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "11111",
"l2_score": 75,
"l2_spf": true,
"l3": "PASSED",
"l3_220_helo_correct": false,
"l3_explanation": "email server handshake successful",
"l3_rcpt_ack": 250,
"l3_score": 90,
"l3_tls": true,
"l4": "PASSED",
"l4_explanation": "no temporary email neither free email account",
"l4_free_email": false,
"l4_score": 100,
"l4_temporary_email": false,
"l5": "PASSED",
"l5_explanation": "generic username and unknown domain raise slight suspicion",
"l5_score": 80,
"mail_servers": [
"1 aspmx.l.google.com.",
"5 alt1.aspmx.l.google.com.",
"5 alt2.aspmx.l.google.com.",
"10 alt4.aspmx.l.google.com.",
"10 alt3.aspmx.l.google.com."
],
"requested_level": "l5_smell",
"result": "PASSED",
"score": 85
}
email invalid.email@linkedin.com: good email? NO; with score: 32/100
{
"email": "invalid.email@linkedin.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": false,
"l2_dmarc": true,
"l2_dnssec": false,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "1111",
"l2_score": 75,
"l2_spf": true,
"l3": "FAILED",
"l3_220_helo_correct": true,
"l3_explanation": "email server handshake terminated with error code 5xx, not good",
"l3_rcpt_ack": 550,
"l3_score": 60,
"l3_tls": true,
"mail_servers": [
"10 mail-a.linkedin.com.",
"10 mail-d.linkedin.com.",
"10 mail-c.linkedin.com.",
"20 mail.linkedin.com."
],
"requested_level": "l5_smell",
"result": "FAILED",
"score": 32
}
email info@linkedin.com: good email? YES; with score: 95/100
{
"email": "info@linkedin.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": false,
"l2_dmarc": true,
"l2_dnssec": false,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "1111",
"l2_score": 75,
"l2_spf": true,
"l3": "PASSED",
"l3_220_helo_correct": true,
"l3_explanation": "email server handshake successful",
"l3_rcpt_ack": 250,
"l3_score": 100,
"l3_tls": true,
"l4": "PASSED",
"l4_explanation": "no temporary email neither free email account",
"l4_free_email": false,
"l4_score": 100,
"l4_temporary_email": false,
"l5": "PASSED",
"l5_explanation": "official corporate email from a well-known professional networking platform",
"l5_score": 100,
"mail_servers": [
"10 mail-c.linkedin.com.",
"10 mail-a.linkedin.com.",
"10 mail-d.linkedin.com.",
"20 mail.linkedin.com."
],
"requested_level": "l5_smell",
"result": "PASSED",
"score": 95
}
email support.now@gmail.com: good email? YES; with score: 73/100
{
"email": "support.now@gmail.com",
"l1": "PASSED",
"l1_explanation": "provided email address is syntactically correct",
"l1_score": 100,
"l2": "PASSED",
"l2_dkim": false,
"l2_dmarc": true,
"l2_dnssec": false,
"l2_explanation": "email domain name service settings are functional",
"l2_fcrdns_check": "PASSED",
"l2_fcrdns_detail": "11111",
"l2_score": 75,
"l2_spf": true,
"l3": "PASSED",
"l3_220_helo_correct": false,
"l3_explanation": "email server handshake successful",
"l3_rcpt_ack": 250,
"l3_score": 90,
"l3_tls": true,
"l4": "PASSED",
"l4_explanation": "no temporary email but it is a free email service account",
"l4_free_email": true,
"l4_score": 75,
"l4_temporary_email": false,
"l5": "PASSED",
"l5_explanation": "free email service with generic username raises some suspicion",
"l5_score": 60,
"mail_servers": [
"5 gmail-smtp-in.l.google.com.",
"10 alt1.gmail-smtp-in.l.google.com.",
"20 alt2.gmail-smtp-in.l.google.com.",
"30 alt3.gmail-smtp-in.l.google.com.",
"40 alt4.gmail-smtp-in.l.google.com."
],
"requested_level": "l5_smell",
"result": "PASSED",
"score": 73
}
Node / Javascript
npm i totus
let Totus = require('totus');
(async () => {
try {
const t = new Totus();
const validate = t.Validate();
const emails = [
"invalid@gototus.com",
"sdfsdf@sdfsdfsdfsfs.fdfsfs.fdfsds",
"temporary@blondmail.com",
"info@x.com",
"invalid.email@linkedin.com",
"info@linkedin.com",
"support.now@gmail.com"
];
for (const email of emails) {
const result = await validate.email(email);
console.log(`email ${email}: good email? ${result.result() ? 'YES' : 'NO'}; with score: ${result.score()}/100`);
console.log(result);
}
} catch (error) {
console.error('Error:', error.message);
}
})();
Golang
go get github.com/GoTotus/gototus
package main
import (
"fmt"
"github.com/GoTotus/gototus/totus"
)
func main() {
t, err := totus.NewTotus("", "", "")
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
val := t.Validate()
emails := []string{
"invalid@gototus.com",
"sdfsdf@sdfsdfsdfsfs.fdfsfs.fdfsds",
"temporary@blondmail.com",
"info@x.com",
}
for _, email := range emails {
result, err := val.Email(email, totus.CheckLevelL5Smell)
if err != nil {
fmt.Printf("Error validating %s: %v\n", email, err)
continue
}
fmt.Printf("email %s: good email? %v; with score: %d/100\n", email, result.IsValid(), result.Score())
fmt.Println(result)
}
}