博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)
阅读量:5830 次
发布时间:2019-06-18

本文共 10949 字,大约阅读时间需要 36 分钟。

平台之大势何人能挡? 带着你的Net飞奔吧!

 

邮箱系列:

 

1.QQ邮箱:

他生成的是:

后来我把后面加密字符串换成明文的邮箱==》发现一样用 :

代码案例:

    
官方生成代码:(其实就是把你的邮件加了下密)
逆天通用土方法:(邮件可以任意替换)
邮我

效果:

订阅系列可以参考:

——————————————————————————————————————————————————————————————————————————————————————————————

邮件发送的前提设置:

QQ邮箱设置

授权码生成:

 

2.邮件案例:

简单熟悉邮件系列:

代码示例:

#region 附件路径        ///         /// 附件路径        ///         public static List
filePathList = new List
(); #endregion #region 文件上传 ///
/// LoTUploader-文件上传 /// ///
public JsonResult FileUpload(System.Web.HttpPostedFileBase file) { if (file == null) { return Json(new { status = false, msg = "文件提交失败" }); } if (file.ContentLength > 10485760) { return Json(new { status = false, msg = "文件10M以内" }); } string filterStr = ".gif,.jpg,.jpeg,.bmp,.png|.rar,.7z,.zip"; string fileExt = Path.GetExtension(file.FileName).ToLower(); if (!filterStr.Contains(fileExt)) { return Json(new { status = false, msg = "请上传图片或压缩包" }); } //防止黑客恶意绕过,判断下文件头文件 if (!file.InputStream.CheckingExt("7173", "255216", "6677", "13780", "8297", "55122", "8075")) { //todo:一次危险记录 return Json(new { status = false, msg = "请上传图片或压缩包" }); } //todo: md5判断一下文件是否已经上传过,如果已经上传直接返回 return Json(new { status = true, msg = sqlPath }); string path = string.Format("{0}/{1}", "/lotFiles", DateTime.Now.ToString("yyyy-MM-dd")); string fileName = string.Format("{0}{1}", Guid.NewGuid().ToString("N"), fileExt); string sqlPath = string.Format("{0}/{1}", path, fileName); string dirPath = Request.MapPath(path); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } try { file.SaveAs(Path.Combine(dirPath, fileName)); file.InputStream.Dispose(); filePathList.Add(Path.Combine(dirPath, fileName)); } catch { return Json(new { status = false, msg = "文件保存失败" }); } return Json(new { status = true, msg = sqlPath }); } #endregion #region 发邮件 ///
/// 发邮件 /// ///
///
public async Task
SendMsg(MailModel model) { var obj = new AjaxOption
(); #region 校验系列 if (model == null) { obj.Msg = "内容不能为空"; } if (string.IsNullOrWhiteSpace(model.MailSubject)) { obj.Msg = "邮件主题不能为空"; } if (string.IsNullOrWhiteSpace(model.MailContent)) { obj.Msg = "邮件内容不能为空"; } #region 收件人邮箱 if (model.MailToList != null) { foreach (var item in model.MailToList) { if (!item.IsEmail()) { model.MailToList.Remove(item); } } } else { obj.Msg = "收件人邮箱不能为空"; } //这个一定要加 if (model.MailToList.Count == 0) { obj.Msg = "收件人邮箱不能为空"; } #endregion if (model.MailCCList.ExistsData()) { foreach (var item in model.MailCCList) { if (!item.IsEmail()) { model.MailCCList.Remove(item); } } } #endregion //内容解码 model.MailContent = System.Web.HttpUtility.UrlDecode(model.MailContent); //添加附件 if (filePathList.ExistsData()) { model.AttachmentList=filePathList; } if (obj.Msg.IsNullOrWhiteSpace()) obj.Status = await EmailHelper.SendAsync(model); return Json(obj); } #endregion

3.项目应用:

其实项目里面基本上是不用他附件功能的,比如你注册的时候发一个邮件给你来激活,你敏感操作的时候给你一个提示(比如异地登陆或者修改密码)

简单封装了一个api,一般每个项目里面都有这个发邮件的功能,很多公司把这些诸如上传,发邮件,短信通知的功能都封装成api,用的时候调用一下就可以了

效果图就不贴了,和上面差不多,就是没上传附件了

#region 发邮件        ///         /// 发邮件        ///         ///         /// 
[CrossSite] public async Task
Post([FromUri]MailModel model) { var obj = new AjaxOption
(); #region 校验系列 if (model == null) { obj.Msg = "内容不能为空"; } if (string.IsNullOrWhiteSpace(model.MailSubject)) { obj.Msg = "邮件主题不能为空"; } if (string.IsNullOrWhiteSpace(model.MailContent)) { obj.Msg = "邮件内容不能为空"; } #region 收件人邮箱 if (model.MailToList != null) { foreach (var item in model.MailToList) { if (!item.IsEmail()) { model.MailToList.Remove(item); } } } else { obj.Msg = "收件人邮箱不能为空"; } //这个一定要加 if (model.MailToList.Count == 0) { obj.Msg = "收件人邮箱不能为空"; } #endregion if (model.MailCCList.ExistsData()) { foreach (var item in model.MailCCList) { if (!item.IsEmail()) { model.MailCCList.Remove(item); } } } #endregion //内容解码 model.MailContent = System.Web.HttpUtility.UrlDecode(model.MailContent); if (obj.Msg.IsNullOrWhiteSpace()) obj.Status = await EmailHelper.SendAsync(model); return obj.ObjectToJson(); } #endregion
    
邮件系列

 

EmailHelper:

using System.Net.Mail;using System.Configuration;using System.Threading.Tasks;using System.Collections.Generic;#region MailModel/// /// MailModel/// public class MailModel{    ///     /// 邮箱主题    ///     public string MailSubject { get; set; }    ///     /// 邮箱内容    ///     public string MailContent { get; set; }    ///     /// 收件人邮箱    ///     public List
MailToList { get; set; } ///
/// 抄送人邮箱 /// public List
MailCCList { get; set; } ///
/// 附件路径 /// public List
AttachmentList { get; set; }}#endregionpublic class EmailHelper{ private static string mailFrom = ConfigurationManager.AppSettings["EmailForm"]; //登陆用户名 private static string mailPass = ConfigurationManager.AppSettings["EmailPass"]; //登陆密码 private static string mailSmtp = ConfigurationManager.AppSettings["EmailSmtp"]; //SMTP服务器 #region 发送邮件 ///
/// 发送邮件 /// ///
邮箱主题 ///
邮箱内容 ///
收件人邮箱 ///
抄送人邮箱 ///
附件路径 ///
返回发送邮箱的结果
public static async Task
SendAsync(MailModel model) { #region 基本校验(一般都是调用前就验证了) //if (model == null || string.IsNullOrWhiteSpace(model.MailSubject) || string.IsNullOrWhiteSpace(model.MailContent) || model.MailTo == null) //{ // return false; //} #endregion //邮件服务设置 using (var smtpClient = new SmtpClient()) { smtpClient.Host = mailSmtp; //指定SMTP服务器 smtpClient.Credentials = new System.Net.NetworkCredential(mailFrom, mailPass); //用户名和密码 using (var mailMsg = new MailMessage()) { //发信人邮箱 mailMsg.From = new MailAddress(mailFrom); //收件人邮箱 foreach (var item in model.MailToList) { mailMsg.To.Add(item); } //抄送人邮箱 if (model.MailCCList != null && model.MailCCList.Count > 0) { foreach (var item in model.MailCCList) { mailMsg.CC.Add(item); } } //附件系列 if (model.AttachmentList != null) { foreach (var item in model.AttachmentList) { try { mailMsg.Attachments.Add(new Attachment(item)); } catch (System.Exception ex) { } } } mailMsg.Subject = model.MailSubject; //主题 mailMsg.Body = model.MailContent; //内容 mailMsg.BodyEncoding = System.Text.Encoding.UTF8; //编码 mailMsg.IsBodyHtml = true; //HTML格式 try { await smtpClient.SendMailAsync(mailMsg); //发送邮件 return true; } catch (System.Exception ex) { mailMsg.Dispose(); smtpClient.Dispose(); return false; } } } } #endregion}

如果没有账号,我提供几个测试账号:

mail.host = smtp.163.com

mail.username = php_tester@163.com
mail.password = php1234
mail.smtp.from = php_tester@163.com
mail.smtp.auth = true

——————————————————

mail.host=smtp.yeah.net

mail.port=25
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.username=techblog@yeah.net
mail.password=2436chao

——————————————————

mail.server.host=smtp.yeah.net

mail.server.post=25
mail.server.validate=true
mail.server.username=zmc330563778
mail.server.password=zmc586858
mail.server.fromaddress=zmc330563778@yeah.net

转载于:https://www.cnblogs.com/dunitian/p/5682930.html

你可能感兴趣的文章
OpenTest:教你在自动化脚本中增加选择文件的支持
查看>>
电子书下载:Programming Microsoft LINQ in Microsoft .NET Framework 4
查看>>
创建好SD卡的AVD ,那如何把文件导入SD 卡里面供模拟器使用
查看>>
Windows Azure Web Site (6) 使用FTP发布Azure Web Site
查看>>
Azure 认知服务 (2) 计算机视觉API - 分析图像
查看>>
POJ 3013 Big Christmas Tree (SPFA)
查看>>
mysql SQL_CALC_FOUND_ROWS
查看>>
grads 新老版本目录对比
查看>>
记忆C#1.1基础(2)
查看>>
JavaScript获取上传文件后缀名
查看>>
USB_skeleton分析
查看>>
在web.config和app.config文件中增加自定义配置节点
查看>>
有关MD5的一些代码,转自别人的程序,这里做个记号
查看>>
使用 UNION 运算符组合多个结果
查看>>
为什么IEnumerator接口没有继承IDisposable接口
查看>>
内存池
查看>>
Singleton模式(一) - 简单多线程计数器
查看>>
DATASNAP倒底能承受多大的负载能力
查看>>
[Windows Azure] How to use the Queue Storage Service
查看>>
超棒的响应式设计测试书签和工具(bookmarks)(转)
查看>>