Удалить адреса To и BCC с помощью System.Net.Mail
Я обновляю приложение массовой рассылки, чтобы использовать новое пространство имен System.Net.Mail. Я также настраиваю AlternateViews для текстовой и HTML-версий.
В настоящее время я использую DataReader для получения адресов электронной почты из БД и отправки писем. В старом коде я очищал бы свойства To и BCC в конце цикла.
MailMessage mailMessage = new MailMessage();
while (dr.Read())
{
....
mailMessage.To.Add(new MailAddress(dr["EmailAddress"].ToString()));
if ((bool)dr["SecondaryNotify"])
mailMessage.Bcc.Add(new MailAddress(dr["SecondaryEmail"].ToString()));
// Send email
...
}
По-видимому, существует метод Remove, который можно вызвать в свойстве To класса MailMessage mailMessage.To.Remove(элемент MailAddress) - я определил это из intellisense. Я проверил MSDN и не могу найти пример такого использования.
Может ли кто-нибудь помочь с синтаксисом для удаления адресов To и BCC для каждой итерации цикла - после того, как каждое электронное письмо было отправлено?
3 ответа
Перейти с более простым решением. Просто создайте экземпляр MailMessage в цикле while. Тогда вам не нужно ничего удалять.
while (dr.Read())
{
var mailMessage = new MailMessage();
....
mailMessage.To.Add(new MailAddress(dr["EmailAddress"].ToString()));
if ((bool)dr["SecondaryNotify"])
mailMessage.Bcc.Add(new MailAddress(dr["SecondaryEmail"].ToString()));
// Send email
...
}
var adresse = dr["SecondaryEmail"].ToString();
int iMessageInArray = mailMessage.To.Count();
if(iMessageInArray > 0)
{
foreach (var mailadress in mailMessage.To)
{
if (mailadress.Address == adresse)
{
mailMessage.To.Remove(mailadress);
}
}
}
У меня была такая же проблема в одном из моих кодов...
Попробуй это:
MailMessage mailMessage = new MailMessage();
while (dr.Read())
{
//Your code from HERE
mailMessage.To.Add(new MailAddress(dr["EmailAddress"].ToString()));
if ((bool)dr["SecondaryNotify"])
mailMessage.Bcc.Add(new MailAddress(dr["SecondaryEmail"].ToString()));
// Send email
...
//Then email delete from .To
int iMessageInArray = mailMessage.To.Count(); //Finds the amount of emails in the array
if(iMessageInArray > 0)
{
for(int i = 0; i < iMessageInArray; i++)
{
mailMessage.To.Remove(mailMessage.To[0]); //When one line is removed, the next email comes in index 0 of the array.
}
}
}