使用邮箱找回密码(一)

您所在的位置:网站首页 原神怎么用邮箱找回账号密码 使用邮箱找回密码(一)

使用邮箱找回密码(一)

2024-01-27 11:09| 来源: 网络整理| 查看: 265

使用邮箱找回密码(上)邮箱的使用

前两天,我的上司(志哥)给我安排了一个工作。

小孙啊,能不能给做出一个利用邮箱找回密码的功能,可以仿照某易这种的, 不着急,你先整理一下思路,百度一下也行。

这… 简单。 作为一个盗版程序员,我最拿手的东西就是——百度。我深信着我大学时期那个曾经有过师徒之名的那个男人的一句名言

Copy,粘贴。Copy就完事了

不过,虽然是copy,但是做的话还是需要一点想法的,不能做一个没有感情的copy机器不是?所以得先简单的总结一下

怎么实现这个功能

这个问题倒是简单了,虽然我没写过这种找回密码的功能,但是我找回过密码啊!找回密码就是输入账号,输入自己的一些相关的信息,然后给邮箱发验证码,接到验证码之后输入,然后重置密码就行了。 嗯~~可以,简单,没问题。

邮箱

更开始工作,没写过邮箱啊?!这倒是目前来说我需要面对的最严重的问题了。嗯,这个。。。 百度! 大概看了一圈,应该就是这个了

using System.Net.Mail;

引用上再说,完美的开始。 嗯~~算了,后面还要用,另起一个类吧。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; /// ///Email的摘要说明 /// public class Email { public Email() { // //TODO: 在此处添加构造函数逻辑 // } }

看了一下,邮箱需要的使用到的属性还是不少的捏。

//发件人 public string mailFrom { get; set; } //收件人 public string mailToArray { get; set; } //抄送 public string[] CcArray { get; set; } //邮件主题 public string mailSubject { get; set; } //正文 public string mailBody { get; set; } //用户 public string mailUsername { get; set; } //密码 public string mailPwd { get; set; } //SMTP邮件服务器 public string host { get; set; } //SMTP邮件服务器端口 public int port { get; set; } //正文是否为html public Boolean isbodyHtml { get; set; } //是否含有附件 public Boolean HasAttachments; //附件 public List attachmentsPath { get; set; }

看着还是挺清晰的,不过好像有点东西不太清楚啊,这个SMTP邮件服务器干嘛的?嗯,百度。来自百度翻译 妈耶,简洁,深奥。仿佛能懂,又仿佛不太清楚的样子。-_-’'算球,后面再说了。先发出去再说吧。 这个Email类已经是有属性了,还差行为(主要就是为了行为),行为就是SendEmail呗。

public bool Send() { }

嗯,方法有了。初始化一下,总要有承载这些邮件属性的一个邮件吧。

//初始化mailmessage实例 MailMessage myMail = new MailMessage();

然后,看一下这个MailMessage,啥都不清楚就直接用肯定不能的 截图 东西不少,不过还行,反正看不懂。没事,不慌。上面不是给到了属性了吗,经验之谈,先看一下MailMessage注释

// 摘要: // 获取或设置此电子邮件的发信人地址。 // // 返回结果: // 包含发信人地址信息的 System.Net.Mail.MailAddress。 public MailAddress From { get; set; } // 摘要: // 获取包含此电子邮件的收件人的地址集合。 // // 返回结果: // 可写的 System.Net.Mail.MailAddressCollection 对象。 public MailAddressCollection To { get; }

这不就有了。一个收件人,一个发件人,完美。不过好像返回值的类型不太对啊,那就定义一个不就完事?

MailAddress maddr = new MailAddress(mailFrom);

这个好像是发件人的,不过收件人好像个集合类型的,Collection。嗯,邮件群发,思考不周了,但是找回密码好像还不需要群发,那就先这样。还是,先看一眼这个集合MailAddressCollection是个什么东西 MailAddressCollection 有一个Add()方法唉,参数是string,那不就可以直接.add()加进去了?

myMail.To.Add(mailToArray);

ok,发件人和收件人都搞定了,接下来就是其他的属性了。 抄送?算了,不要了,这个没啥用处,我就想简单的发个邮件而已啊。直接注释

//抄送 //public string[] CcArray { get; set; }

还有两个,主题和内容

myMail.Subject = mailSubject; myMail.Body = mailBody;

嗯,可以了。这个应该是中文汉字,最懵逼的一点终于还是来了,各种语言感觉对中文都不是很友好,所以也不能说人家外国友人觉得中文难学,毕竟机器理解起来也比较费劲,不过,该理解还是要理解的。(英语这么难,为了考试也得学啊!)

myMail.SubjectEncoding = Encoding.UTF8; myMail.BodyEncoding = Encoding.UTF8; //设置邮件的优先级 myMail.Priority = MailPriority.Normal; myMail.IsBodyHtml = isbodyHtml;

这个邮件的优先级呢,一共是三个级别Low,Height和Normal,Normal就是普通,一般都是普通吧,没有需求的话,Height级别的话会在邮件的前面显示一个红色的感叹号并且发件人下面会有邮件的等级这样的标记。(顺便问一下,图片的这种情况是因为我截图出现的问题吗?)

if (HasAttachments == true) { if (attachmentsPath != null && attachmentsPath.Count > 0) { Attachment attachFile = null; foreach (String path in attachmentsPath) { attachFile = new Attachment(path); myMail.Attachments.Add(attachFile); } } }

Whatever,这是附件,上面的群发邮件没做,那就在附件做一下呗。如果有附件呢,就来一个循环给Atachments添加一下就好了。嗯,清楚明白。 接下来就是懵逼的最后的懵逼了。

//初始化 System.Net.Mail.SmtpClient 类的新实例,让其使用指定的 SMTP 服务器和端口发送电子邮件。 SmtpClient smtp = new SmtpClient(host, port); //用指定的用户名和密码初始化 System.Net.NetworkCredential 类的新实例。 smtp.Credentials = new System.Net.NetworkCredential(mailUsername, mailPwd); smtp.Host = host; smtp.Send(myMail);

这个就涉及到一个SMTP邮件服务器的问题了,首先,肯定是先初始化了 Credentials 而这个smtp.Credentials呢,应该就是相当于smtp邮件服务器的准入证明了.。清晰,那后面的参数也就明确了。 smtp.send() 我去嘞,这个东西异常不少啊。来,用我N年不用的try{}catch{}裹上,热油…算了,减肥。

try { smtp.Send(myMail); return true; } catch (System.Net.Mail.SmtpException e) { return false; }

欧了,这不就是是一个崭新的Email类了嘛,保存个代码,以后忘了,找不到了还能回来找,嘿嘿。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; public class Email { //发件人 public string mailFrom { get; set; } //收件人 public string mailToArray { get; set; } //抄送 //public string[] CcArray { get; set; } //邮件主题 public string mailSubject { get; set; } //正文 public string mailBody { get; set; } //用户 public string mailUsername { get; set; } //密码 public string mailPwd { get; set; } //SMTP邮件服务器 public string host { get; set; } //SMTP邮件服务器端口 public int port { get; set; } //正文是否为html public Boolean isbodyHtml { get; set; } //是否含有附件 public Boolean HasAttachments; //附件 public List attachmentsPath { get; set; } public bool Send() { //初始化mailmessage实例 MailMessage myMail = new MailMessage(); //首先格式化邮件的格式 MailAddress maddr = new MailAddress(mailFrom); //向收件人地址添加邮件地址 if (mailToArray != null) { myMail.To.Add(mailToArray); } // myMail.From = maddr; myMail.Subject = mailSubject; myMail.Body = mailBody; myMail.SubjectEncoding = Encoding.UTF8; myMail.BodyEncoding = Encoding.UTF8; //设置邮件的优先级 myMail.Priority = MailPriority.Normal; myMail.IsBodyHtml = isbodyHtml; //在有附件的情况下添加附件 try { if (HasAttachments == true) { if (attachmentsPath != null && attachmentsPath.Count > 0) { Attachment attachFile = null; foreach (String path in attachmentsPath) { attachFile = new Attachment(path); myMail.Attachments.Add(attachFile); } } } } catch (Exception e) { throw new Exception("添加附件时出错" + e); } //初始化 System.Net.Mail.SmtpClient 类的新实例,让其使用指定的 SMTP 服务器和端口发送电子邮件。 SmtpClient smtp = new SmtpClient(host, port); //用指定的用户名和密码初始化 System.Net.NetworkCredential 类的新实例。 smtp.Credentials = new System.Net.NetworkCredential(mailUsername, mailPwd); smtp.Host = host; try { smtp.Send(myMail); return true; } catch (System.Net.Mail.SmtpException e) { return false; } } }

欧了,到底了,有没有解答一下的,评论区给个答案,如有问题,随时欢迎讨教,我会虚心接受批评(反正你们不知道=))



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3