【问题标题】:EWS Managed API: how to set From of email?EWS 托管 API:如何设置电子邮件发件人?
【发布时间】:2012-02-13 20:49:39
【问题描述】:

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

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

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

如何为其他用户发送邮件? :)

【问题讨论】:

    标签: c# ews-managed-api


    【解决方案1】:

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

    模拟是使用 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");
    

    如果未启用模拟,您必须提供您要代表的用户的凭据。见this MSDN article

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

    您也可以简单地指定reply-to address

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

    但是,“发送为”权限确实适用于使用 System.Net.Mail 发送邮件时,在许多情况下,这在仅发送电子邮件时就可以了。有tons of examples说明how to do this

    // 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);
    

    【讨论】:

    • mail.ReplyTo 将不起作用,对此没有设置器。 public EmailAddressCollection ReplyTo { get; }
    • 对,它是一个集合。所以你需要做mail.ReplyTo.Add("user@email.com") - 我会修复上面的例子。
    • 使用模拟我在 mail.send 上收到错误。 - 引用邮箱时必须指定主 SMTP 地址
    • @markthewizard1234 在 Google 上快速搜索,我发现了这个:social.msdn.microsoft.com/Forums/exchange/en-US/… - 如错误所示,在指定要访问的邮箱时,您必须使用主 SMTP 地址,而不是代理/辅助地址或别名。
    【解决方案2】:

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

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

    【讨论】:

    • 不,这似乎不起作用。我已经尝试设置发件人、发件人名称和发件人地址,即使它们已设置,电子邮件仍来自您的服务设置中指定的帐户。
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多