当reciepent有错误的电子邮件地址时,Smtp.Send不会抛出任何错误

时间:2013-10-31 18:13:19

标签: c# .net smtp

我正在使用SmtpClient.Send Method发送电子邮件,但是当我尝试发送到不存在的电子邮件帐户时,Send方法不会抛出任何异常,如何判断收件人邮件地址是有效的,还是邮件不会到达,或检测到这个问题。

代码:

            Properties.Settings appSettings = new Properties.Settings();
            MailMessage message = new MailMessage();

            message.From = new MailAddress(appSettings.senderMail);        
            message.Subject = appSettings.mailsubj;
            message.Body = appSettings.mailbody;
            Attachment attach = new Attachment(sOutput);
            message.Attachments.Add(attach);

            SmtpClient client = new SmtpClient(appSettings.SMTP);

            client.SendCompleted += this.SendCompletedCallback;
            foreach (String clientEmail in clientEmailList)
            {
                message.To.Clear();
                message.To.Add(clientEmail);
                //client.Send(message);

                try
                {
                    client.Send(message);
                    AddToLog(String.Format("\t{0}{1}", Properties.Resources.ResourceManager.GetString("MAIL_SEND_SUCCESS"), clientEmail));
                }
                catch (SmtpFailedRecipientException ex)
                {
                    AddToLog(String.Format("\t{0}{1}:\n\t{2}", Properties.Resources.ResourceManager.GetString("MAIL_SEND_ERROR"), clientEmail, ex.Message));
                }
                catch (SmtpException smtp_Ex)
                {
                    AddToLog(String.Format("\t{0}{1}:\t{2}", Properties.Resources.ResourceManager.GetString("MAIL_SEND_ERROR"), clientEmail, "Cannot connect to SMTP server."));
                }
                catch (Exception ex)
                {
                    AddToLog(String.Format("\t{0}{1}:\n\t{2}", Properties.Resources.ResourceManager.GetString("MAIL_SEND_ERROR"), clientEmail, ex.Message));
                }
              //  client.SendAsync(message, clientEmail);
            }

1 个答案:

答案 0 :(得分:3)

当SMTP客户端发送邮件时,它不知道电子邮件地址的有效性,如果该地址属于域,则与SMTP服务器的域不同。

只有在您的SMTP服务器尝试从其他域向收件人发送邮件后,才能知道此信息。通常,在这种情况下,您将收到错误的邮件消息。