C#—发送QQ邮件

QQ邮箱实现发送验证码

1、开启POP3/SMTP服务

image-20221024143554837

按照提示开启服务,发送短信,然后生成授权码。

这里的授权码可以有多个,在生成的时候记得保存在本地,后面代码中会用到。

2、代码实现

完成邮件的发送,得使用两个微软封装的类:MailMessageSmtpClient

MailMessage用来封装邮件的内容,SmtpClient使用简单邮件传输协议 (SMTP) 来发送电子邮件

2.1 配置信息(发送邮件所需要的信息)
string mailFrom ="zhangsan@qq.com" ; //发件人
string mailTo ="lisi@qq.com";  //收件人
string Subject = "【注册验证码】"; //邮件主题
string Content = "您的注册验证码为:331154。30分钟内有效,请勿泄露给他人!"; //邮件内容
string Host = "smtp.qq.com"; //SMTP服务器 这里写的是QQ邮箱
string userPassword = "jqfifuhqsvombedd";  //授权码
2.2 通过MailMessage设置邮件内容

参考:MailMessage 类 (System.Net.Mail) | Microsoft Learn

//初始化发件人
MailAddress from =new MailAddress(mailFrom);
//初始化收件人
MailAddress to =new MailAddress(mailTo);

//设置邮箱内容
MailMessage mailMsg=new MailMessage(from ,to); //这里是调用了MailMessage类的重载构造函数
mailMsg.Body=Content; //邮件内容
mailMsg.BodyEncoding=Encoding.UTF8; //设置邮件内容编码
mailMsg.Subject =Subject; //邮件主题(标题)
mailMsg.SubjectEncoding = Encoding.UTF8; //设置标题编码
mailMsg.IsBodyHtml = true; //确定邮件是否支持HTML格式
2.3 配置SmtpClient发送邮件

参考:SmtpClient 类 (System.Net.Mail) | Microsoft Learn

参考:NetworkCredential 类 (System.Net) | Microsoft Learn

SmtpClient client =new SmtpClient(Host); //实例化Smtp对象,这里是它的第二重载构造
client.EnableSsl=true; //是否使用安全套接字层 (SSL) 加密连接。
client.UseDefaultCredentials=false ; //是否SmtpClient默认的凭证
//设置新的凭证 new NetworkCredential(发件人邮箱, 授权码);
client.Credentials=new NetworkCredential(mailFrom,userPassword);

然后就可以发送了,调用Send()方法:

client.Send(mailMsg);

3、总结

  • 在发送邮件之前需要开启pop/smtp服务以及获取授权码
  • 了解MailMessage和SmtpClient的使用

4、遇到的问题

Bad sequence of commands. The server response was: Error: need EHLO and AUTH
//命令顺序错误。服务器响应为:错误:需要EHLO和AUTH

我相信,大概很多人在编写这个功能的时候遇到的都是这个问题。刚好,我也遇到了。

解决方法:

  • 查看你配置的基本信息是否正确,如发件人,收件人的信息不正确。导致发送不了请求。
  • 授权码,一个发件人对应一个授权码,其中任意一个信息不存在都会导致请求错误。
  • 你的服务没有开启。之前我就因为发送邮件的时候安全性问题导致了QQ退出,然后登录后才发现自动关闭了POP3/SMTP服务
posted @ 2022-10-24 18:45  travellerα  阅读(248)  评论(0)    收藏  举报