|
目录
获取QQ邮箱授权码
打开QQ邮箱,进入 设置->账号 页面:
在 POP3/IMAP/SMTP 中开启 SMTP服务,然后点击 授权码复制授权码:
QQ邮箱服务器的参数如下,详细内容参考SMTP/IMAP服务:
- 接收邮件服务器: imap.qq.com,使用SSL,端口号993
- 发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
网易邮箱服务器的参数如下,详细内容参考网易邮箱服务器参数如何设置?:
安装 MailKit
在项目中安装 MailKit 库,可以通过NuGet包管理器安装它或者使用以下命令:- dotnet add package MailKit
复制代码 MailKit 是在 MimeKit 之上构建的跨平台邮件客户端库,目标是成为 .NET 的最佳电子邮件框架。
配置邮件服务器信息
配置邮件服务器信息,包括主机、端口、用户名、密码等,封装成 EmailData 类:- /// <summary>
- /// 邮件数据
- /// </summary>
- class EmailData
- {
- /// <summary>
- /// 发件人
- /// </summary>
- public string From { get; set; }
- /// <summary>
- /// 授权码
- /// </summary>
- public string Password { get; set; }
- /// <summary>
- /// 收件人
- /// </summary>
- public string To { get; set; }
- /// <summary>
- /// 主题
- /// </summary>
- public string Subject { get; set; }
- /// <summary>
- /// 纯文本内容
- /// </summary>
- public string TextBody { get; set; }
- /// <summary>
- /// HTML内容
- /// </summary>
- public string HtmlBody { get; set; }
- /// <summary>
- /// 发送邮件服务器
- /// </summary>
- public HostInfo SMTP { get; set; }
- /// <summary>
- /// 接受邮件服务器
- /// </summary>
- public HostInfo IMAP { get; set; }
- }
- /// <summary>
- /// 服务器信息
- /// </summary>
- class HostInfo
- {
- /// <summary>
- /// 服务器地址
- /// </summary>
- public string Host { get; set; }
- /// <summary>
- /// 服务器端口
- /// </summary>
- public int Port { get; set; }
- }
复制代码 实现邮件收发方法
邮件收发方法如下,这里只接收最新的10封邮件便于实现交互逻辑:- static async Task SendEmail(EmailData data)
- {
- try
- {
- // 创建一个新的 MIME 消息对象
- var message = new MimeMessage();
- // 设置发件人
- message.From.Add(MailboxAddress.Parse(data.From));
- // 设置收件人
- message.To.Add(MailboxAddress.Parse(data.To));
- // 设置主题
- message.Subject = data.Subject;
- // 设置正文
- message.Body = new BodyBuilder
- {
- TextBody = data.TextBody,
- HtmlBody = data.HtmlBody
- }.ToMessageBody();
- // 使用 SMTP 客户端发送邮件
- using (var client = new SmtpClient())
- {
- await client.ConnectAsync(data.SMTP.Host, data.SMTP.Port, SecureSocketOptions.StartTls);
- // 注:用户名和密码应妥善保管,不要硬编码到源码中
- await client.AuthenticateAsync(data.From, data.Password);
- // 发送邮件
- await client.SendAsync(message);
- // 断开与服务器的连接
- await client.DisconnectAsync(true);
- }
- Console.WriteLine("邮件已成功发送!");
- }
- catch (Exception ex)
- {
- Console.WriteLine($"邮件发送失败:{ex.Message}");
- }
- }
- static async Task GetEmail(EmailData data)
- {
- try
- {
- // 连接到 IMAP 服务器
- using (var client = new ImapClient())
- {
- await client.ConnectAsync(data.IMAP.Host, data.IMAP.Port, true); // 通常使用 TLS 加密
- // 认证用户
- await client.AuthenticateAsync(data.From, data.Password);
- // 选择收件箱
- var inbox = client.Inbox;
- await inbox.OpenAsync(FolderAccess.ReadOnly);
- // 获取邮件数量
- int totalMessages = inbox.Count;
- // 确保开始位置不会小于1
- int start = Math.Max(totalMessages - 5, 1);
- int end = totalMessages;
- // 获取最新的10封邮件的信息
- var messages = inbox.Fetch(start, end, MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId);
- // 遍历邮件信息并打印出来
- foreach (var summary in messages)
- {
- var uid = summary.UniqueId;
- var message = await inbox.GetMessageAsync(uid);
- Console.WriteLine($"Subject: {message.Subject}");
- Console.WriteLine($"From: {message.From}");
- Console.WriteLine($"To: {message.To}");
- Console.WriteLine($"Date: {message.Date}");
- Console.WriteLine($"HtmlBody: {message.HtmlBody}");
- Console.WriteLine($"TextBody: {message.TextBody}");
- }
- // 断开连接
- await client.DisconnectAsync(true);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"接收邮件失败:{ex.Message}");
- }
- }
复制代码 注意接受邮件时 message.Body 部分内容需要特殊的解析规则,比如附件部分、历史邮件部分。
测试邮件收发
使用时关键信息替换成自己的:- static async Task Main(string[] args)
- {
- var data = new EmailData
- {
- From = "qqqqqq@qq.com",
- Password = "**********",
- To = "qqqqqq@qq.com",
- Subject = "来自 .NET Core 的测试邮件",
- TextBody = "这是纯文本消息内容。",
- HtmlBody = "<h1>这是HTML消息</h1><p>这封邮件是通过MailKit从 .NET Core 发送的。</p>",
- SMTP = new HostInfo()
- {
- Host = "smtp.qq.com",
- Port = 587
- },
- IMAP = new HostInfo()
- {
- Host = "imap.qq.com",
- Port = 993
- }
- };
- await SendEmail(data);
- await GetEmail(data);
- }
复制代码 参考文章
来源:https://www.cnblogs.com/timefiles/p/18466070
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|