C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)

net2.0后,C#可以利用System.Net发送邮件了。

代码整理如下:

 3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递

  1 /**************************************
  2 * <copyright file="SendEail.cs">
  3 * Copyright(c)2014 LeeStudio All rights reserved.
  4 * CLR版本:4.0.30319.17929
  5 * 开发团队:欺心伴月个人工作室
  6 * 技术博客:http://www.cnblogs.com/lichunyang/
  7 * 所属工程:LeeStudio.Basic
  8 * 创 建 者:Frank Lee
  9 * 修改时间:2014-02-20 11:20
 10 * </copyright>
 11 **************************************/
 12
 13 using System;
 14 using System.Text;
 15 using System.Net;
 16 using System.Net.Mail;
 17 using System.Net.Mime;
 18
 19 namespace LeeStudio.Basic
 20 {
 21 /// <summary>
 22 /// 邮件发送类
 23 /// </summary>
 24 public class SendEmail
 25 {
 26 private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类
 27
 28 #region 构造函数
 29 /// <summary>
 30 /// 构造函数
 31 /// </summary>
 32 /// <param name="toAddresses">收件人地址(多个以,号分开)</param>
 33 /// <param name="fromAddress">发件人地址</param>
 34 /// <param name="title">主题</param>
 35 /// <param name="body">正文</param>
 36 public SendEmail(string toAddresses, string fromAddress, string title, string body)
 37 : this(toAddresses, fromAddress, "", "", title, body, false)
 38 {
 39 }
 40
 41 /// <summary>
 42 /// 构造函数
 43 /// </summary>
 44 /// <param name="toAddress">收件人地址</param>
 45 /// <param name="fromAddress">发件人地址</param>
 46 /// <param name="toName">收件人名字</param>
 47 /// <param name="fromName">发件人姓名</param>
 48 /// <param name="title">主题</param>
 49 /// <param name="body">正文</param>
 50 /// <param name="isBodyHtml">正文是否为html格式</param>
 51 public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml)
 52 {
 53 mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936));
 54 if (toName.Equals(""))
 55 mailMessage.To.Add(toAddress);
 56 else
 57 mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));
 58
 59 mailMessage.Subject = title;
 60 mailMessage.SubjectEncoding = Encoding.GetEncoding(936);
 61
 62 mailMessage.Body = body;
 63 mailMessage.IsBodyHtml = isBodyHtml;
 64 mailMessage.BodyEncoding = Encoding.GetEncoding(936);
 65 }
 66 #endregion
 67
 68 /// <summary>
 69 /// 设置SMTP,并且将邮件发送出去
 70 /// 所有参数都设置完成后再调用该方法
 71 /// </summary>
 72 /// <param name="password">发件人密码</param>
 73 /// <param name="smtpHost">SMTP服务器地址</param>
 74 public void SetSmtp(string password, string smtpHost)
 75 {
 76 SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal);
 77 }
 78
 79 /// <summary>
 80 /// 设置SMTP,并且将邮件发送出去
 81 /// 所有参数都设置完成后再调用该方法
 82 /// </summary>
 83 /// <param name="address">发件人地址(必须为真实有效的email地址)</param>
 84 /// <param name="password">发件人密码</param>
 85 /// <param name="smtpHost">SMTP服务器地址</param>
 86 /// <param name="smtpPort">SMTP服务器的端口</param>
 87 /// <param name="isEnableSsl">SMTP服务器是否启用SSL加密</param>
 88 /// <param name="priority">邮件的优先级</param>
 89 public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority)
 90 {
 91 SmtpClient smtp = new SmtpClient();
 92 smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
 93 smtp.Credentials = new NetworkCredential(address, password);
 94 smtp.Host = smtpHost;
 95 smtp.Port = smtpPort;
 96 smtp.EnableSsl = isEnableSsl;
 97
 98 mailMessage.Priority = priority;
 99 smtp.Send(mailMessage); //发送邮件
100 }
101
102 #region //设置邮件地址
103 /// <summary>
104 /// 设置更多收件人
105 /// </summary>
106 /// <param name="toAddresses">收件人地址</param>
107 public void SetMoreToAddress(string toAddresses)
108 {
109 mailMessage.To.Add(toAddresses);
110 }
111
112 /// <summary>
113 /// 设置更多收件人
114 /// </summary>
115 /// <param name="toAddresses">收件人地址</param>
116 /// <param name="toName">收件人名字</param>
117 public void SetMoreToAddress(string toAddress, string toName)
118 {
119 mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));
120 }
121
122 /// <summary>
123 /// 设置抄送者(多个以,号分开)
124 /// </summary>
125 /// <param name="ccAddresses">抄送者地址</param>
126 public void SetCarbonCopyFor(string ccAddresses)
127 {
128 mailMessage.CC.Add(ccAddresses);
129 }
130
131 /// <summary>
132 /// 设置抄送者
133 /// </summary>
134 /// <param name="ccAddress">抄送者地址</param>
135 /// <param name="ccName">抄送者名字</param>
136 public void SetCarbonCopyFor(string ccAddress, string ccName)
137 {
138 mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));
139 }
140
141 /// <summary>
142 /// 设置密送者(多个以,号分开)
143 /// </summary>
144 /// <param name="bccAddresses">密送者</param>
145 public void SetBlindCarbonCopyFor(string bccAddresses)
146 {
147 mailMessage.Bcc.Add(bccAddresses);
148 }
149
150 /// <summary>
151 /// 设置密送者
152 /// </summary>
153 /// <param name="bccAddress">密送者</param>
154 /// <param name="bccName">密送者名字</param>
155 public void SetBlindCarbonCopyFor(string bccAddress, string bccName)
156 {
157 mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));
158 }
159 #endregion
160
161 #region 添加附件
162 /// <summary>
163 /// 添加附件(自动识别文件类型)
164 /// </summary>
165 /// <param name="fileName">单个文件的路径</param>
166 public void Attachments(string fileName)
167 {
168 mailMessage.Attachments.Add(new Attachment(fileName));
169 }
170
171 /// <summary>
172 /// 添加附件(默认为富文本RTF格式)
173 /// </summary>
174 /// <param name="fileName">单个文件的路径</param>
175 public void AttachmentsForRTF(string fileName)
176 {
177 mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf));
178 }
179 #endregion
180 }
181 }

调用是按照需求,自由设置参数。

 1 using LeeStudio.Basic;
 2
 3 private void SendEmail()
 4 {
 5 #region 最简设置
 6 //SendEmail se = new SendEmail("*****@****.com", "****@163.com", "title", "body");
 7 //se.SetSmtp("password", "smtp.163.com"); //必须在所有参数设置完后调用此方法
 8 #endregion
 9
10 #region 完全设置
11 //string toAddresses = "***@**.**,***@**.**";
12 //string toNames = "frank,lee";
13
14 //SendEmail se = new SendEmail("[email protected]**.**", "[email protected]**.**", "toname", "fromname","title", "body", false);
15 //se.SetMoreToAddress("[email protected]**.**", "toName");
16 //se.SetCarbonCopyFor("[email protected]**.**");
17 //se.SetBlindCarbonCopyFor("[email protected]**.**");
18
19 //string filePath = Request.PhysicalApplicationPath + "/file/SendEmail.txt";
20 //se.Attachments(filePath);
21 //filePath = Request.PhysicalApplicationPath + "/file/RTF文件.docx";
22 //se.AttachmentsForRTF(filePath);
23 //se.SetSmtp("email", "password", "smtp", 25, true, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法
24 #endregion
25 }

遗留问题:

当有多个收件人/抄送者/密送者时,如何快速处理?之前的做法是让用户输入字符串,再将字符串一一对应匹配,代码如下:

 1 /// <summary>
 2 /// 将邮件地址和名称加入到锯齿数组中
 3 /// </summary>
 4 /// <param name="addrs">邮件地址(多个以,号分开)</param>
 5 /// <param name="names">名称(多个以,号分开)</param>
 6 /// <returns>地址和名称数组</returns>
 7 private string[][] SetNameList(string addrs, string names)
 8 {
 9     string[][] result = new string[2][];
10
11     string[] addr = addrs.Split(‘,‘);
12     string[] name = names.Split(‘,‘);
13     result[0] = new string[addr.Length];
14     result[1] = new string[name.Length];
15
16     for (int i = 0; i < addr.Length; i++)
17         result[0][i] = addr[i];
18     for (int i = 0; i < name.Length; i++)
19         result[1][i] = name[i];
20
21     return result;
22 }

首先这个方法就很奇葩,其次,只要用户输入的个数不对应,又要做一堆的异常处理。

时间: 2024-10-16 07:07:09

C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)的相关文章

C#利用System.Net发送邮件

啥也不说了,直接上干货 using System.Net.Mail;using System.Net; //使用发送邮件的邮箱 var emailAcount = "[email protected]"; //邮箱授权码(改成上面对应邮箱的) var emailPassword = "邮箱授权码"; var reciver = "[email protected]"; var content = "邮件发送的内容"; Mail

python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)

SMTP发送邮件的时候,并没有特殊的通信语句告诉邮件服务器 谁是主送,谁是抄送/密送,这三个角色都是以同样的方式告诉邮件服务器的,然后重点在邮件内容里. 邮件内容分为头和体两部分(就像http),头部包含了各种meta信息,其中说明了谁要用to,谁要cc,谁要bcc. 一个典型的带to和bcc的邮件发送过程debug日志如下: send: 'ehlo E42.lan\r\n' reply: b'250-smtp.qq.com\r\n' reply: b'250-PIPELINING\r\n' r

20150307 利用smtp协议发送邮件

20150307 利用smtp协议发送邮件 2015-03-07 Lover雪儿 一.smtp匿名发邮件 ? Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. ? C:\Users\Administrator>nslookup -q=mx qq.com Server: XiaoQiang Address: 192.168.31.1 ? Non-au

java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板

java 利用spring JavaMailSenderImpl发送邮件,支持普通文本.附件.html.velocity模板 博客分类: Java Spring 本文主要介绍利用JavaMailSenderImpl发送邮件.首先介绍了发送一般邮件,然后介绍了发送富文本(html)邮件及以velocity为模板发送邮件. 邮件发送分为为三步:创建邮件发送器.编写邮件.发送邮件. Spring的JavaMailSenderImpl提供了强大的邮件发送功能,可发送普通文本邮件.带附件邮件.html格式

C#利用SMTP服务器发送邮件

使用.net(C#)发送邮件学习手册(带成功案例) 1.了解发送邮件的三种方式 2.实例介绍使用client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis 3.如何设定本机IIS的SMTP服务器 1.了解发送邮件的三种方式 第一:client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; //通過遠程SMTP服務器傳送

Java发送邮件(带附件)

实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Message对象,然后设置邮件主题和正文 利用Transport对象发送邮件 需要的jar有2个:activation.jar和mail.jar 直接看个demo代码 #----------------这两个是构建session必须的字段----------#smtp服务器mail.smtp.host=s

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意:win7操作系统“命令提示符”要以管理员身份运行 2,将Xml文件拷贝到xsd.exe工具所在的文件夹,生成的xsd文件也将在这个文件夹中 3,在命令提示符中输入 xsd.exe test.xml, 多个xml文件以空格隔

[原创]利用system verilog快速构建单元仿真

在一些单元模块仿真时,往往需要构建一定格式的数据激励,如某个处理TCP报文的单元模块,需要构建符合TCP报文格式的激励.基于verilog的激励生成,大致有两种方法: txt文件法.将符合需求的数据记录于txt,仿真时调用. 直接合成法.利用verilog在tb中直接合成激励. 这两种方法的优点是直观,但不够灵活.其一,当激励的数据结构复杂时,构建起来比较麻烦:其二,当被测对象的输入协议改动时,往往牵一发而动全身,需要对tb做整体的检查. 利用system verilog构建单元测试可以克服上述

2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

效果图 上传文件页面: 下载文件页面:  1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="upAndDown.SiteMaster" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/