Skip to main content
 首页 » 编程设计

c#之如何使用 SMTP 循环发送电子邮件

2024年04月30日47lexus

我有一个在线程内发送邮件的控制台应用程序。

在这个线程方法中,我有一个循环,可以将电子邮件发送给每个收件人。

我遇到了问题,因为我试图在之前的邮件有机会发送之前发送多封电子邮件。

我的代码:

            foreach(var m in mailModel.Recipients) 
            { 
                Mailmanager.SendMessageS(mailModel.DomainName, mailModel.Severity, DateTime.Now, m); 
            } 

发送方法:

public static async Task SendMessageS(string domainName, ErrorSeverity severity, DateTime errorTime, Recipient recipient) 
{ 
 
    try 
    { 
        string error = ""; 
 
        string fromEmail = "OwerWatch@mydomain.com"; 
        string toEmail = recipient.SendEmailTo; 
 
        MailMessage message = new MailMessage(fromEmail, toEmail); 
        Guid guid = Guid.NewGuid(); 
        SmtpClient smtpClient = new SmtpClient(server, port); 
 
        /*if (_useAuthentication)*/ 
        smtpClient.Credentials = new NetworkCredential("", ""); 
        smtpClient.EnableSsl = false; 
 
        //mail.Subject = subject; 
        //mail.Body = body; 
 
        message.Subject = "Problem ( " + severity + ") " + domainName; 
        message.Body = BuildMessage(error, recipient.RecipientName, domainName, errorTime, severity); 
 
        smtpClient.SendCompleted += SendCompletedCallback; 
 
        await smtpClient.SendMailAsync(fromEmail, toEmail, message.Subject, message.Body  /* user state, can be any object*/); 
 
    } 
    catch (Exception ex) 
    { 
        Console.WriteLine(ex.Message); 
    } 
} 

我收到这个警告:

because this call is not awaited execution of the current method continues before the call is completed. Consider applying the await opeartor to the result of the call

我理解警告,但我无法弄清楚如何完成此操作,因为我有一个遍历所有收件人的循环。

我怎样才能正确地做到这一点?

请您参考如下方法:

这是一个快速修复(在调用 Mailmanager.SendMessageS 时添加了 await 关键字),因为您的实用程序方法正在执行异步操作。

foreach(var m in mailModel.Recipients) 
{ 
    await Mailmanager.SendMessageS(mailModel.DomainName, mailModel.Severity, DateTime.Now, m); 
} 

可能有更好的方法将其作为一个整体过程来完成。