11

我正在使用 EWS 托管 API 发送电子邮件。帐户“帐户@domain.com”具有“发送为”权限,以使用“发件人@domain.com”邮箱发送邮件(从 Outlook,它工作正常)。

但是我从代码中尝试-它不起作用,在邮件中我在“发件人”“帐户@domain.com”字段中读取。

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

如何代表另一个用户发送邮件?:)

4

2 回答 2

6

自从我摆弄同样的事情以来已经有一段时间了,我得出的结论是这是不可能的,尽管有“发送为”的权利。

模拟是使用 EWS 的唯一方法,请参阅MSDN

ExchangeService service = new ExchangeService();
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("app@domain.com");

// impersonate user e.g. by specifying an SMTP address:
service.ImpersonatedUserId = new ImpersonatedUserId(
    ConnectingIdType.SmtpAddress, "user@domain.com");

如果未启用模拟,您必须提供您要代表的用户的凭据。请参阅此 MSDN 文章

ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential("user", "password", "domain");
service.AutodiscoverUrl("user@domain.com");

或者,您可以简单地指定一个回复地址

EmailMessage mail = new EmailMessage(service);
mail.ReplyTo.Add("user@email.com");

但是,“发送为”权限在使用 System.Net.Mail 发送邮件时确实适用,在许多情况下,这在仅发送电子邮件时就可以了。有大量示例说明如何执行此操作

// create new e-mail
MailMessage mail = new MailMessage();
mail.From = new MailAddress("user@domain.com");
mail.To.Add(new MailAdress("recipient@somewhere.com"));
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);
于 2012-07-20T09:32:02.433 回答
1

我认为您应该使用该Sender属性,因此您的代码应如下所示:

EmailMessage message = new EmailMessage(service);
message.Body = txtMessage;
message.Subject = txtSubject;
message.Sender= txtFrom;
....
message.SendAndSaveCopy();
于 2013-09-04T08:55:57.550 回答