根据收件人

时间:2016-02-09 17:04:20

标签: c# email outlook calendar mailmessage

使用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>"

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

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

2 个答案:

答案 0 :(得分:2)

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

如果您使用直接SMTP, 可以 执行此操作 - 使用&#34; RCPT TO&#34;指定实际收件人。命令,而不是消息的To / CC MIME标头(由DATA命令发送)。

答案 1 :(得分:1)

继续为每个用户创建自定义电子邮件。然后在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);
}