我正在尝试找到一种可靠的方法,以便能够从WPF应用程序使用系统默认的外部邮件客户端发送电子邮件。
我知道类似的问题已经发布在stackoverflow(Open default mail client along with a attachment)上,但是它们已经过时了,我找不到足够强大的解决方案。
我的要求:
到目前为止我发现的东西:
到目前为止,MAPI似乎是最好的选择,但老实说,我不喜欢其中任何一个,但找不到更好的选择。
答案 0 :(得分:0)
您可以简单地使用Mailkit
用法非常简单,我可以举一个例子说明如何在我的爱好项目中使用它。
我没有使用附件,但是使用Mailkit可以很容易地做到这一点。 您可以检查他们的FAQ
但是无论如何,我将在这里发布我的使用方式。
1)首先创建消息类,它将负责处理与您要发送电子邮件的人有关的主题,内容和邮件信息。 使用简单的构造函数,您将把种子放入属性。
using System;
using MimeKit;
namespace SomeNamespace
{
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<string> to, string subject, string content)
{
To = new List<MailboxAddress>();
To.AddRange(to.Select(x => new MailboxAddress(x)));
Subject = subject;
Content = content;
}
}
}
2)您还将需要SMTP配置类,其中将包含有关您的电子邮件的信息。 (您将从其发送邮件的地方)
using System;
namespace SomeNamespace
{
public class EmailConfiguration
{
public string SMTPFrom { get; set; }
public string SMTPHost { get; set; }
public int SMTPPort { get; set; }
public string SMTPLogin { get; set; }
public string SMTPPassword { get; set; }
}
}
3)然后,您将创建简单的界面
public interface IEmailSender
{
void SendEmail(Message message);
}
4)然后,您将创建服务的实现。
using System;
using MailKit.Net.Smtp;
using MimeKit;
using SomeNamespace.Configuration;
using SomeNamespace.Services.Interfaces;
namespace SomeNamespace
{
public class EmailSender : IEmailSender
{
private readonly EmailConfiguration _emailConfig;
public EmailSender(EmailConfiguration emailConfig)
{
_emailConfig = emailConfig;
}
public void SendEmail(Message message)
{
var emailMessage = CreateEmailMessage(message);
Send(emailMessage);
}
private MimeMessage CreateEmailMessage(Message message)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress(_emailConfig.SMTPFrom));
emailMessage.To.AddRange(message.To);
emailMessage.Subject = message.Subject;
emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text) { Text = message.Content };
return emailMessage;
}
private void Send(MimeMessage mailMessage)
{
using (var client = new SmtpClient())
{
try
{
client.Connect(_emailConfig.SMTPHost, _emailConfig.SMTPPort, true);
client.AuthenticationMechanisms.Remove("XOAUTH2");
client.Authenticate(_emailConfig.SMTPLogin, _emailConfig.SMTPPassword);
client.Send(mailMessage);
}
catch(Exception message)
{
Console.WriteLine(message);
throw;
}
finally
{
client.Disconnect(true);
client.Dispose();
}
}
}
}
}
最后一步是创建您的消息和 EmailConfiguration 模型。 创建 EmailSender 的实例并发送电子邮件。
var message = new Message("whotosend@gmail.com", "Some example Subject", "Some example content");
var emailConfiguration = new EmailConfiguration()
{
SMTPFrom = "yourSmtpAdress",
SMTPHost = "yourSmtpHost",
SMTPLogin = "yourSmtpLogin",
SMTPPassword = "yourSmtpPassword",
SMTPPort = 465
};
var _emailSender = new EmailSender(emailConfiguration);
_emailSender.SendEmail(message);
当然,您可以使用DI创建服务实例,但这取决于您。
待在家里,保持安全,祝您编码愉快。