asp.net操作邮箱1.使用smtp发送邮件

时间:2021-08-24 15:13:06

使用c#操作邮箱

网上翻了一下资料,基本上用到了System.Net.Mail里的System.Web.Mail.SmtpClient和System.Web.Mail.MailMessage两个类

  1. System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();    
  2. msg.To.Add(a@a.com);    //to:收信地址
  3. /*   
  4. * msg.To.Add("b@b.com");   
  5. * msg.To.Add("b@b.com");   
  6. * msg.To.Add("b@b.com");可以发送给多人   
  7. */    
  8. msg.CC.Add(c@c.com);   //抄送地址
  9. /*   
  10. * msg.CC.Add("c@c.com");   
  11. * msg.CC.Add("c@c.com");可以抄送给多人   
  12. */    
  13. msg.From = new MailAddress("a@a.com", "AlphaWu", System.Text.Encoding.UTF8);    //写信人
  14. /* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/    
  15. msg.Subject = "这是测试邮件";//邮件标题    
  16. msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码    
  17. msg.Body = "邮件内容";//邮件内容    
  18. msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码    
  19. msg.IsBodyHtml = false;//是否是HTML邮件    
  20. msg.Priority = MailPriority.High;//邮件优先级    
  21. SmtpClient client = new SmtpClient();    
  22. client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");    
  23. //上述写你的GMail邮箱和密码    
  24. client.Port = 587;//Gmail使用的端口    
  25. client.Host = "smtp.gmail.com";    
  26. client.EnableSsl = true;//经过ssl加密    
  27. object userState = msg;    
  28. try    
  29. {    
  30. client.SendAsync(msg, userState);    
  31. //简单一点儿可以client.Send(msg);    
  32. MessageBox.Show("发送成功");    
  33. }    
  34. catch (System.Net.Mail.SmtpException ex)    
  35. {    
  36. MessageBox.Show(ex.Message, "发送邮件出错");    
  37. }    

使用不同邮箱只要把SmtpClient的几个参数(port:端口号,host:smtp地址,EnableSsl:是否使用ssl)以及Credentials :用户名及密码 修改一下即可。

 

不过以上方法在QQ邮箱上面会出现几个问题,现在我把自己碰到的问题写下来给各位参考一下:

1.没有开启qq的POP3/SMTP服务

  • 进入邮箱后点击顶部的设置按钮

  • 点击二级目录“账户” 拉到中下部 POP3/SMTP服务开启

    asp.net操作邮箱1.使用smtp发送邮件
  • QQ邮箱 POP3 和 SMTP 服务器地址设置如下:

    如果是设置POP3和SMTP的SSL加密方式,则端口如下:

    POP3服务器(端口995)

    SMTP服务器(端口465或587)。

    服务开启后会给我们一个授权码,登录验证时使用授权码替代密码

2. 命令顺序不正确。 服务器响应为:Error: need EHLO and AUTH first ! 

开启服务后我又碰到了上面这个验证失败的错误,我检查了半天发现自己smtp的端口号是默认的25,(在这里我翻了不少论坛,发现以前qq邮箱的端口号确实是25而且也没有ssl加密,不过后面升级后端口号改为了465)

3. 连接超时

密码用户名端口号都改正确后,在我以为大功告成的时候,报了连接超时的错。而且无论怎么调试都不成功,最后在一篇博客里翻到了下面这段内容:

 

System.Net.Mail支持Explicit SSL但是不支持Implicit SSL,然后查了下关于这两个模式的资料,我按照我理解的说一下: Explicit SSL 发起于未加密的25,然后进行一个starttl握手,最终切换到加密的连接。 Implicit SSL 直接从指定的端口发起starttl握手。 既然指定了端口,那么应该就是使用了Implicit SSL,不知道微软什么时候能更新下System.net.mail,System.net.mail能在邮件中嵌入图片的。 问题到了这里,那是不是就没有办法利用腾讯邮箱发邮件了呢?答案肯定是否定的,foxmail不久可以配置发送邮件吗?我们可以利用CDO.Message和System.web.mail发送邮件。

    465端口是SSL/TLS通讯协议的 内容一开始就被保护起来了 是看不到原文的。
    587端口是STARTTLS协议的 属于TLS通讯协议 只是他是在STARTTLS命令执行后才对之后的原文进行保护的。

解决办法:

1.使用CDO.Message

2.使用System.web.mail

3.依旧使用System.Net.mail,不过把端口号改为587;(System.Net.Mail好像不支持通过465端口)