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

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

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

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

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

Ответ 1

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

Олицетворение - единственный способ пойти с 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);

Ответ 2

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

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