MailKit-MimeKit - 如何复制到已发文件夹
MailKit-MimeKit - How to copy to Sent folder
我可以使用 MailKit 和 MimeKit 发送 SMTP 电子邮件,outlook 是接收这些邮件的客户端工具。以下代码已被使用,我的收件箱已收到电子邮件。
var email = new MimeMessage
{
Sender = MailboxAddress.Parse("<<from>>")
};
email.To.Add(MailboxAddress.Parse("<<to>>"));
email.Subject = "Test mail from Jaish";
var builder = new BodyBuilder();
builder.TextBody = "This is a test mail from Jaish Mathews";
email.Body = builder.ToMessageBody();
using var smtp = new SmtpClient();
smtp.LocalDomain = "<<domain>>";
smtp.Timeout = 10000;
smtp.Connect("<<host>>", 25, SecureSocketOptions.None);
var mailboxes = email.To.Mailboxes;
//Sending email
await smtp.SendAsync(email);
//Disconnecting from smtp
smtp.Disconnect(true);
问题是我的“已发送”文件夹没有跟踪这些已发送的电子邮件。如何手动复制到我的“已发送”文件夹
在我解释如何将消息保存在您的 Sent IMAP 文件夹中之前,我首先想提醒您注意几件事。
smtp.Timeout = 10000;
最好不要覆盖默认超时(我认为是 120,000。10000 是 10 秒)。
- 您当前混合调用了 SmtpClient 的同步和异步调用。您应该选择同步或异步并坚持使用它(至少如果它们都在同一个方法中)。
好的,现在开始你的问题。
using var imap = new ImapClient ();
await imap.ConnectAsync ("<<host>>", 143 /* or 993 for SSL */, SecureSocketOptions.Auto).ConfigureAwait (false);
await imap.AuthenticateAsync ("username", "password").ConfigureAwait (false);
IMailFolder sent = null;
if (imap.Capabilities.HasFlag (ImapCapabilities.SpecialUse))
sent = imap.GetFolder (SpecialFolder.Sent);
if (sent == null) {
// get the default personal namespace root folder
var personal = imap.GetFolder (imap.PersonalNamespaces[0]);
// This assumes the sent folder's name is "Sent", but use whatever the real name is
sent = await personal.GetSubfolderAsync ("Sent").ConfigureAwait (false);
}
await sent.AppendAsync (email, MessageFlags.Seen).ConfigureAwait (false);
await imap.DisconnectAsync (true).ConfigureAwait (false);
我可以使用 MailKit 和 MimeKit 发送 SMTP 电子邮件,outlook 是接收这些邮件的客户端工具。以下代码已被使用,我的收件箱已收到电子邮件。
var email = new MimeMessage
{
Sender = MailboxAddress.Parse("<<from>>")
};
email.To.Add(MailboxAddress.Parse("<<to>>"));
email.Subject = "Test mail from Jaish";
var builder = new BodyBuilder();
builder.TextBody = "This is a test mail from Jaish Mathews";
email.Body = builder.ToMessageBody();
using var smtp = new SmtpClient();
smtp.LocalDomain = "<<domain>>";
smtp.Timeout = 10000;
smtp.Connect("<<host>>", 25, SecureSocketOptions.None);
var mailboxes = email.To.Mailboxes;
//Sending email
await smtp.SendAsync(email);
//Disconnecting from smtp
smtp.Disconnect(true);
问题是我的“已发送”文件夹没有跟踪这些已发送的电子邮件。如何手动复制到我的“已发送”文件夹
在我解释如何将消息保存在您的 Sent IMAP 文件夹中之前,我首先想提醒您注意几件事。
smtp.Timeout = 10000;
最好不要覆盖默认超时(我认为是 120,000。10000 是 10 秒)。- 您当前混合调用了 SmtpClient 的同步和异步调用。您应该选择同步或异步并坚持使用它(至少如果它们都在同一个方法中)。
好的,现在开始你的问题。
using var imap = new ImapClient ();
await imap.ConnectAsync ("<<host>>", 143 /* or 993 for SSL */, SecureSocketOptions.Auto).ConfigureAwait (false);
await imap.AuthenticateAsync ("username", "password").ConfigureAwait (false);
IMailFolder sent = null;
if (imap.Capabilities.HasFlag (ImapCapabilities.SpecialUse))
sent = imap.GetFolder (SpecialFolder.Sent);
if (sent == null) {
// get the default personal namespace root folder
var personal = imap.GetFolder (imap.PersonalNamespaces[0]);
// This assumes the sent folder's name is "Sent", but use whatever the real name is
sent = await personal.GetSubfolderAsync ("Sent").ConfigureAwait (false);
}
await sent.AppendAsync (email, MessageFlags.Seen).ConfigureAwait (false);
await imap.DisconnectAsync (true).ConfigureAwait (false);