#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>
, если контакт существует в адресной книге