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