изменил свойства MailMessage, теперь он висит на клиенте. Отправить - PullRequest
1 голос
/ 15 декабря 2009

Я использую System.Net.Mail.MailMessage для отправки электронных писем из моего приложения C # для Windows.

У меня изначально было это:

MailMessage mail = new MailMessage("from@address.com", "to@address.com");

и т. Д., Который работал нормально - но тогда мне нужно было добавить несколько адресов To, поэтому я изменил это на:

MailMessage mail = new MailMessage();

mail.From = new MailAddress("from@address.com");
foreach (string to in to_add)
{
    if (to.Trim() != "")
    {
        mail.To.Add(to.Trim());
    }
}

mail.Body = message;
mail.Subject = "Subject Text";

SmtpClient client = new SmtpClient("0.0.0.0");
client.UseDefaultCredentials = true;

client.Send(mail);

Этот код может циклически повторяться несколько раз, и будет не более 3 адресов в массиве строк - первый раз, когда он запускается, все нормально - но затем второй цикл проходит, он зависает на

client.Send(mail);

Я что-то здесь упускаю? Это первый раз, когда я использую MailMessage, поэтому, вероятно, я что-то упустил.

Приветствия

Leddy

p.s. Я не использую IP-адрес "0.0.0.0", я просто удалил правильный из соображений безопасности.

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

Вы должны иметь адрес.

Код, который вы разместили, может оказаться без адреса в сообщении MailMessage.

Кроме того, SMTP-сервер "0.0.0.0" не будет существовать. Это недопустимый IP-адрес для сервера - он зарезервирован для «Неизвестно».

0 голосов
/ 03 февраля 2012

Класс MailMessage реализует IDiposable, так что, возможно, это из-за того, что вы не избавляетесь от него?

Кроме того, до .NET 4.0 System.Net.Mail.SmtpClient не был одноразовым, но в 4.0 он реализует IDisposable, так что вы хотели бы также обернуть его в оператор using. Код будет выглядеть так:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("from@address.com");
    mail.To.Add(string.Join(",", to_add ));
    mail.Body = message;
    mail.Subject = "Subject Text";

    using (SmtpClient client = new SmtpClient("0.0.0.0"))
    {
        client.UseDefaultCredentials = true;
        client.Send(mail);
    }
}
0 голосов
/ 15 декабря 2009

Предполагая, что to_add является массивом адресов, вам не нужно перебирать его, добавляя их. Это должно работать:

mail.To.Add( string.Join( ",", to_add ) );

Поскольку у вас, по-видимому, не было исключений, это будет только сокращать ваш код.

Значение по умолчанию Тайм-аут составляет 100 секунд. Вы достаточно долго ждете?

Другой вариант - использовать SendAsync , чтобы он не блокировался.

Если вы еще не прочитали документацию, вот ссылка на SmtpClient.Send на MSDN .

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