C# 如何通过mailto标签和SMTP协议两种方式发送邮件
本文主要讲解如何通过如现mailto标签和SMTP协议两种方式发送邮件,下面就直入主题
方法一、通过mailto标签发送邮件
通过mailto不是正真意义上的发送邮件,它只是会自动调用我们本地默认的邮件服务软件(这取决于我们本地安装了什么邮件软件,outlook,firemail等等),发送还是需要我们自己点击发送才能完成。
mailto标签有很多实用的方法,比如:加入邮件的默认主题、抄送地址、暗送(密件抄送)地址,邮件内容等待.....
1、为邮件加入发件人
格式:mailto:发件人地址
代码示例
/// <summary>
/// sendFrom:发件人
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}", sendFrom);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
2、为邮件加入默认标题
格式:mailto:发件人地址?subject=邮件主题
代码示例
/// <summary>
/// sendFrom:发件人
/// subjetc:主题
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?subject={1}", sendFrom, subjetc);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
3、为邮件加入默认的抄送地址
格式:mailto:发件人地址?cc=抄送地址
代码示例
/// <summary>
/// sendFrom:发件人
/// sendCC:抄送地址
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?cc={1}", sendFrom, sendCC);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
4、为邮件加入默认暗送(密件抄送)地址
格式:mailto:发件人地址?bcc=密送地址
代码示例
/// <summary>
/// sendFrom:发件人
/// sendBCC:密送地址
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?bcc={1}", sendFrom, sendBCC);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
5、为邮件加入默认的内容
格式:mailto:发件人地址?body=邮件内容
代码示例
/// <summary>
/// sendFrom:发件人
/// content:邮件内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?body={1}", sendFrom, content);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
6、多个邮件地址
格式:mailto:发件人地址1,发件地址2,发件地址3(以逗号分隔)
7、综合型的:加入默认抄送地址,标题,内容
格式:mailto:发件人地址1,发件人地址2?cc=抄送地址&bcc=密送地址&subject=主题&body=邮件内容
代码示例
/// <summary>
/// sendFrom:发件人
/// sendCC:抄送
/// subjetc:密送
/// subjetc:主题
/// content:邮件内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?cc={1}&bcc={2}&subject={3}&body={4}", sendFrom, sendCC,
sendBCC, subjetc, content);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}
如图所示:
方法二、通过SMTP协议发送邮件
核心代码:
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="userEmailAddress">发件人地址</param>
/// <param name="userName">发件人姓名(可为空)</param>
/// <param name="password">密码</param>
/// <param name="host">邮件服务器地址</param>
/// <param name="port"></param>
/// <param name="sendToList">收件人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
/// <param name="sendCCList">抄送人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
/// <param name="subject">主题</param>
/// <param name="body">内容</param>
/// <param name="attachmentsPath">附件路径</param>
/// <param name="errorMessage">错误信息</param>
public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port,
string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage)
{
errorMessage = string.Empty;
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用户名、密码
client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
client.Host = host;//邮件服务器
client.Port = port;//端口号 非SSL方式,默认端口号为:25
client.UseDefaultCredentials = true; MailMessage msg = new MailMessage();
//加发件人
foreach (string send in sendToList)
{
msg.To.Add(send);
}
//加抄送
foreach (string cc in sendCCList)
{
msg.To.Add(cc);
} //在有附件的情况下添加附件
if (attachmentsPath != null && attachmentsPath.Length > )
{
foreach (string path in attachmentsPath)
{
var attachFile = new Attachment(path);
msg.Attachments.Add(attachFile);
}
}
msg.From = new MailAddress(userEmailAddress, userName);//发件人地址
msg.Subject = subject;//邮件标题
msg.Body = body;//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = true;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级 try
{
client.Send(msg);
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
errorMessage = ex.Message;
return false;
}
}
如图所示:
PS:如有疑问,请留言,未经允许,不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/7987282.html
C# 如何通过mailto标签和SMTP协议两种方式发送邮件的更多相关文章
- 为input标签绑定事件的几种方式
为input标签绑定事件的几种方式 1.JavaScript原生态的方式,直接复制下面的代码就会有相应的效果 <!DOCTYPE html><html><head> ...
- FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集
TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...
- select 标签的两种方式(以动态插入为例)
标准形式: html <select id="sorte_piceid_copy" name="tea" style="display:none ...
- android 向serverGet和Post请求的两种方式,android向server发送文件,自己组装协议和借助第三方开源
一个适用于Android平台的第三方和apache的非常多东西类似,仅仅是用于Android上 我在项目里用的是这个 https://github.com/loopj/android-async-ht ...
- 【转】HTTP协议两种提交参数的方式Form-data和raw
原文:http://www.cnblogs.com/zhangfei/p/5099036.html HTTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提 ...
- jsp中一个标签两种方式绑定两个click事件导致未执行的问题
近日,在开发过程中,写了一个标签 <li id="a1" onclick="doSomething()">...</li> 在js页面中 ...
- cycle标签和random两种方式美化表格
一:cycle标签实现给表格变色 1. <style>标签里写好需要的颜色 2. 在要变色的地方(行/列)加固定的语句,按照顺序依次执行 代码: <!DOCTYPE html> ...
- jquery 改变标签可见状态的几种方式
第一种: $(selector).show(); //立即显示指定标签 $(selector).hide();//立即隐藏指定标签 第二种: $(selector).fadeIn(ms);//在指定毫 ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
随机推荐
- react-native Execution failed for task ':app:prepareRnReduxReactNativeUpdateUnspecifiedLibrary'报错
详细报错 Could not copy zip entry E:\项目目录\node_modules\react-native-update\android\build\outputs\aar\rea ...
- GMA Round 1 向量计算
传送门 向量计算 已知$\left |\overrightarrow{AB} \right |^2+\left |\overrightarrow{CD} \right |^2+\left |\over ...
- CentOS下双网卡双IP不同IP段配置
环境: eth0:10.0.7.2 gw :10.0.7.254 netmask:255.255.255.0 eth1:168.6.101.2 gw :168.6.101.254 net ...
- socket.io常用api
1. 服务端 io.on('connection',function(socket)); 监听客户端连接,回调函数会传递本次连接的socket io.sockets.emit('String',dat ...
- RestTemplate发送请求并携带header信息 RestTemplate post json格式带header信息
原文地址: http://www.cnblogs.com/hujunzheng/p/6018505.html RestTemplate发送请求并携带header信息 v1.使用restTempl ...
- PowerShe 消息提示框测试
1. 使用powerShell 弹出一个简单的消息框,代码如下,创建test.ps1脚本文件. $ConfirmPreference = 'None' $ws = New-Object -ComObj ...
- 微信小程序 this.setData is not a function
在一般的函数中: bindFaChange1: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData ...
- SATA主机协议的FPGA实现之准备工作
SATA主机协议的FPGA实现之准备工作 从2月中旬准备开始,经过3个月的奋战,我的又一个项目--基于FPGA的固态硬盘读写控制电路,已经基本实现.由于实用资料的匮乏,以及项目本身颇具挑战性,这个 ...
- fiddler的编程文章
https://www.cnblogs.com/trevan/p/9487223.html https://www.cnblogs.com/rufus-hua/p/5275980.html https ...
- [转]:Delphi XE中泛型数组的使用范例
Delphi XE中泛型数组的使用范例,下面的范例简单的使用了泛型字符串数组,如用 TArray 代替 array of Word, 还可以使用 TArray 类提供的算法(就是少了点). uses ...