簡體   English   中英

使用C#發送批量電子郵件

[英]Sending batch email in C#

編輯我使用以下代碼在C#中發送批處理電子郵件。 但是,當其中一個收件人的電子郵件地址無效時,甚至不會向其電子郵件地址有效的其他收件人發送電子郵件,並且我得到了例外:

system.net.mail.smtpfailedrecipientsexception失敗的收件人

即使其中一個電子郵件地址無效,有什么方法可以將電子郵件發送給其他有效的收件人?

public void SendMailMessage (string[] to,string message,string subject) 
{
    MailMessage mMailMessage = new MailMessage ();
    int lenght = to.GetLength(0);
    if (lenght > 1) {
        foreach (string email in to) {
            mMailMessage.Bcc.Add ( email );
        }
    }
    else {
        mMailMessage.To.Add ( to[0] );
    }

            mMailMessage.From = new MailAddress ("no-replay@mycompany.net");                  
            SmtpClient mSmtpClient = new SmtpClient ();
            mMailMessage.Body = message;
            mMailMessage.IsBodyHtml = true;
            mMailMessage.Priority = MailPriority.Normal;
            mMailMessage.Subject = subject;
            mSmtpClient.EnableSsl = true;                
            ServicePointManager.ServerCertificateValidationCallback = delegate(object s,X509Certificate certificate,X509Chain chain, SslPolicyErrors sslPolicyErrors) {return true;};                    
        try {  
            mSmtpClient.Send (mMailMessage);                
    }
    catch (SmtpFailedRecipientsException ex){
        for (int i = 0; i < ex.InnerExceptions.Length; i++)
        {
            SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
            if (status == SmtpStatusCode.MailboxBusy ||
                status == SmtpStatusCode.MailboxUnavailable)
            {
                Logger.Debug("Delivery failed - retrying in 5 seconds.");
                System.Threading.Thread.Sleep(5000);
                //client.Send(message);
                mSmtpClient.Send (mMailMessage);

            }
            else
            {
                Logger.Debug (string.Format ("Failed to deliver message to {0},{1}", ex.InnerExceptions[i].FailedRecipient, i));

            }

        }
    }
    catch (Exception ex)
    {
        Logger.Debug (string.Format("Exception caught in RetryIfBusy(): {0}", ex.ToString() ));
    }

}

此外,在將字符串電子郵件地址發送到SendMailMessage方法之前,請通過以下方法檢查它們是否有效:

public bool IsValidEmail(string emailaddress)
    {
        try
        {
            MailAddress m = new MailAddress(emailaddress);
            return true;
        }
        catch (FormatException)
        {
            return false;
        }
    }

就我個人而言,我會遍歷並多次調用“發送”(每個地址一個)。 如果將密件抄送發送到許多地址,可能會出錯,包括郵件服務器由於地址過多而拒絕它。

當使用“發送到多個收件人”發送電子郵件並且SMTP服務器接受某些收件人為有效的收件人而拒絕其他收件人時,“發送”會將電子郵件發送給接受的收件人,然后引發SmtpFailedRecipientsException。 該例外將包含被拒絕的收件人的列表。

從文檔: http : //msdn.microsoft.com/en-us/library/swas0fwc.aspx

聽起來它確實可以實現您想要的功能,請嘗試將其發送到您可以訪問的電子郵件中,然后查看是否已發送該電子郵件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM