C# 如何通过MimeKit发送电子邮件

C# 如何通过MimeKit发送电子邮件,c#,asp.net,smtp,C#,Asp.net,Smtp,我有一个服务,它在用户执行某个操作后发送用户信息。它通过rabbitmq工作。 首先,我将此服务作为一个web api(作为post方法使用),然后在触发action=>服务必须运行后将其移动到console=>上。但是,不幸的是,现在它不起作用了 public class MailService : IMailService { private readonly IOptions<MailSettings> _mailSettings; p

我有一个服务,它在用户执行某个操作后发送用户信息。它通过rabbitmq工作。 首先,我将此服务作为一个web api(作为post方法使用),然后在触发action=>服务必须运行后将其移动到console=>上。但是,不幸的是,现在它不起作用了

public class MailService : IMailService
    {
        private readonly IOptions<MailSettings> _mailSettings;

        public MailService(IOptions<MailSettings> mailSettings)
        {
            _mailSettings = mailSettings;
        }

        public async Task SendMessageAsync(Mail mail)
        {
            var email = new MimeMessage();
            email.Sender = MailboxAddress.Parse(_mailSettings.Value.Mail);
            email.To.Add(MailboxAddress.Parse(mail.Email));
            email.Subject = mail.Subject;

            var builder = new BodyBuilder();
            builder.HtmlBody = mail.Body;
            email.Body = builder.ToMessageBody();

            using var smtp = new SmtpClient();
            smtp.Connect(_mailSettings.Value.Host, _mailSettings.Value.Port, SecureSocketOptions.StartTls);
            smtp.Authenticate(_mailSettings.Value.Mail, _mailSettings.Value.Password);

            await smtp.SendAsync(email);
            smtp.Disconnect(true);
        }
    } 
公共类邮件服务:iMail服务
{
专用只读IOPS\u邮件设置;
公共邮件服务(IOptions邮件设置)
{
_mailSettings=邮件设置;
}
公共异步任务SendMessageAsync(邮件)
{
var email=new mimessage();
email.Sender=MailboxAddress.Parse(_mailSettings.Value.Mail);
email.To.Add(MailboxAddress.Parse(mail.email));
email.Subject=mail.Subject;
var builder=new BodyBuilder();
builder.HtmlBody=mail.Body;
email.Body=builder.ToMessageBody();
使用var smtp=new SmtpClient();
smtp.Connect(_mailSettings.Value.Host、_mailSettings.Value.Port、SecureSocketOptions.StartTls);
smtp.Authenticate(_-mailSettings.Value.Mail,_-mailSettings.Value.Password);
等待smtp.SendAsync(电子邮件);
smtp.Disconnect(true);
}
} 
在控制台(程序)中:

IOptions\u mailSettings=Options.Create(新建邮件设置
{
Mail=“asd。asd@gmail.com",
DisplayName=“asdasdasd”,
Password=“3frett2get44ewv”,
Host=“smtp.gmail.com”,
端口=587
});
MailService MailService=新的MailService(\u mailSettings);
mailService.SendMessageAsync(new Mail()).GetAwaiter();

Docs for表示,此方法用于编译器,而不是用于应用程序代码。-你为什么用这个?您希望它做什么?另外,SendMessageAsync正在尝试从传递的邮件对象设置值-但您似乎传递了一个空对象-
new Mail()
@stuartd忘了提到,在模型中,我已经硬编码并为道具提供了默认值。我正在使用GetWaiter()因为函数SendMessageAsync返回任务。如果我将asynt设置为static Main,它将不起作用:)或者仅在没有GetWaiter的情况下使用该方法返回的TaskWaiter支持产品基础结构,并且不打算直接从代码中使用。。为什么不直接使用?@stuartd,呜呜。谢谢。所以,在这里,很抱歉,我无法理解甚至不理解您的提示将要将GetWaiter更改为另一种方法。。。谢谢你!
    IOptions<MailSettings> _mailSettings = Options.Create(new MailSettings
    {
        Mail = "asd.asd@gmail.com",
        DisplayName = "asdasdasd",
        Password = "3frett2get44ewv",
        Host = "smtp.gmail.com",
        Port = 587
    });
    MailService mailService = new MailService(_mailSettings);

    mailService.SendMessageAsync(new Mail()).GetAwaiter();