Отправка писем по электронной почте - PullRequest
0 голосов
/ 08 ноября 2010

Я настроил smpt mail для своего сайта, и он работает, когда я пытался отправить одно сообщение, но у меня возникает следующая ошибка, когда я хочу отправить его большему количеству людей. Кроме того, я использую метод 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 голосов
/ 08 марта 2012

У меня похожая ситуация, когда я отправляю несколько электронных писем и не жду, пока одно из них закончится, прежде чем отправлять другое.

То, что я сделал, это инициировал новый 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 месяцев назад.

...