我正在使用 MailKit 库制作一个简单的 WPF 应用程序来发送自动电子邮件。 我雇用了使用 Cpanel 的托管服务来通过 Roundcube 创建电子邮件,我在其中使用信息进行连接、登录等。 当我手动登录 Roundcube 时,我注意到我发送的测试电子邮件不在已发送文件夹中。 我可以使用以下代码完美发送电子邮件:
public static async Task SendMail(BilletInfo info, string m)
{
try
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress(Server.Name, Server.Login));
message.To.Add(new MailboxAddress(info.ClientName, info.Mail));
message.Subject = MessageController.GetChargeTitle(info);
var bodyBuilder = new BodyBuilder();
bodyBuilder.TextBody = m;
bodyBuilder.Attachments.Add(info.AttachmentPath);
message.Body = bodyBuilder.ToMessageBody();
using(var client = new MailKit.Net.Smtp.SmtpClient())
{
client.Connect(Server.ServerName, Server.SMTPPort, SecureSocketOptions.Auto);
client.Authenticate(Server.Login, Server.Password);
await client.SendAsync(message);
client.Disconnect(true);
}
}
catch (Exception ex)
{
MessageBoxController.ShowError($ "{ex.Message}");
}
}
但是,它不会出现在Roundcube客户端中。 有没有什么方法可以将MailKit发送的消息以Roundcube客户端中出现的方式保存在服务器上?
您需要使用 ImapClient 将邮件保存到 IMAP“已发送”文件夹。
using (var client = new ImapClient()) {
client.Connect(host, port, SecureSocketOptions.Auto);
client.Authenticate(username, password);
// Hopefully your server supports the SPECIAL-USE or XLIST extensions
// to make getting the Sent folder easy.
IMailFolder sent = null;
if (client.Capabilities.HasFlag(ImapCapabilities.SpecialUse) ||
client.Capabilities.HasFlag(ImapCapabilities.XList)) {
sent = client.GetFolder(SpecialFolder.Sent);
}
if (sent == null) {
var personal = client.GetFolder(client.PersonalNamespaces[0]);
sent = personal.GetSubfolders().FirstOrDefault(subfolder => subfolder.Name.StartsWith("Sent"));
}
sent?.Append(message);
client.Disconnect(true);
}