【问题标题】:Customise email based on recipient根据收件人自定义电子邮件
【发布时间】:2016-05-19 18:45:45
【问题描述】:

使用 C#,我正在向拥有 Outlook 的人员列表发送电子邮件。在该电子邮件中有一个共享日历的链接。链接如下所示:

<a href=\"outlook://Public Folders - joe.blogs@company.com/All Public Folders/Offices/MeetingRoomA">MeetingRoomA</a>

注意到收件人的电子邮件地址是链接的一部分吗?这是因为从 Outlook 2010 开始,Microsoft 已强制要求共享日历的链接必须指定用户的电子邮件地址。文章here

因此,如果我想将电子邮件发送给 10 个人,我目前正在使用以下代码创建 10 封电子邮件,并为每封电子邮件提供一个唯一链接:

"<a href=\"outlook://Public Folders - " + user.Address + "/All Public Folders/Offices/MeetingRoomA\">MeetingRoomA</a>"

这很好,但如果我能发送一封电子邮件就更好了(这样收件人就可以看到还有谁收到了这封电子邮件)

有没有办法发送一封电子邮件,并在用户端自定义链接?

【问题讨论】:

    标签: c# email outlook calendar mailmessage


    【解决方案1】:

    不,不使用 Outlook 对象模型、MAPI 或 OUTlook 公开的任何其他 API。

    如果您使用直接 SMTP,您可以这样做 - 实际收件人是使用“RCPT TO”命令指定的,而不是由 To/CC MIME 标头消息(由 DATA 命令发送)。

    【讨论】:

    • 谢谢 Dmitry,你知道如何在 .net 中设置 'To' MIME 标头吗?我在这里问过这个问题:stackoverflow.com/questions/35321083/…
    • 我不认为 MailKit.Net.Smtp.SmtpClient 允许您指定“RCPT TO”命令 - 它从 MIME 消息中获取值。但由于源代码是可用的,你可以修改它以使用任何你想要的。
    • 您好 Dmitry,看起来无需修改源代码即可。我已经添加了一个链接,指向您对文章的回答,说明如何。再次感谢您的帮助
    • 我没有看到链接。您可以将其添加到评论中吗?
    • 它正在等待同行评审。该链接是第一条评论中的链接
    【解决方案2】:

    继续为每个用户创建自定义电子邮件。然后在 MIME 标题中,列出它所访问的所有人员。这意味着每个用户都会收到他们的个性化电子邮件,并且能够看到还有谁收到了这封电子邮件。

    要为 SMTP 和 MIME 地址指定不同的值,您需要一个支持它的 smtp 库。 MailKit 就是一个这样的库,下面是一个如何使用它的示例:

    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("MeetingOfficeA", "noreply@office.com"));
    
    //the following people will be in the "sent to" list, but won't receive the email
    message.To.Add(new MailboxAddress("Fidel Perez-Smith", "fidel@office.com"));
    message.To.Add(new MailboxAddress("John Doe", "john.doe@office.com");
    
    message.Subject = "Testing";
    message.Body = new TextPart("plain") { Text = @"Testing 123" };
    
    using (var client = new SmtpClient()) {
        client.Connect("smtpserver.office.com");
    
        //only the people in the following line will receive the email
        client.Send(message, new MailboxAddress("MeetingOfficeA", "noreply@office.com"), new [] { new MailboxAddress("Fidel Perez-Smith", "fidel@office.com") });
    
        client.Disconnect(true);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2020-03-30
      • 2014-06-23
      • 2018-02-25
      • 2022-12-07
      • 2020-01-11
      • 2022-01-14
      相关资源
      最近更新 更多