发送电子邮件异步问题

时间:2010-11-08 09:51:39

标签: c# asp.net smtp sendmail smtpclient

我为我的网站配置了smpt邮件,当我尝试发送一封电子邮件时它正常工作,但是当我想将它发送给更多人时我有以下错误,另外我使用SendAsyn方法。

当我使用LOOP发送所有电子邮件时

语法错误,命令无法识别。服务器响应是:
在System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult结果)
在System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult结果)


当我将所有电子邮件添加到BCC

服务不可用,关闭传输通道。
服务器响应是:太多坏命令,关闭传输通道
在System.Net.Mail.SendMailAsyncResult.End(IAsyncResult结果)
在System.Net.Mail.SmtpTransport.EndSendMail(IAsyncResult结果)
在System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult结果

解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我有类似的情况,我发送多封电子邮件,而不是等待一封电子邮件发送,然后发送另一封电子邮件。

我所做的是为每个要发送和发送的邮件发起新的SMTPClient。像这样:

        private void SendMailAsync(string ids, MailMessage mail)
    {
        SmtpClient client = null;

        try
        {
            client = new SmtpClient(ConfigurationManager.AppSettings["MailServer"], Convert.ToInt32(ConfigurationManager.AppSettings["MailPort"]));

            string userState = "MailQueueID_" + ids;

            client.SendCompleted += (sender, e) =>
            {
                // Get the unique identifier for this asynchronous operation
                String token = (string)e.UserState;
                DateTime now = DateTime.Now;
                try
                {
                    if (e.Cancelled)
                    {
                        LogError(new Exception(token + " - Callback cancelled"));
                        return;
                    }
                    if (e.Error != null)
                    {
                        LogError(e.Error);
                    }
                    else
                    {
                        logWriter.WriteToLog(this.jobSite + " - " + token + " (Email sent)");
                        try
                        {
                            int updated = UpdateMailQueue(token, now);
                            if (updated > 0)
                            {
                                // Update your log
                            }
                        }
                        catch (SqlException sqlEx)
                        {
                            LogError(sqlEx);
                        }
                    }
                }
                catch (ArgumentNullException argument)
                {
                    LogError(argument);
                }
                finally
                {
                    client.SendCompleted -= client_SendCompleted;
                    client.Dispose();
                    mail.Dispose();

                    // Delete the attachment if any, attached to this email
                    DeleteZipFile(token);

                    counter--;

                }
            };
            client.SendAsync(mail, userState);
            counter++;
        }
        catch (ArgumentOutOfRangeException argOutOfRange)
        {
            LogError(argOutOfRange);
        }
        catch (ConfigurationErrorsException configErrors)
        {
            LogError(configErrors);
        }
        catch (ArgumentNullException argNull)
        {
            LogError(argNull);
        }
        catch (ObjectDisposedException objDisposed)
        {
            LogError(objDisposed);
        }
        catch (InvalidOperationException invalidOperation)
        {
            LogError(invalidOperation);
        }
        catch (SmtpFailedRecipientsException failedRecipients)
        {
            LogError(failedRecipients);
        }
        catch (SmtpFailedRecipientException failedRecipient)
        {
            LogError(failedRecipient);
        }
        catch (SmtpException smtp)
        {
            LogError(smtp);
        }
    }

错误是在SendCompletedEvent处理程序中捕获的。

当然,只有一封电子邮件出现错误,而另外7封邮件在同一次运行之前和之后都通过不同的邮箱。导致错误的原因,我还是不知道。

当我再次运行我的程序时,它会选择未发送的邮件并将其成功发送出去。

希望这有助于其他人知道这个问题是在15个月前发布的。