Пересылка электронной почты с помощью MailKit (C#)
Я пытаюсь получить доступ к учетной записи IMAP с помощью MailKit (создано сайт jstedfast)
мне удается загрузить сообщение (как MimeMessage), и в какой-то момент мне нужно "переслать" его в другую учетную запись.
Как это было бы лучше всего сделать, чтобы сохранить всю информацию исходного письма (адреса, заголовки, содержание тела и т. д.).
спасибо!
1 ответов
разные люди имеют в виду разные вещи, когда они говорят "вперед", поэтому я думаю, что я дам ответы на различные значения, которые я могу придумать.
1. Переслать (Отправить) сообщение без каких-либо изменений.
под "без изменений" я буквально не имею в виду никаких изменений в необработанных данных сообщений. Способ сделать это-сделать:
var message = FetchMessageFromImapServer ();
using (var client = new SmtpClient ()) {
client.Connect ("smtp.example.com", 465, true);
client.Authenticate ("username", "password");
var sender = new MailboxAddress ("My Name", "username@example.com");
var recipients = new [] { new MailboxAddress ("John Smith", "john@smith.com") };
// This version of the Send() method uses the supplied sender and
// recipients rather than getting them from the message's headers.
client.Send (message, sender, recipients);
client.Disconnect (true);
}
обычно люди не имеют в виду этот тип "пересылки", хотя. Если они хотят повторно отправить, обычно они будут использовать следующий метод повторной отправки.
2. Переслать (повторно отправить) сообщение стандартным способом.
var message = FetchMessageFromImapServer ();
// clear the Resent-* headers in case this message has already been Resent...
message.ResentSender = null;
message.ResentFrom.Clear ();
message.ResentReplyTo.Clear ();
message.ResentTo.Clear ();
message.ResentCc.Clear ();
message.ResentBcc.Clear ();
// now add our own Resent-* headers...
message.ResentFrom.Add (new MailboxAddress ("MyName", "username@example.com"));
message.ResentReplyTo.Add (new MailboxAddress ("MyName", "username@example.com"));
message.ResentTo.Add (new MailboxAddress ("John Smith", "john@smith.com"));
message.ResentMessageId = MimeUtils.GenerateMessageId ();
message.ResentDate = DateTimeOffset.Now;
using (var client = new SmtpClient ()) {
client.Connect ("smtp.example.com", 465, true);
client.Authenticate ("username", "password");
// The Send() method will use the Resent-From/To/Cc/Bcc headers if
// they are present.
client.Send (message);
client.Disconnect (true);
}
3. Переслать сообщение, прикрепив его (в целом) к новому сообщению, как это могут сделать некоторые почтовые клиенты.
var messageToForward = FetchMessageFromImapServer ();
// construct a new message
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("MyName", "username@example.com"));
message.ReplyTo.Add (new MailboxAddress ("MyName", "username@example.com"));
message.To.Add (new MailboxAddress ("John Smith", "john@smith.com"));
// now to create our body...
var builder = new BodyBuilder ();
builder.TextBody = "Hey John,\r\n\r\nHere's that message I was telling you about...\r\n";
builder.Attachments.Add (new MessagePart { Message = messageToForward });
message.Body = builder.ToMessageBody ();
using (var client = new SmtpClient ()) {
client.Connect ("smtp.example.com", 465, true);
client.Authenticate ("username", "password");
client.Send (message);
client.Disconnect (true);
}