2010-01-07 5 views
1

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

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 Мб, однако обмен производит ошибку о том, что 20MB это максимальный размер для каждой сессии. Делает ли .net как-то пакетное сообщение на SMTP? Зачем это делать, даже когда я отправляю электронное письмо, я создаю новый объект SMtpClient?

Exact Обмен Ошибка: размер сеанса превышает фиксированный максимальный объем сессии

Кажется, что подчеркивает соединение повторно, даже если вы создаете новые экземпляры SmtpClient.

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

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

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

+0

Хост для настройки SMTP-сервера - это сам сервер Exchange? –

+0

Да, это правильно. –

+1

Я бы предложил вам заглянуть в журнал Exchange (если возможно), чтобы проверить, действительно ли цикл рассматривается как один сеанс с точки зрения обмена. –

ответ

1

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

+0

И когда я говорю о массе здесь, не говоря о рассылке планеты, говоря о отправке 10 сообщений в интрасеть ... –

1

вложения на электронную почту получить кодируются с помощью base64, что может сделать их значительно больше, в зависимости от содержания файла , От the Wikipedia article on base64:

Thus, the actual length of MIME-compliant base64-encoded binary data is usually about 137% of the original data length, though for very short messages the overhead can be a lot higher because of the overhead of the headers. Very roughly, the final size of base64-encoded binary data is equal to 1.37 times the original data size + 814 bytes (for headers). In other words, you can approximate the size of the decoded data with this formula: bytes = (string_length(encoded_string) - 814) /1.37. Please note that these formulas should not be used to calculate the exact memory size to hold encoded data since they are very rough and produce errors in both directions

+0

Интересная информация действительно, однако, если я начал с размера вложений размером 10 МБ, то, конечно же, это не должно удваивать размер сообщения? –

+0

Это маловероятно, но возможно. Это зависит от содержимого файла, текстовые файлы обычно не растут, а двоичные файлы. Почему бы вам не попробовать кодировать вложение и проверить размер? Вы можете быть удивлены результатом. – Rory

+1

Думаю, я нашел проблему - http://www.vbforums.com/showthread.php?t=584384 –