Это мой код. Я использую его для проверки адреса электронной почты.Как проверить, отправлено ли электронное письмо
using System;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using Vishwaprani.ContextClass;
using Vishwaprani.Models;
using System.Net.Mail;
using System.Threading;
namespace Vishwaprani.CustomValidator
{
public class EmailAddresValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
string mailadress = Convert.ToString(value);
MailMessage email = new MailMessage(new MailAddress("[email protected]", "Email validation"), new MailAddress(mailadress, "Validating email address"));
email.Subject = "email validation";
email.Body = @"Test for validation";
var client = new SmtpClient("smtp.gmail.com") ;
client.Port=587;
client.EnableSsl=true;
client.Credentials = new System.Net.NetworkCredential("emailvalidation123456", "U50h2#[email protected]");
try
{
client.Send(email);
}
catch(SmtpFailedRecipientException ex)
{
if(ex.StatusCode==SmtpStatusCode.GeneralFailure||ex.StatusCode==SmtpStatusCode.LocalErrorInProcessing||ex.StatusCode==SmtpStatusCode.ServiceNotAvailable||ex.StatusCode==SmtpStatusCode.TransactionFailed)
{
Thread.Sleep(5000);
try
{
client.Send(email);
}
catch(SmtpFailedRecipientException exc)
{
if (exc.StatusCode == SmtpStatusCode.GeneralFailure || exc.StatusCode == SmtpStatusCode.LocalErrorInProcessing || exc.StatusCode == SmtpStatusCode.ServiceNotAvailable || exc.StatusCode == SmtpStatusCode.TransactionFailed)
{
return new ValidationResult("There is a problem with your email address that can not be resolved. Please check it and try again later or enter another one.");
}
}
}
else if(ex.StatusCode==SmtpStatusCode.ExceededStorageAllocation||ex.StatusCode==SmtpStatusCode.InsufficientStorage)
{
return new ValidationResult("There is a storage issue with the email account. Please resolve that.");
}
else if(ex.StatusCode==SmtpStatusCode.MailboxBusy)
{
Thread.Sleep(5000);
try
{
client.Send(email);
}
catch(SmtpFailedRecipientException exct)
{
if (exct.StatusCode == SmtpStatusCode.MailboxBusy)
{
return new ValidationResult("Mail box is busy two times try again later.");
}
}
}
else if(ex.StatusCode==SmtpStatusCode.MailboxUnavailable)
{
return new ValidationResult("Mail box is unavailable.");
}
else
{
return new ValidationResult("There is an error with the email address you provided. Please check it.");
}
}
return ValidationResult.Success;
}
else return null;
}
}
}
Проблема заключается в том, когда я посылаю почту на неправильный адрес электронной почты код не бросает SmtpFailedRecipientException
и идет в ValidationResult. Успех. Во всяком случае, я довольно новичок в этом материале SmtpClient. Кто-нибудь знает, как это решить? , Это ошибочный адрес электронной почты, который я использовал для проверки:
[email protected]
Как вы можете видеть, ребята, нет никакого пути в ад, что-то адрес электронной почты может быть существует.
Proof (проверено с моим один):
Я хочу узнать, действительно ли этот адрес электронной почты существует. Подумайте, вводите ли вы адрес электронной почты, который кажется правильным, но на самом деле не существует. Я хочу такой код. – user3762230
См. Мое редактирование. – CharithJ
Вы не можете подтвердить, существует ли электронный адрес до отправки электронной почты. Вы можете использовать SmtpClient.SendCompleted Event, чтобы увидеть statu доставки <== как это сделать? – user3762230