The official C# SDK for EmailVerify.io - A comprehensive email validation, verification, and finder service.
- β Single Email Validation - Validate individual email addresses in real-time
- β Batch Email Validation - Process up to 5,000 emails efficiently
- β Account Balance Checking - Monitor your API credits and limits
- β Email Finder - Discover email addresses using names and domains
Install-Package EmailVerify.SDK
dotnet add package EmailVerify.SDK
using EmailVerifySDK;
// Initialize with your API key generated from Emailverify.io
EmailVerify.Instance.Initialize("<YOUR_API_KEY>");
EmailVerify.Instance.Validate("<EMAIL_ADDRESS>", //Email address to verify
response =>
{
Console.WriteLine(response);
Console.WriteLine($"Email: {response.Email}");
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Sub Status: {response.SubStatus}");
},
error =>
{
Console.WriteLine($"Error: {error}");
});
Sample Response:
EVValidateResponse {
email='email@gmail.com',
status='do_not_mail',
subStatus='mailbox_quota_exceeded'
}
You can access the values by:
email: {response.Email}
status: {response.Status}
Substatus: {response.SubStatus}
Status can be any of the following:
- valid
- invalid
- catch_all
- do_not_mail
- unknown
- role_based
- skipped
Sub Status can be any of the following:
- permitted
- failed_syntax_check
- mailbox_quota_exceeded
- mailbox_not_found
- no_dns_entries
- disposable
- none
- opt_out
- blocked_domain
EmailVerify.Instance.CheckBalance(
response =>
{
Console.WriteLine($"Response: {response}");
Console.WriteLine($"API Status: {response.ApiStatus}");
Console.WriteLine($"Daily Credit Limit: {response.DailyCreditsLimit}");
if (response.IsAppSumoUser)
{
Console.WriteLine($"Remaining Daily Credits: {response.RemainingDailyCredits}");
Console.WriteLine($"Bonus Credits: {response.BonusCredits}");
}
else
{
Console.WriteLine($"Referral Credits: {response.ReferralCredits}");
Console.WriteLine($"Remaining Credits: {response.RemainingCredits}");
}
},
error =>
{
Console.WriteLine($"Error: {error}");
});
For simple users sample response:
EVBalanceResponse {
apiStatus='enabled',
dailyCreditsLimit=0,
remainingCredits=9741,
referralCredits=0,
isAppSumoUser=False
}
You can get the values by:
Api Status: {response.ApiStatus}
Referral Credits: {response.ReferralCredits}
Remaining Credits: {response.RemainingCredits}
Daily Credits Limit: {response.DailyCreditsLimit}
For appsumo users sample response:
EVBalanceResponse {
apiStatus='enabled',
dailyCreditsLimit=1000,
remainingDailyCredits=998,
bonusCredits=35000,
isAppSumoUser=True
}
You can get the values by:
Api Status: {response.ApiStatus}
Daily Credit Limit: {response.DailyCreditsLimit}
Bonus Credits: {response.BonusCredits}
is appsumo user: {response.IsAppSumoUser}
var emails = new List<string>
{
"user1@example.com",
"user2@example.com",
"user3@example.com"
};
EmailVerify.Instance.ValidateBatch("<TITLE_OF_TASK>", emails, // Title and emails are required filed
response =>
{
Console.WriteLine($"Response: {response}");
Console.WriteLine($"Task ID: {response.TaskId}");
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Emails submitted: {response.CountSubmitted}");
Console.WriteLine($"Duplicates removed: {response.CountDuplicatesRemoved}");
Console.WriteLine($"Rejected emails: {response.CountRejectedEmails}");
Console.WriteLine($"Processing: {response.CountProcessing}");
},
error =>
{
Console.WriteLine($"Error: {error}");
});
Sample Response:
EVBatchSubmitResponse {
status='queued',
taskId=2940,
countSubmitted=3,
countDuplicatesRemoved=0,
countRejectedEmails=0,
countProcessing=3
}
int task_id = <TASK_ID>; // Task Id you get while using batch validation api
// MUST BE integer
EmailVerify.Instance.GetBatchResult(task_id,
response =>
{
Console.WriteLine($" Response: {response}");
Console.WriteLine($" Task Name: {response.Name}");
Console.WriteLine($" Task ID: {response.TaskId}");
Console.WriteLine($" Status: {response.Status}");
Console.WriteLine($" Progress: {response.ProgressPercentage}");
Console.WriteLine($" Checked: {response.CountChecked}/{response.CountTotal}");
if (response.Results?.EmailBatch != null && response.Results.EmailBatch.Count > 0)
{
Console.WriteLine("\nπ Individual Results:");
Console.WriteLine("----------------------");
for (int i = 0; i < response.Results.EmailBatch.Count; i++)
{
var result = response.Results.EmailBatch[i];
Console.WriteLine($"{result.Address}:{result.Status}: ({result.SubStatus})");
}
}
},
error =>
{
Console.WriteLine($"Error: {error}");
});
Sample Response when verification completed:
EVBatchResultResponse {
countChecked=3,
countTotal=3,
name='Task Title',
progressPercentage='100',
taskId='2940',
status='verified',
results=EVBatchResults{
emailBatch=
[EVBatchEmailResult {
address='user1@example.com',
status='do_not_mail',
subStatus='mailbox_quota_exceeded'
},
EVBatchEmailResult{
address='user2@example.com',
status='do_not_mail', subStatus='mailbox_quota_exceeded'
},
EVBatchEmailResult{
address='user3@example.com',
status='do_not_mail', subStatus='mailbox_quota_exceeded'
}]
}
}
Sample Response when verification pending:
EVBatchResultResponse{countChecked=0, countTotal=3, name='Task Title', progressPercentage='0.0', taskId='2941', status='queued', results=null}
EmailVerify.Instance.FindEmail("<USER_NAME>", "<DOMAIN.COM>",
response =>
{
Console.WriteLine($"Response: {response}");
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Result: {response.Email}");
if (response.IsFound) // IF email found
{
Console.WriteLine($"β Found: {response.Email}");
}
else
{
Console.WriteLine($"Not Found");
}
},
error =>
{
Console.WriteLine($" Error: {error}");
});
Sample Response when email not found:
EVFinderResponse {
email='null',
status='not_found',
isFound=False
}
Sample Response when email found:
EVFinderResponse {
email='user@example.com',
status='found',
isFound=True
}
public class EVValidateResponse
{
public string Email { get; set; } // Email address validated
public string Status { get; set; } // Validation status (valid, invalid, etc.)
public string SubStatus { get; set; } // Detailed sub-status
}
public class EVBalanceResponse
{
public string ApiStatus { get; set; } // API status (enabled/disabled)
public int DailyCreditsLimit { get; set; } // Daily credits limit
public int? ReferralCredits { get; set; } // Referral credits (regular users)
public int? RemainingCredits { get; set; } // Remaining credits (regular users)
public int? RemainingDailyCredits { get; set; } // Remaining daily credits (AppSumo users)
public int? BonusCredits { get; set; } // Bonus credits (AppSumo users)
public bool IsAppSumoUser { get; } // True if AppSumo user
}
public class EVBatchSubmitResponse
{
public string Status { get; set; } // Submission status
public string TaskId { get; set; } // Task ID for tracking
public int CountSubmitted { get; set; } // Emails submitted
public int CountDuplicatesRemoved { get; set; } // Duplicates removed
public int CountRejectedEmails { get; set; } // Rejected emails
public int CountProcessing { get; set; } // Emails being processed
}
public class EVBatchResultResponse
{
public int CountChecked { get; set; } // Emails processed
public int CountTotal { get; set; } // Total emails in batch
public string Name { get; set; } // Task name
public string ProgressPercentage { get; set; } // Progress percentage
public string TaskId { get; set; } // Task ID
public string Status { get; set; } // Task status
public EVBatchResults Results { get; set; } // Batch results
}
public class EVFinderResponse
{
public string Email { get; set; } // Found email or "null"
public string Status { get; set; } // Status (found/not_found)
public bool IsFound { get; } // True if email was found
}
For security, use environment variables instead of hardcoding API keys:
string apiKey = Environment.GetEnvironmentVariable("EMAILVERIFY_API_KEY");
EmailVerify.Instance.Initialize(apiKey);
dotnet test