在讲具体的过程之前,我们要先熟悉一个东西,叫做SMTP。
相信很多人可能在邮箱里看到过SMTP这个字眼,但究竟是什么呢,又有什么作用呢?
我简单介绍一下:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
首先,你要知道得,你申请邮箱之后用邮箱来收发电子邮件,电子邮件并不是存在你本地的电脑上的,而是存在邮箱服务供应商的数据中心里,你的邮箱账号和密码就是用来登陆邮箱服务供应商的邮箱服务器的而在这些服务器集群里,会跑着 IMAP 服务器和 SMTP 服务器用户接收邮件时,可以通过 Web 界面来登录邮箱并阅读邮件,也可以通过第三方邮件客户端,包括但不限于 Outlook,Foxmail,Mutt等来收取,而第三方客户端与邮件服务器通信时遵守的协议就是 IMAP。通过 IMAP 协议,第三方客户端可以下载邮件头或者邮件全文到本地,不管是用户向邮件服务器发送邮件信息,还是邮件服务器向另一台邮件服务器发送邮件信息,都需要走 SMTP 协议
比如使用 网易邮箱 的用户 Aq 要给使用 QQ 邮箱 的用户 Bq 发送一封电子邮件,那么流程如下:首先 Aq 与 网易邮箱 的 SMTP 服务器通信,将邮件标题、内容、收件人邮件地址等信息发送至 网易邮箱 的 SMTP 服务器然后,网易邮箱 的 SMTP 将该封邮件投递至 QQ 邮箱的 SMTP 服务器随后 Bq 收到 QQ 邮箱的提醒,通过 IMAP 协议收取该封邮件
简而言之就是想要发送邮件给别人,就想要获取SMTP服务器,那么用C#发送邮件怎么办呢?大部分的邮箱服务供应商会提供SMTP第三方授权,我们获取到自己邮箱的SMTP授权码就能用它发送邮件了!
下面以QQ邮箱为例,获取SMTP
1、打开设置
2、选择账户
3、开启POP3/SMTP服务
4、此时会跳出一个弹窗,需要手机发送验证信息到指定的号码,发送之后点击我已发送就能获取到你的邮箱的SMTP授权码啦。简单吧!
下面贴上代码(以下程序是基于MVC项目的):
System.Web.Mail // 命名空间:
static string InputVerificationCode="";
[HttpPost]
public JsonResult VerificationCode(Model.UserInfoRegister Uifr)
{
InputVerificationCode = "";//初始化接收验证码的变量为空
try
{
//collection["Email"]
string Email = Request["UserEmail"];
Random Rdm = new Random(); //产生0到10的随机数
for (int i = 0; i < 6; i++)//六位数验证码
{
InputVerificationCode += Rdm.Next(10).ToString();
}
//SmtpServer: 发送电邮所使用的 SMTP 服务器的名称。
//SmtpPort: 发送 SMTP transactions(电邮) 所用的服务器端口。
//EnableSsl: True,如果服务器应该使用 SSL(Secure Socket Layer) 加密。
//UserName: 发送电邮所用的 SMTP email 账户的名称。
//Password: SMTP 电邮账户的密码。
//From: 出现在 from 栏中的电邮地址(通常与 UserName 相同)。
WebMail.SmtpServer = "smtp.qq.com";//发送方邮件服务器
WebMail.SmtpPort = 587; // 端口
WebMail.EnableSsl = true;
WebMail.UserName = "邮箱用户名不要后缀(如:liu@qq.com,这里只要liu即可)";
WebMail.Password = "这里是邮箱授权码";// -邮箱授权码 需要获取SMTP
WebMail.From = "这里是发送方的邮箱 (如:123@qq.com)"; // 发送方邮箱
WebMail.Send(Email, "邮件标题", "邮件内容" + "验证码为:" + InputVerificationCode.ToString());
ViewBag.SendSuccess = "发送成功";
return Json(InputVerificationCode);
}
catch (Exception e)
{
string Err = e.Message;
return Json(InputVerificationCode);
}
}