为了满足项目需求,今日需要实现一个功能,就是自动发送邮件给某些用户,发送邮件的代码很简单,网上很容易找到,但就是看起来简单的东西可能也会遇到很多问题。
总结一下都有什么问题:
1)命令顺序不正确。服务器响应为:Error:need EHLO and AUTH first!
2)不允许使用邮箱名称。服务器相应为:Local user only,163 smtp1…
3)发送失败
4)SMTP服务器要求安全连接或客户端未通过身份验证。服务器响应为:Authentication required
基于以上问题,进行了各种尝试,还是得不到解决,于是猜想是不是SMTP服务器的问题,然后各种服务器换来试试都会报错。最后有的人说验证发件人邮箱时不要填密码,而是填写授权码,如下
client.Credentials = new NetworkCredential("123456@qq.com", "ahdIrjof");
果然,修改为授权码后发送邮件成功了。
qq邮件的授权码获取方式:
登录网页版QQ邮箱,点击上方设置,点击pop3点击开启,自行验证,并获取授权码,注意先记录下来。
贴代码:
//实例化一个发送邮件类。
MailMessage mailMessage = new MailMessage();
//发件人邮箱地址,方法重载不同,可以根据需求自行选择。
mailMessage.From = new MailAddress("123456@qq.com");
//收件人邮箱地址。
mailMessage.To.Add(new MailAddress("2022eml@163.com"));
//抄送人邮箱地址。
//message.CC.Add(sender);
//邮件标题。
mailMessage.Subject = "发送邮件测试";
//邮件内容。
mailMessage.Body = "这是发送的邮件测试!";
//是否支持内容为HTML。
//mailMessage.IsBodyHtml = true;
//实例化一个SmtpClient类。
SmtpClient client = new SmtpClient();
client.Port = 25;
//在这里使用的是qq邮箱,所以是smtp.qq.com,如果你使用的是126邮箱,那么就是smtp.126.com。
//client.Host = "smtp.163.com";
client.Host = "smtp.qq.com";
//使用安全加密连接(是否启用SSL)
client.EnableSsl = true;
//设置超时时间
client.Timeout = 10000;
//不和请求一块发送。
client.UseDefaultCredentials = false;
//验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
client.Credentials = new NetworkCredential("123456@qq.com", "asdgdrtyyr"); //client.Credentials = new NetworkCredential("liulijun3236@163.com", "ZAJDNCKWHUBHQIMY");//网易
try
{
//发送
client.Send(mailMessage);
//发送成功
MessageBox.Show("发送成功");
}
catch (Exception ex)//发送异常
{
//发送失败
MessageBox.Show(ex.Message);
}