SmtpClient не закрывает сессию после отправки сообщения - PullRequest
1 голос
/ 07 января 2010

У меня есть функция, которая отправляет электронную почту, используя встроенный в почтовый фрейм asp.net. Я включил это ниже.

public void SendMessage()
{
    var message = new MailMessage();
    var client = new SmtpClient();

    // Get the Message Envelope Details
    this.LoadMessageDetailsFromFile();

    // Process rules (if any): Rules engine not implemented yet!
    this.SetConfiguration(message);

    // Formats the message body template using XSLT
    this.FormatMessageBody(message);

    // Adds the attachments 
    this.AddAttachments(message);


    // Send the mail
    client.Timeout = 999999999;
    client.Send(message);

    //Clean up attachments
    foreach (var attachment in message.Attachments)
    {
        attachment.Dispose();
    }
}

Теперь ни в коем случае общий размер сообщения не превышает 10 МБ, однако при обмене возникает ошибка, согласно которой максимальный размер каждого сеанса составляет 20 МБ. .Net как-то пакетно отправляет сообщения в SMTP? Почему возникает эта ошибка, даже если каждый раз, когда я отправляю электронное письмо, я создаю новый объект SMtpClient?

Точная ошибка обмена: размер сеанса превышает фиксированный максимальный размер сеанса

Кажется, что подчеркивающее соединение используется повторно, даже если вы создаете новые экземпляры SMTPClient.

Кто-нибудь знает обходной путь, не работает следующее:

Smtp client = new SmtpClient("hostname");
client.ServicePoint.MaxIdleTime = 0;
client.ServicePoint.ConnectionLimit = 1;

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 07 января 2010

Любой SMTPClient, предоставленный .NET Framework ниже v4 Beta 2, содержит ошибки, и НИКОГДА не отправляет команду QUIT на SMTP-сервер. Обходного пути нет. Решение состоит в том, чтобы использовать стороннее приложение для отправки электронных писем. .net не подходит для массовой электронной почты на SMTP-серверах, которые ограничивают размер сеанса до 20 МБ.

1 голос
/ 07 января 2010

Вложения в электронные письма кодируются с использованием base64, что может сделать их значительно больше в зависимости от содержимого файла. Из статьи в Википедии по base64 :

Таким образом, фактическая длина MIME-совместимый base64-кодированный двоичный файл данные обычно составляют около 137% исходная длина данных, хотя для очень короткие сообщения накладные расходы могут быть намного выше из-за накладных расходов заголовки. Очень грубо, финал размер двоичных данных в кодировке base64 равен 1,37 раза исходных данных размер + 814 байт (для заголовков). В Другими словами, вы можете приблизить размер декодированных данных с этим формула: байты = (длина_строки (кодированная_строка) - 814) / 1,37. Обратите внимание, что эти формулы не должны использоваться для рассчитать точный объем памяти для держать закодированные данные, так как они очень грубо и производят ошибки в обоих направления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...