System.Net.Mail

使用简单邮件传输协议SMTP异步发送邮件

想要实现SMTP发送邮件,你需要了解这些类

SmtpClient :使用配置文件设置来初始化 SmtpClient类的新实例。

它包含以下属性:

Host:设置用于SMTP服务的主机名或主机IP;

Port:设置用于SMTP服务的端口(一般设置为25);

Credentials:身份验证;

Send:直接发送邮件;

SendAsync:异步发送邮件(不阻止调用线程)。

 

MailMessage:表示一封电子邮件。

它包含以下属性:

Attachment:表示文件附件;

CC:抄送;

Subject:主题;

From:发件人

Priority:优先级;

Body:正文;

BodyEncoding:Content-type。

此外  SmtpClient类不具有Finalize方法,因此应用程序必须调用Dispose以显式释放资源。

  1. static bool mailsend = true;
  2. public async Task Send(object sender, EventArgs e)
  3. {
  4.  
  5. SmtpClient smtp = new SmtpClient();//实例化一个SMPTClient对象
  6. smtp.EnableSsl = false;//不启用SSL加密
  7. smtp.Host = "00.000.00.000";//此处填写服务器IP
  8. smtp.Port = ;//端口固定为25
  9. //smtp.Credentials = new NetworkCredential("user@.com","password");//验证用户
  10. MailMessage msg = new MailMessage();//实例化一个Message对象
  11. msg.Priority = MailPriority.High;//邮件优先级
  12. msg.To.Add("user@foxmail.com");//收件人
  13. // msg.CC.Add("user@163.com");//抄送
  14. msg.Bcc.Add("user@qq.com");//密送
  15. string fileName = "";
  16. var na = Request.Files.AllKeys;//前端HTTP请求过来的文件
  17. foreach (var item in na)
  18. {
  19. HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase;
  20. fileName = Path.GetFullPath(file.FileName);
  21. }
  22. Attachment attach = new Attachment(fileName);//将文件路径付给Attachment的实例化对象
  23. ContentDisposition dispo = attach.ContentDisposition;//获取信息并读写附件
  24. dispo.CreationDate = System.IO.File.GetCreationTime(fileName);
  25. dispo.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
  26. dispo.ReadDate = System.IO.File.GetLastAccessTime(fileName);
  27. msg.Attachments.Add(attach);//将附件加入邮件中
  28. msg.From = new MailAddress("SpadesQ@sea.com", "是你呀");//发件人 别名
  29. msg.Subject = "我学习了,你呢?";
  30. msg.SubjectEncoding = System.Text.Encoding.UTF8;
  31. msg.Body = "等下一个她";
  32. msg.BodyEncoding = System.Text.Encoding.UTF8;
  33. smtp.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
  34. string userState = "Task one";
  35. smtp.SendAsync(msg, userState);//使用异步发送 ,否则线程阻塞
  36. if (mailsend==false) //可在回调时修改mailsend值进行取消
  37. {
  38. smtp.SendAsyncCancel();
  39. }
  40. Response.Write("已发出");
  41. }
  42.  
  43. void client_SendCompleted(object sender, AsyncCompletedEventArgs e)
  44. {
  45. string token =(string)e.UserState;
  46. if (e.Cancelled)
  47. {
  48. Response.Write(string.Format("{0} Send canceled.",token));
  49. }
  50. if (e.Error !=null)
  51. {
  52. Response.Write(string.Format("[{0}] {1}", token, e.Error.ToString()));
  53. }
  54. else
  55. {
  56. Response.Write("Message Send.");
  57. }
  58. mailsend = true;
  59. }

感谢您的观看,您的

使用System.Net.Mail中的SMTP发送邮件(带附件)的更多相关文章

  1. System.net.mail 腾讯ssl发送邮件超时

    我采用了.net 的自带组件 System.Web.Mail.MailMessage发送邮件,主要是在客户注册网站成功的时候发条欢迎邮件,最近邮件无法发送了,看了下腾讯smtp邮件配置,所有的邮件发送 ...

  2. Python中使用SMTP发送邮件以及POP收取邮件

    假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...

  3. Linux下配置mail使用外部SMTP发送邮件

    修改/etc/mail.rc,增加两行:指定外部的smtp服务器地址.帐号密码等. # vi /etc/mail.rc set from=demo@qq.com smtp=smtp.qq.com se ...

  4. python中的SMTP发送邮件

    一. 介绍 python3中自带了smtplib模块和email模块 smtplib模块:负责与邮件服务器的交互 email模块:负责组织邮件内容 二. smtplib模块 smtplib模块:主要是 ...

  5. 发现用System.Net.Mail发邮件(代码附后),附件稍微大一点就会造成程序假死. 有没有什么简单的解决办法呢? 多谢!!

    附件大,上传,发送一定会慢.程序卡,应该是主线程正在发送,邮件造成的.创建其他线程在后台去发.这样就不影响主线程做其他工作了   using System; using System.Collecti ...

  6. Java发送邮件(带附件)

    实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...

  7. smtp发送带附件的邮件(直接将string类型结果保存为附件)

    该方式直接保存为HTML文件,也可以是文本文件,其它格式效果不是很好    MailMessage mmsg = new MailMessage();    mmsg.Subject = " ...

  8. centos 使用mutt发送邮件带附件

    1.安装mutt工具 yum install -y mutt 2.使用mutt发邮件并带附件echo "统计日志" | /usr/bin/mutt -s "统计日志&qu ...

  9. 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)

    Laravel  和 Laravel  的邮件发送使用方式完全一致.Laravel  的邮件发送中文文档在:http: 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置 修改邮 ...

随机推荐

  1. [转]11种常见sqlmap使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

  2. Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用

    以某个实际场景为例,现在两张表:用户表User 订单表Order:很显然用户对订单是一对多的关系.二者注解如下 用户表User @Entity @Table(name="users" ...

  3. [Oracle]ORA-14400:插入的分区关键字未映射到任何分区

    今天在使用测试库的时候发生ORA-14400:inserted partition key does not map to any partition 解决过程: 经过百度,发现出现ORA-14400 ...

  4. 车站(NOIP1998)

    题目链接:车站 这一题,首先你要会推导,推到出式子后,就会像我一样简单AC. 给一张图: 这里,t是第二个车站上车人数. 有什么规律? 其实很好找.有如下规律: 第x车站的人数增量为第x-2车站的上车 ...

  5. 2017年多校get点

    杨辉三角形变形??? lucas定理

  6. Git工具和GitHub的使用

    一.Git工具的安装 1)centos系统下安装 1.1)查看环境 [root@gitlab ~]# rpm -qa centos-release centos-release--4.1708.el7 ...

  7. 牛客训练六:海啸(二维树状数组+vector函数的使用)

    题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first. 参考文章:传送门 #incl ...

  8. java常用设计模式六:适配器模式

    一.定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.比如以下的场景: 用手机充电为例,有一个手机的插孔是TypeC口,现在只 ...

  9. GHOST完成后出现GRUB解决方法

    1.试一下这个命令: grub> rootnoverify (hd0,0)(注意空格!!!) 或者 grub>makeacrive (hd0,0)grub> chainloader ...

  10. vue动态路由

    我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.能够提供参数的路由即为动态路由第一步:定义组件 c ...