c#异步发送邮件的类


下面是一个使用C#编写的异步发送邮件的类的示例。这个类使用了`System.Net.Mail`和`System.Threading.Tasks`命名空间来实现异步发送邮件的功能。请注意,为了简化示例,我没有包含错误处理和配置SMTP服务器的详细步骤,这些在实际应用中都是必要的。


using System;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;

public class EmailSender
{
    private string _smtpHost;
    private int _smtpPort;
    private string _fromAddress;
    private string _username;
    private string _password;

    public EmailSender(string smtpHost, int smtpPort, string fromAddress, string username, string password)
    {
        _smtpHost = smtpHost;
        _smtpPort = smtpPort;
        _fromAddress = fromAddress;
        _username = username;
        _password = password;
    }

    /// <summary>
    /// 异步发送邮件
    /// </summary>
    /// <param name="toAddress">收件人地址</param>
    /// <param name="subject">邮件主题</param>
    /// <param name="body">邮件正文</param>
    /// <returns>Task 表示异步操作</returns>
    public async Task SendAsync(string toAddress, string subject, string body)
    {
        using (var client = new SmtpClient(_smtpHost, _smtpPort))
        {
            client.EnableSsl = true; // 如果SMTP服务器需要SSL连接,则设置为true
            client.Credentials = new NetworkCredential(_username, _password);

            var mail = new MailMessage
            {
                From = new MailAddress(_fromAddress),
                Subject = subject,
                Body = body,
                IsBodyHtml = true // 如果邮件正文是HTML,则设置为true
            };

            mail.To.Add(new MailAddress(toAddress));

            try
            {
                await client.SendMailAsync(mail);
            }
            catch (Exception ex)
            {
                // 在这里处理发送邮件时可能发生的异常
                // 例如,可以记录错误日志或抛出更具体的异常
                Console.WriteLine($"发送邮件失败: {ex.Message}");
            }
        }
    }
}

// 使用示例
// 假设你已经有了SMTP服务器的相关信息
// EmailSender sender = new EmailSender("smtp.example.com", 587, "your-email@example.com", "your-username", "your-password");
// await sender.SendAsync("recipient@example.com", "Hello!", "<h1>Hello, World!</h1>");

请注意,在实际应用中,你可能需要根据你的SMTP服务器要求来调整`EnableSsl`属性,并确保你的SMTP服务器地址、端口、发件人地址、用户名和密码等信息是正确的。此外,异常处理也是非常重要的,你需要根据实际需求来适当地处理发送邮件时可能发生的异常。

上述代码中的`SendAsync`方法是一个异步方法,它使用了`await`关键字来等待`SendMailAsync`方法的完成。这允许你的应用程序在等待邮件发送完成的同时,继续执行其他任务,从而提高应用程序的响应性和性能。