本文主要讲解如何通过如现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协议两种方式发送邮件的更多相关文章

  1. 为input标签绑定事件的几种方式

    为input标签绑定事件的几种方式 1.JavaScript原生态的方式,直接复制下面的代码就会有相应的效果 <!DOCTYPE html><html><head> ...

  2. FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集

    TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...

  3. select 标签的两种方式(以动态插入为例)

    标准形式: html <select id="sorte_piceid_copy" name="tea" style="display:none ...

  4. android 向serverGet和Post请求的两种方式,android向server发送文件,自己组装协议和借助第三方开源

    一个适用于Android平台的第三方和apache的非常多东西类似,仅仅是用于Android上 我在项目里用的是这个 https://github.com/loopj/android-async-ht ...

  5. 【转】HTTP协议两种提交参数的方式Form-data和raw

    原文:http://www.cnblogs.com/zhangfei/p/5099036.html HTTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提 ...

  6. jsp中一个标签两种方式绑定两个click事件导致未执行的问题

    近日,在开发过程中,写了一个标签 <li id="a1" onclick="doSomething()">...</li> 在js页面中 ...

  7. cycle标签和random两种方式美化表格

    一:cycle标签实现给表格变色 1. <style>标签里写好需要的颜色 2. 在要变色的地方(行/列)加固定的语句,按照顺序依次执行 代码: <!DOCTYPE html> ...

  8. jquery 改变标签可见状态的几种方式

    第一种: $(selector).show(); //立即显示指定标签 $(selector).hide();//立即隐藏指定标签 第二种: $(selector).fadeIn(ms);//在指定毫 ...

  9. 网络协议 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 ...

随机推荐

  1. linux > 和 >> 、< 区别

    linux中经常会用到将内容输出到某文件当中,只需要在执行命令后面加上>或者>>号即可进入操作. 大于号:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向 ...

  2. C#模板引擎NVelocity实战项目演练

    一.背景需求 很多人在做邮件模板.短信模板的时候,都是使用特殊标识的字符串进行占位,然后在后台代码中进行Replace字符串,如果遇到表格形式的内容,则需要在后台进行遍历数据集合,进行字符串的拼接,继 ...

  3. Unity中调用DLL库

    DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...

  4. JavaScript JSON对象(一)

    一.JSON数据 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是“名值对”的集合.结构由大括号'{}',中括号 ...

  5. ABAP表生成Java实体Bean

    项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供分发与查询服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大 ...

  6. Docker 安装和基础用法

    理解Docker(1):Docker 安装和基础用法 本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 ...

  7. 【.NET 深呼吸】在 .net core app 中使用 Composition

    .NET 中的 Composition ,即 MEF.MEF 说得简单一点,就是它可以在运行阶段动态地发现类型,用于组件扩展方面特别合适. .NET Core App 的默认框架并不提供 MEF 有关 ...

  8. 20151224今天发现到的两篇关于CSS架构、可复用可维护CSS和CSS学习提升能有改变思想观念意识的文章 分别是CSS架构目标和说说CSS学习中的瓶颈

    多讲一个,CSS全称是什么?CSS全称为Cascading Style Sheets,中文翻译为“层叠样式表”,简称CSS样式表又被我们称为CSS样式,CSS样式又被作为一种能制作出各种样式网页的技术 ...

  9. 【C++】C++中的基本内置类型

    基本数据类型 下面这张表是C++支持的基本数据类型 类型 含义 最小尺寸 bool 布尔 未定义 char 字符 8位 wchar_t 宽字符 16位 char16_t Unicode字符 16位 c ...

  10. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...