Править: Этот вопрос бессмыслен, за исключением упражнения в отвлекающих маневрах. Проблема оказалась комбинацией моего идиотизма (НИКТО не посылался по электронной почте, поскольку хост не указывался и был неправильным в web.config), и пользователи, говорящие мне, что они иногда получали электронные письма и иногда не делали, когда в действительности они никогда не получали электронные письма.
Так, вместо того, чтобы делать надлежащие шаги для репродуцирования проблемы в управляемой установке я полагался на информацию о пользователе и, "она работает над моей машиной" менталитет. Хорошее напоминание мне и кому-либо еще там, кто иногда идиот.
Я просто поразил что-то, что я думаю, непоследовательно, и требуемый, чтобы видеть, делаю ли я что-то не так, если я - идиот, или...
MailMessage msg = new MailMessage();
msg.To.Add("person1@domain.com");
msg.To.Add("person2@domain.com");
msg.To.Add("person3@domain.com");
msg.To.Add("person4@domain.com");
Действительно только посылает это электронное письмо 1 человеку, последнему.
Для добавления кратных чисел, я должен сделать это:
msg.To.Add("person1@domain.com,person2@domain.com,person3@domain.com,person4@domain.com");
Я не получаю его. Я думал, что добавлял несколько человек к To
набор адреса, но что я делал, заменял его.
Я думаю, что просто осознал свою ошибку - чтобы добавить один объект к набору, использовать.To. Добавьте (новый MailAddress ("person@domain.com"))
Если Вы используете просто a string
, это заменяет все, что это имело в его списке.Править: Другие люди протестировали и не видят это поведение. Это - или ошибка в моей конкретной версии платформы, или более вероятно, слабоумный маневр мной.
Тьфу. Я считал бы это довольно большим глюком! Так как я ответил на свой собственный вопрос, но я думаю, что это значимо, чтобы иметь в архиве stackoverflow, я все еще спрошу это. Возможно, у кого-то даже есть идея других прерываний, что можно упасть в.
Я не смог воспроизвести вашу ошибку:
var message = new MailMessage();
message.To.Add("user@example.com");
message.To.Add("user2@example.com");
message.From = new MailAddress("test@example.com");
message.Subject = "Test";
message.Body = "Test";
var client = new SmtpClient("localhost", 25);
client.Send(message);
Выгрузка содержимого To: MailAddressCollection:
MailAddressCollection (2 items)
DisplayName User Host Addressuser example.com user@example.com
user2 example.com user2@example.com
И полученное письмо, пойманное smtp4dev:
Received: from mycomputername (mycomputername [127.0.0.1])
by localhost (Eric Daugherty's C# Email Server)
3/8/2010 12:50:28 PM
MIME-Version: 1.0
From: test@example.com
To: user@example.com, user2@example.com
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Test
Вы уверены, что нет какой-то другой проблемы с вашим кодом или SMTP сервером?
Добавьте несколько объектов System.MailAdress, чтобы получить то, что вы хотите.
Вы можете сделать это либо с несколькими объектами System.Net.Mail.MailAddress
, либо предоставить одну строку, содержащую все адреса, разделенные запятыми
Можно попробовать поместить e-mail в строку через запятую ("person1@domain.com, person2@domain.com"
):
C#:
ArrayList arEmails = new ArrayList();
arEmails.Add("person1@domain.com");
arEmails.Add("person2@domain.com");
string strEmails = string.Join(", ", arEmails);
VB.NET если интересно:
Dim arEmails As New ArrayList
arEmails.Add("person1@domain.com")
arEmails.Add("person2@domain.com")
Dim strEmails As String = String.Join(", ", arEmails)