Управляемый API EWS: как настроить отправку электронной почты?

Я использую управляемый API EWS для отправки электронной почты. У учетной записи «account @ domain.com» есть разрешения «Отправить как», чтобы использовать почтовый ящик «sender @ domain.com» для отправки сообщений (из Outlook, все работает нормально).

Но пробую из кода - не работает, в почте читаю поле «От» «аккаунт @ domain.com».

....
EmailMessage message = new EmailMessage(service);
message.Body = txtMessage;
message.Subject = txtSubject;
message.From = txtFrom;
....
message.SendAndSaveCopy();

Как сделать отправку почты от имени другого пользователя? :)


person ABarto    schedule 19.01.2012    source источник


Ответы (2)


Прошло некоторое время с тех пор, как я возился с одним и тем же, и пришел к выводу, что это невозможно, несмотря на то, что у меня есть права «Отправить как».

Выдача себя за другое лицо - единственный способ использовать EWS, см. MSDN:

ExchangeService service = new ExchangeService();
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("[email protected]");

// impersonate user e.g. by specifying an SMTP address:
service.ImpersonatedUserId = new ImpersonatedUserId(
    ConnectingIdType.SmtpAddress, "[email protected]");

Если олицетворение не включено, вам нужно будет предоставить учетные данные пользователя, от имени которого вы хотите действовать. См. эту статью MSDN.

ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential("user", "password", "domain");
service.AutodiscoverUrl("[email protected]");

В качестве альтернативы вы можете просто указать адрес для ответа.

EmailMessage mail = new EmailMessage(service);
mail.ReplyTo.Add("[email protected]");

Однако права «Отправить как» действительно применяются при отправке почты с использованием System.Net.Mail, что во многих случаях вполне подходит при простой отправке электронной почты. Существует масса примеров, иллюстрирующих как это сделать.

// create new e-mail
MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]");
mail.To.Add(new MailAdress("[email protected]"));
message.Subject = "Subject of e-mail";
message.Body = "Content of e-mail";

// send through SMTP server as specified in the config file
SmtpClient client = new SmtpClient();
client.Send(mail);
person bernhof    schedule 20.07.2012
comment
mail.ReplyTo работать не будет, сеттера на этом нет. общедоступный EmailAddressCollection ReplyTo {получить; } - person RobDigital; 19.10.2016
comment
Верно, это коллекция. Так что вам нужно сделать mail.ReplyTo.Add("[email protected]") - я исправлю приведенный выше пример. - person bernhof; 26.10.2016
comment
При использовании олицетворения я получаю сообщение об ошибке на mail.send. - При обращении к почтовому ящику необходимо указать основной SMTP-адрес. - person markthewizard1234; 07.02.2017
comment
@ markthewizard1234 быстро поискал в Google, и я нашел это: social.msdn.microsoft.com/Forums/exchange/en-US/. Как показывает ошибка, вы при указании почтового ящика, к которому вы хотите получить доступ, необходимо использовать первичный SMTP-адрес, а не прокси / вторичный адрес или псевдоним. - person bernhof; 17.02.2017

Я думаю, вам следует использовать свойство Sender, чтобы ваш код выглядел так:

EmailMessage message = new EmailMessage(service);
message.Body = txtMessage;
message.Subject = txtSubject;
message.Sender= txtFrom;
....
message.SendAndSaveCopy();
person Wicaksono Trihatmaja    schedule 04.09.2013
comment
Нет, похоже, это не работает. Я пробовал установить отправителя, sender.name и sender.Address, и даже если они настроены, электронное письмо по-прежнему приходит из учетной записи, указанной в настройках вашей службы. - person RobDigital; 19.10.2016