Отправка электронной почты нескольким получателям в DataTable

#c# #outlook #office-interop

#c# #outlook #office-взаимодействие

Вопрос:

Я хочу добавить все электронные письма в моей datatable в Кому: моей электронной почты — я пробовал приведенный ниже код, но он добавляет точку с запятой после каждого символа в адресе электронной почты. Как мне нужно переписать это, чтобы был добавлен каждый адрес электронной почты?

 foreach (DataRow dr in datatatblefirst.Rows)  
{
  foreach (char eadd in r["Email"].ToString())
  {
    Outlook.Application oApp = new Outlook.Application();
    Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    oMsg.HTMLBody = "Body";
    oMsg.Subject = "Your Subject will go here.";
    Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;
    foreach (char email in r["Email"].ToString())
      oRecips.Add(eadd.ToString());
    oMsg.Save();
    oRecip = null;
    oRecips = null;
    oMsg = null;
    oApp = null; 
  }
}
  

Ответ №1:

Похоже, что вы перебираете каждый char адрес электронной почты.

Если r["Email"] содержит один адрес электронной почты, вы можете просто перебирать строки данных. Приведенный ниже код создаст одно электронное сообщение на каждый адрес электронной почты:

 foreach (DataRow dr in datatatblefirst.Rows)  
{  
    Outlook.Application oApp = new Outlook.Application();
    Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    oMsg.HTMLBody = "Body";
    oMsg.Subject = "Your Subject will go here.";
    Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;

    string emailAddress = r["Email"].ToString();
    Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add(emailAddress);
    oRecip.Resolve();

    oMsg.Save();
    //oMsg.Send();
    oRecip = null;
    oRecips = null;
    oMsg = null;
    oApp = null; 
}
  

Чтобы создать только одно электронное письмо и отправить на несколько адресов, создайте электронное письмо перед foreach :

 Outlook.Application oApp = new Outlook.Application();
Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
oMsg.HTMLBody = "Body";
oMsg.Subject = "Your Subject will go here.";
Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;

foreach (DataRow dr in datatatblefirst.Rows)  
{  
    string emailAddress = r["Email"].ToString();
    Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add(emailAddress);
    oRecip.Resolve();
}

oMsg.Save();
//oMsg.Send();
oRecips = null;
oMsg = null;
oApp = null; 
  

Строка oRecip.Resolve(); не требуется. Если контакт существует в адресной книге, он отформатирует адрес электронной почты как Some Name <somename@email.com> .

Адреса могут быть добавлены просто с помощью oRecips.Add(emailAddress); без создания или разрешения Recipient объекта.

Комментарии:

1. @DoctorFord Он пытается сопоставить имя получателя с адресной книгой. Вероятно, это не требуется. Документы здесь

2. Это поместило бы строку в формат Some One <someone@email.com> , если контакт существует в адресной книге