Here’s a complete and reusable EmailSpamChecker class for .NET Framework 4.7, which performs:
- Syntax validation
- Blacklisted domain check
- MX record verification (requires DnsClient NuGet)
- Scoring logic for spam suspicion
- Customizable domain block list
Step 1: Install DnsClient NuGet Package
From NuGet Package Manager Console:
Install-Package DnsClient
Step 2: EmailSpamChecker Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text.RegularExpressions;
using DnsClient;
public class EmailSpamChecker
{
private static readonly string[] _blacklistedDomains = new[]
{
"mailinator.com", "10minutemail.com", "guerrillamail.com",
"tempmail.com", "desy.xyz", "yopmail.com", "trashmail.com"
};
private static readonly string[] _suspiciousTlds = new[]
{
".xyz", ".tk", ".gq", ".ml", ".cf"
};
public class SpamCheckResult
{
public bool IsValid { get; set; }
public int SpamScore { get; set; }
public List<string> Issues { get; set; } = new List<string>();
}
public static SpamCheckResult CheckEmail(string email)
{
var result = new SpamCheckResult();
// Check basic syntax
if (!IsValidSyntax(email))
{
result.Issues.Add("Invalid email syntax.");
result.SpamScore += 2;
result.IsValid = false;
return result;
}
string domain = email.Split('@')[1].ToLower();
// Check blacklist
if (_blacklistedDomains.Contains(domain))
{
result.Issues.Add("Domain is blacklisted.");
result.SpamScore += 3;
}
// Check suspicious TLD
if (_suspiciousTlds.Any(tld => domain.EndsWith(tld)))
{
result.Issues.Add("Suspicious top-level domain.");
result.SpamScore += 1;
}
// Check if it looks random (e.g., [email protected])
if (IsRandomLooking(email))
{
result.Issues.Add("Username looks auto-generated or random.");
result.SpamScore += 1;
}
// Check MX record
if (!HasValidMxRecord(domain))
{
result.Issues.Add("Domain has no MX record (may not receive emails).");
result.SpamScore += 2;
}
result.IsValid = result.SpamScore < 3;
return result;
}
private static bool IsValidSyntax(string email)
{
try
{
var addr = new MailAddress(email);
return addr.Address == email;
}
catch
{
return false;
}
}
private static bool HasValidMxRecord(string domain)
{
try
{
var lookup = new LookupClient();
var result = lookup.Query(domain, QueryType.MX);
return result.Answers.MxRecords().Any();
}
catch
{
return false;
}
}
private static bool IsRandomLooking(string email)
{
string user = email.Split('@')[0];
// Count digits and special chars
int digitCount = user.Count(char.IsDigit);
int symbolCount = user.Count(c => !char.IsLetterOrDigit(c));
// Very short or too random
return user.Length < 5 || digitCount + symbolCount > 4;
}
}
Usage Example
string inputEmail = "[email protected]";
var result = EmailSpamChecker.CheckEmail(inputEmail);
if (!result.IsValid)
{
Console.WriteLine("Potential spam or invalid email:");
foreach (var issue in result.Issues)
Console.WriteLine($"- {issue}");
}
else
{
Console.WriteLine("Email looks clean.");
}
Output Example
Potential spam or invalid email:
- Domain is blacklisted.
- Suspicious top-level domain.
- Domain has no MX record (may not receive emails).
Thanks
Keep Coding.
Top comments (1)
Great