Я использую библиотеку 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);
}