根据收件人自定义电子邮件

Customise email based on recipient

我正在使用 C# 向拥有 Outlook 的人员列表发送电子邮件。在该电子邮件中,有一个共享日历的 link。 link 看起来像这样:

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

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

出于这个原因,如果我想将电子邮件发送给 10 个人,我目前正在使用以下代码创建 10 封电子邮件,为每封电子邮件提供唯一的 link:

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

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

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

不,不使用 Outlook Object 模型、MAPI 或 OUtlook 公开的任何其他 API。

可以 如果你使用直接 SMTP - 实际收件人是使用 "RCPT TO" 命令指定的,不是通过消息的 To/CC MIME headers(由 DATA 命令发送)。

继续为每位用户创建自定义电子邮件。然后在 MIME header 中,列出它发送给的所有人员。这意味着每个用户都将收到他们的个性化电子邮件,并且能够看到还有谁收到了该电子邮件。

要为 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);
}