Настройка электронной почты в зависимости от получателя

Используя C#, я отправляю электронное письмо списку людей, у которых есть Outlook. В этом письме есть ссылка на общий календарь. Ссылка выглядит так:

<a href=\"outlook://Public Folders - [email protected]/All Public Folders/Offices/MeetingRoomA">MeetingRoomA</a>

Заметили, что адрес электронной почты получателя является частью ссылки? Это связано с тем, что в Outlook 2010 Microsoft требует, чтобы ссылки на общие календари указывали адрес электронной почты пользователя. Статья здесь.

По этой причине, если я хочу отправить электронное письмо 10 людям, я в настоящее время создаю 10 электронных писем со следующим кодом, давая каждому уникальную ссылку:

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

Это работает хорошо, но было бы неплохо, если бы я мог отправить одно электронное письмо (чтобы получатели могли видеть, кто еще получил электронное письмо)

Есть ли способ отправить одно электронное письмо и настроить ссылку на стороне пользователя?


person Fidel    schedule 09.02.2016    source источник


Ответы (2)


Нет, не используя объектную модель Outlook, MAPI или любой другой API, предоставляемый OUTlook.

Вы можете сделать это, если используете прямой SMTP - фактические получатели указываются с помощью команды "RCPT TO", а не с помощью заголовков MIME To/CC сообщения ( отправлено командой DATA).

person Dmitry Streblechenko    schedule 09.02.2016
comment
Спасибо, Дмитрий, вы знаете, как установить MIME-заголовок «Кому» в .net? Я задал вопрос здесь: stackoverflow.com/questions/35321083/ - person Fidel; 10.02.2016
comment
Я не думаю, что MailKit.Net.Smtp.SmtpClient позволяет указать команду RCPT TO — она берет значения из сообщения MIME. Но поскольку исходный код доступен, вы можете изменить его, чтобы использовать все, что захотите. - person Dmitry Streblechenko; 10.02.2016
comment
Привет, Дмитрий, похоже, это возможно без изменения исходного кода. Я добавил ссылку на ваш ответ в статью, которая показывает, как это сделать. В очередной раз благодарим за помощь - person Fidel; 11.02.2016
comment
Я не вижу ссылку. Можете ли вы добавить его в комментарий? - person Dmitry Streblechenko; 11.02.2016
comment
Он ждет экспертной оценки. Ссылка та что в первом комментарии - person Fidel; 11.02.2016

Продолжайте создавать собственные электронные письма для каждого пользователя. Затем в заголовке MIME перечислите всех людей, которым оно было отправлено. Это означает, что каждый пользователь получит свое персонализированное электронное письмо и сможет увидеть, кто еще получил электронное письмо.

Чтобы указать разные значения для адресов SMTP и MIME, вам потребуется библиотека smtp, которая ее поддерживает. Одной из таких библиотек является MailKit, и вот пример ее использования:

var message = new MimeMessage();
message.From.Add(new MailboxAddress("MeetingOfficeA", "[email protected]"));

//the following people will be in the "sent to" list, but won't receive the email
message.To.Add(new MailboxAddress("Fidel Perez-Smith", "[email protected]"));
message.To.Add(new MailboxAddress("John Doe", "[email protected]");

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", "[email protected]"), new [] { new MailboxAddress("Fidel Perez-Smith", "[email protected]") });

    client.Disconnect(true);
}
person Fidel    schedule 11.02.2016