Alo*_*kin 2 .net c# email smtp
通常情况下,我会发送这样的电子邮件:
int statusCode = 0;
string error = null;
try
{
smtp.Send(mailMessage);
statusCode = 250;
}
catch (SmtpFailedRecipientException e)
{
Log(String.Format("[Exception] {0}\n\tSmtp: {1}{2}:{3}\n\tStatus Code: {4}\n\tFaild Recipient: {5}", e.Message, smtp.Key, smtp.Value.Host, smtp.Value.Port, e.StatusCode, e.FailedRecipient));
statusCode = (int)e.StatusCode;
error = e.Message;
}
catch (SmtpException e)
{
Log(String.Format("[Exception] {0}\n\tSmtp: {1} - {2}:{3}\n\tStatus Code: {4}", e.Message, smtp.Key, smtp.Value.Host, smtp.Value.Port, e.StatusCode));
statusCode = (int)e.StatusCode;
error = e.Message;
}
catch (Exception e)
{
Log(String.Format("[Exception] {0}.\n\tSource: {1}\n\tStack Trace: {2}", e.Message, e.Source, e.StackTrace));
statusCode = -1;
error = "General Failure";
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法不允许我捕获一些更"高级"的SMTP错误,例如No Domain,No such Email等.
如何捕获这种SMTP错误?这甚至可能吗?
例如,当我尝试将Gmail发送到某个地址时asdfkljhadf@dgdfasdf.com
,Gmail会在一段时间后发送给我一封asdfkljhadf@dgdfasdf.com
不存在的电子邮件.
谢谢.
SMTP是一种"存储转发"协议,这意味着服务器可以接受转发消息,但在无法传递消息时却不知道.因此,例如,当您告诉ISP的SMTP服务器向"invalidaddress@example.com"发送消息时,服务器的响应是"好的,我会转发它".稍后,ISP的SMTP服务器将联系SMTP服务器以获取"example.com",并尝试传递该消息.只有这样才知道邮件无法送达.
因此,就您的客户端和SMTP服务器之间的通信而言,消息已成功传递 - 服务器同意转发它.因此,也不例外.