背景:本着全心全意为人民服务的理念,成绩系统上次验收提出来新的想法:教师留的作业学生没有及时上交,需要老师进行提醒。那么问题来了:提醒的方式有很多种,邮件,短信等等,权限系统验收的时候使用了邮箱,经过交流后才知道,用邮箱的好处是,邮箱的接口是免费的,而且比较稳定,短信的接口需要花钱,不同的运行商不同的接口,比较麻烦。权衡两者,先决定使用邮箱,后期有需要再使用短信。
一、问题出世
验收完成后,找到权限系统注册这块儿的负责人进行交流,丽敏告诉我方法,接下来就是我自己的实践,代码很简单,经过我的一番修修改改,终于能算得上是一个功能了。
DatagridOperate.js
//邮件发送功能-何丽杰-2016-02-04
$("#remind").unbind("click").click(function loginQQ() {
//var userID = document.getElementById("youxiang").innerHTML;
//发送邮件给邮箱,用于激活邮箱
$.ajax({
type: "post",
url: "/TeaQueryHomework/SendTEmail",
success: function () {
window.alert('邮件发送成功!');
}
});
});
TeaQueryHomeworkController.cs
using System.Net.Mail;//包含用于将电子邮件发送到简单邮件传输协议 (SMTP) 服务器进行传送的类。
#region sendTheMail 实现邮件发送的一个过程 何丽杰 2016-02-04
/// <summary>
/// 实现邮件发送的一个过程
/// </summary>
/// <param name="smtpserver">邮件服务器smtp.163.com表示网易邮箱服务器</param>
/// <param name="smptport">端口号(通常网易和qq为25)</param>
/// <param name="userName">发送端账号</param>
/// <param name="pwd">发送端密码</param>
/// <param name="strfrom">发送端账号</param>
/// <param name="strto">注册的邮箱号</param>
/// <param name="subj">邮箱的主题</param>
/// <param name="bodys">发送的邮件正文</param>
/// <returns></returns>
protected bool sendTheMail(string smtpserver, string smptport, string userName, string pwd, string strfrom, string strto, string subj, string bodys)
{
SmtpClient _smtpClient = new SmtpClient();
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
_smtpClient.Host = smtpserver;//指定SMTP服务器
_smtpClient.UseDefaultCredentials = true; //获取或设置 Boolean 值,该值控制 DefaultCredentials 是否随请求一起发送。(放在下面的那一句之前)
_smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd);//用户名和密码
MailMessage _mailMessage = new MailMessage(strfrom, strto);
_mailMessage.Subject = subj;//主题
_mailMessage.Body = bodys;//内容
_mailMessage.BodyEncoding = System.Text.Encoding.Default;//正文编码
_mailMessage.IsBodyHtml = true;//设置为HTML格式
_mailMessage.Priority = MailPriority.High;//优先级
try
{
_smtpClient.Send(_mailMessage);
return true;
}
catch (Exception e)
{
throw e;
}
}
#endregion
#region SendTEmail 默认设置发送邮件的初始值 何丽杰 2016-02-04
/// <summary>
/// 默认设置发送邮件的初始值
/// </summary>
/// <returns></returns>
public ActionResult SendTEmail()
{
string smtpServer = "smtp.163.com"; // 邮件服务器smtp.163.com表示网易邮箱服务器
string smptport = "25"; //端口号(通常网易和qq为25)
string userName = "helijie92902@163.com"; // 发送端账号
string pwd = "666666"; // 发送端密码(这个客户端重置后的密码)
string strFrom = "helijie92902@163.com"; // 发送端账号
string strto = "helijie92902@163.com"; // 注册的邮箱号
string subj = "交作业提醒"; //邮箱的主题
string bodys = "2016年2月6日之前必须交作业!";//发送的邮件正文
bool bl = sendTheMail(smtpServer, smptport, userName, pwd, strFrom, strto, subj, bodys);
if (bl == true)
{
return Content("ok");
}
else
{
return Content("no");
}
}
#endregion
然后调试,结果出错了:
二、继续实践
找来丽敏,丽敏换成她的邮箱,结果就发送成功了。原来是我邮箱的问题。于是乎,各种上网查,好多答案都是邮箱的设置问题,还有就是加上一句代码:_smtpClient.UseDefaultCredentials = true;
三、问题再次出现
结果又出来一个错误:
和之前的那个长得差不多,其实,就是邮箱的设置问题,但是当时就是不知道在哪里。
四、Foxmail未解之谜
找来李平和丽男的邮箱进行测试,结果人家的邮箱就是能发送成功。重新想想问题的所在,人家使用的邮箱客户端是Foxmail,而我的是网易闪电邮。感觉问题可能出在使用的邮箱上,于是在邮箱上下功夫。在一年前,因为自己的电脑上的Foxmail总是验证不成功,所以使用网易闪电邮也是被逼无奈,当时Foxmail问题就是个未解之谜,出现下面的问题,尝试了很多方法,都不成功~~~
一年过去了,现在又遇到了这个问题,还是不知道该怎么办,无意中打开“客户端授权密码”,发现远离自己一直以来都开启着这个小功能,害了我一年之久,心塞~~~当时设置的密码已经忘记了,重置授权密码。
然后,在Foxmail密码空格中填写刚刚重置的密码,继续验证,成功啦,当时手欠,害了自己一年之久,现在解决了,还是感觉很开心。
然后在代码中填写自己的客户端密码,再次发送邮件,发送成功,好兴奋呀~~~~
友情提醒:
上面的“客户端授权密码”可以选择“关闭”,这样的话,代码中就填写你的邮箱密码。
“客户端授权密码”为每个客户端添加专属的加密授权密码,避免密码泄漏造成邮箱安全隐患。使用授权密码替代密码在客户端登录邮箱,加密验证更安全。如果你开启了这个小功能,那么就在代码中就填写你设置的客户端授权密码。
五、心得体会
1、有时候自己的一不小心,能让自己困惑很长时间,但是不要灰心,以后还会遇到的。因为你自己手欠导致的错误,一定会让你亲手补上。
2、还是那句话“办法总比困难多”,自己多动动小手查查,总会有收获的。
3、未来的软件越来越人性化,越来越开源。想像一下,人人都能使用“东拼西凑”的方法,自己亲手组装出一个功能齐全而且强大的软件,那该是多么开心的一件事呀。