C# 多种方式发送邮件(附帮助类)

因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用~

QQ邮箱发送邮件

#region 发送邮箱try{MailMessage mail = new MailMessage();MailAddress from = new MailAddress("发件人邮箱", "工程管理平台", System.Text.Encoding.GetEncoding("GB2312"));//邮件的发件人mail.From = from;MailAddress to = new MailAddress("收件人邮箱");//设置邮件的收件人
                mail.To.Add(to);mail.Subject = "收款确认";string url = "http://wwww.baidu.com";mail.Body = "您好,有新的待确认收款" + url;mail.IsBodyHtml = true;//HTML格式,内容可以包含HMTL标签和超链接uuu mail.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置邮件的格式mail.Priority = MailPriority.Normal;//设置邮件的发送级别mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;SmtpClient client = new SmtpClient();//邮件发送服务器//client.Port = 25; QQ发送邮件不用设置client.Host = "smtp.qq.com";    //发件人地址所在的服务器SMTP 如网易126邮箱的为smtp.126.comclient.EnableSsl = true;client.UseDefaultCredentials = false; //设置用于 SMTP 事务的端口,默认的是 25client.Credentials = new System.Net.NetworkCredential("发件人邮箱", "授权码");//发件人邮箱登陆名和密码(生成的授权码)client.DeliveryMethod = SmtpDeliveryMethod.Network;try{client.Send(mail);//发送邮件MessageShow("发送成功");Response.Write("<script language='javascript'>alert('发送成功!');</script>");}catch (System.Net.Mail.SmtpException ex){MessageShow(ex.Message);}}catch (Exception ex){throw ex;}#endregion

 

效果:

注意

重要引用:

using System.Net.Mail;

 

其中,使用QQ发送邮件,需要使用授权码而不是QQ密码,授权码具体生成方式可以查看:http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28

 

自定义发送邮件

附帮助类的发送邮件方式(推荐此种方式,更灵活)

邮件帮助类

  1 #region 邮件帮助类
  2     /// <summary>
  3     /// 邮件帮助类
  4     /// </summary>
  5     public static class SendMailHelper
  6     {
  7         /// <summary>
  8         /// 发送邮件
  9         /// </summary>
 10         /// <param name="request">邮件内容对象</param>
 11         /// <returns>发送邮件所遇到的异常</returns>
 12         public static string SendMail(MailRequest request)
 13         {
 14             try
 15             {
 16                 MailMessage mail = new MailMessage();
 17 
 18                 if (string.IsNullOrEmpty(request.From))
 19                 {
 20                     request.From = ConfigurationManager.AppSettings["DefaultMailFrom"];
 21                 }
 22                 mail.From = new MailAddress(request.From);
 23 
 24                 PaserMailAddress(request.To, mail.To);
 25                 PaserMailAddress(request.CC, mail.CC);
 26                 PaserMailAddress(request.Bcc, mail.Bcc);
 27 
 28                 mail.Subject = request.Subject;
 29                 mail.SubjectEncoding = System.Text.Encoding.UTF8;
 30                 mail.Body = request.Body;
 31                 mail.ReplyTo = new MailAddress(request.From);
 32                 mail.IsBodyHtml = true;
 33 
 34                 if (request.Attachments != null && request.Attachments.Length > 0)
 35                 {
 36                     for (int i = 0; i < request.Attachments.Length; i++)
 37                     {
 38                         Attachment mailAttach = new Attachment(ByteArrayToStream(request.Attachments[i].FileData), request.Attachments[i].FileName);
 39 
 40                         mail.Attachments.Add(mailAttach);
 41                     }
 42                 }
 43             
 44                 if (string.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings["SMTPSERVER_Show"]))
 45                 {
 46                     throw new ApplicationException("邮件服务无效");
 47                 }
 48 
 49                 //Smtp Server
 50                 SmtpClient mailClient = new SmtpClient(ConfigurationManager.AppSettings["SMTPSERVER_Show"]);
 51 
 52                 if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["SMTPSERVERPORT"]))
 53                 {
 54                     //端口号
 55                     try
 56                     {
 57                         mailClient.Port = Int32.Parse(ConfigurationManager.AppSettings["SMTPSERVERPORT"]);
 58                     }
 59                     catch
 60                     {
 61                         return "SMTP服务器端口设置错误,端口必须设置为数值型";
 62                     }
 63                 }
 64 
 65                 if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["MAILUSER_Show"]))
 66                 {
 67                     mailClient.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MAILUSER_Show"], ConfigurationManager.AppSettings["MAILUSERPW_Show"]);
 68                     mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
 69                 }
 70                 else
 71                 {
 72                     mailClient.Credentials = CredentialCache.DefaultNetworkCredentials;
 73                 }
 74 
 75                 mailClient.Send(mail);
 76                 mail.Dispose();
 77 
 78                 return string.Empty;
 79             }
 80             catch (SmtpFailedRecipientsException e)
 81             {
 82                 return e.Message;
 83             }
 84             catch (SmtpFailedRecipientException e)
 85             {
 86                 return e.Message;
 87             }
 88             catch (SmtpException e)
 89             {
 90                 return e.Message;
 91             }
 92             catch (Exception e)
 93             {
 94                 return e.Message;
 95             }
 96         }
 97 
 98         /// <summary>
 99         /// 解析分解邮件地址
100         /// </summary>
101         /// <param name="mailAddress">邮件地址</param>
102         /// <param name="mailCollection">邮件对象</param>
103         private static void PaserMailAddress(string mailAddress, MailAddressCollection mailCollection)
104         {
105             if (string.IsNullOrEmpty(mailAddress))
106             {
107                 return;
108             }
109 
110             char[] separator = new char[2] { ',', ';' };
111             string[] addressArray = mailAddress.Split(separator);
112 
113             foreach (string address in addressArray)
114             {
115                 if (address.Trim() == string.Empty)
116                 {
117                     continue;
118                 }
119 
120                 mailCollection.Add(new MailAddress(address));
121             }
122         }
123 
124         /// <summary>
125         /// 字节数组转换为流
126         /// </summary>
127         /// <param name="byteArray">字节数组</param>
128         /// <returns>Stream</returns>
129         private static Stream ByteArrayToStream(byte[] byteArray)
130         {
131             MemoryStream mstream = new MemoryStream(byteArray);
132 
133             return mstream;
134         }
135     }
136     #endregion
View Code

 

补充上述帮助类中,还需要添加 MailRequest.cs 类(发送请求相关类) 和 MailRequestAttachments.cs 类(附件类)

MailRequest.cs 类

using System;
using System.Collections.Generic;
using System.Text;namespace SyncAdData.DBHelper
{/// <summary>/// 发送邮件请求/// </summary>public class MailRequest{#region PrivateFields/// <summary>/// 文件名/// </summary>private string _fromField;/// <summary>/// 返送到/// </summary>private string _toField;/// <summary>/// 抄送/// </summary>private string _copyField;/// <summary>/// 附件/// </summary>private string _bccField;/// <summary>/// 标题/// </summary>private string _subjectField;/// <summary>/// 发送人名/// </summary>private string _bodyField;/// <summary>/// 类容/// </summary>private MailRequestAttachments[] _attachmentsField;#endregion/// <summary>/// 发送人,多个人以分号;间隔/// </summary>public string From{get{return this._fromField;}set{this._fromField = value;}}/// <summary>/// 收件人,多个人以分号;间隔/// </summary>public string To{get{return this._toField;}set{this._toField = value;}}/// <summary>/// 抄送人,多个人以分号;间隔/// </summary>public string CC{get{return this._copyField;}set{this._copyField = value;}}/// <summary>/// 秘密抄送人,多个人以分号;间隔/// </summary>public string Bcc{get{return this._bccField;}set{this._bccField = value;}}/// <summary>/// 主题/// </summary>public string Subject{get{return this._subjectField;}set{this._subjectField = value;}}/// <summary>/// 内容/// </summary>public string Body{get{return this._bodyField;}set{this._bodyField = value;}}/// <summary>/// 附件列表/// </summary>public MailRequestAttachments[] Attachments{get{return this._attachmentsField;}set{this._attachmentsField = value;}}}
}
View Code

 

MailRequestAttachments.cs 类

using System;
using System.Collections.Generic;
using System.Text;namespace SyncAdData.DBHelper
{/// <summary>/// 发送邮件请求附件/// </summary>public class MailRequestAttachments{#region PrivateFields/// <summary>/// 文件名/// </summary>private string _fileNameField;/// <summary>/// 文件内容/// </summary>private byte[] _fileDataField;#endregion/// <summary>/// 文件名/// </summary>public string FileName{get{return this._fileNameField;}set{this._fileNameField = value;}}/// <summary>/// 文件内容/// </summary>public byte[] FileData{get{return this._fileDataField;}set{this._fileDataField = value;}}}
}
View Code

 

需要的命名空间

using System;
using System.Reflection;
using System.Net.Mail;
using System.Web.Configuration;
using System.Net;
using System.IO;

其中 帮助类中的服务器地址 和 账号  密码需要在配置文件中配置

 <add key="SMTPSERVER" value="邮件服务器"/><add key="MAILUSER" value="账号"/><add key="MAILUSERPW" value="密码"/>

 

前台调用

/// <summary>/// 发送邮件/// </summary>/// <param name="StrUrl">根据业务需要,这里我需要传入几个拼接后的id值</param>/// <param name="bid">根据业务需要,这里我传的批次id</param>/// <param name="showemail">根据业务需要,这里我传入的是查询出来的收件人邮箱(如果是固定的更好,可以直接写死或者写成配置文件)</param>private void Send(string StrUrl,string bid,string showemail){ #region 读取配置发送邮件string url = "http://localhost:9998/FinanceManage/CollectionManage/ConfirmCollection_Receipt.aspx?MenuID=14010600&id=" + StrUrl + "&batchID=" + bid + "";string body = "您好,有新的待确认收款≥ "+url;//string bcc = string.Empty;string to = "v-zhangxy52@vanke.com";//收件人//string cc = "";//抄送人MailRequest mail = new MailRequest();mail.Subject = "收款确认";//主题mail.Body = body;//内容// mail.Bcc = bcc;//秘密抄送人mail.From = "v-tangqq02@vanke.com";//发送人mail.To = to; //收件人// mail.CC = cc; //抄送人string sendMainResult = "-1";if (!string.IsNullOrEmpty(mail.To.Trim()) || !string.IsNullOrEmpty(mail.CC.Trim())){sendMainResult = SendMailHelper.SendMail(mail);if (string.IsNullOrEmpty(sendMainResult)){BaseClass.CommFun.Alert(this.up_innerCheck, "发送成功!", Page);}}#endregion }

 

效果

 点击确定发送之后,查看邮箱,即可看到发送内容(可根据业务需求自行调整)

 

 刚好另一个项目中也需要用到发邮件,也是用的上述的帮助类,附效果图

 

 

 至此,发送邮件功能已经全部完毕,当中不乏可以优化的地方,欢迎大家自行优化,相互交流~

转载于:https://www.cnblogs.com/zhangxiaoyong/p/6117848.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安霸SPI 剖析

最近在搞单片机和A5S的SPI通信 1、A5S是跑的是ITRON的系统、有自己相关的SPI API函数2、单片机这边也是可以熟悉了&#xff0c;发送&#xff0c;接收什么的&#xff0c;我都可以自模拟出来3、但是问题是&#xff0c;A5S上面的API函数的工作是如何的&#xff0c;我一直没怎么弄清…

linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植

LED 驱动程序移植 编者&#xff1b;对于led的驱动程序&#xff0c;很多文章都有详细的介绍&#xff0c;我的博客里面有一篇专门详解这个的。需要看的&#xff0c;可以找下。led灯的驱动其实就代表了I/O口的驱动。在linux系统下&#xff0c;操作一个I/O口&#xff0c;可以说实在…

单变量批量梯度下降算法与单变量随机梯度下降算法

2.3 代价函数的直观理解I 让我们通过一些例子来获取一些直观的感受&#xff0c;看看代价函数到底是在干什么。 2.4 代价函数的直观理解II 代价函数的样子类似于等高线图&#xff0c;则可以看出在三维空间中存在一个J(θ0,θ1)使得最小的点。 通过这些图形&#xff0c;我希望你…

一台计算机连入计算机网络后通过该计算机,一台计算机连入计算机网络后,该计算机( )。...

摘要&#xff1a;计算机连当碰撞已不可避免时,船舶应根据良好船艺的要求采取最有效的行动以减小碰撞的损失,下列说法正确的是()。①应避免两船首相撞;②应避免一船船首撞入他船机舱附近或船中;③应尽量使两船相撞前相对速度达到最大;④应尽量使两船相撞前相对速度达到最小。算机…

反向传播+代码实现

ywx的反向传播代码实现 import torch x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]#w是Tensor(张量类型)&#xff0c;Tensor中包含data和grad&#xff0c;data和grad也是Tensor。 # grad初始为None&#xff0c;调用l.backward()方法后w.grad为Tensor&#xff0c; # 故更…

计算机网络阅读报告,计算机网络实验二报告

计算机网络实验二报告 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;11.90 积分&#xfeff;计算机网络实验报告课程_ 计算机网络 _ 实验名称 TCP/IP协议分析与验证 姓 名 实 验 日 期&#xff…

使用Pytorch处理多维特征的输入

下图这个预测一个人在一年之后得糖尿病的概率的例子&#xff0c;这个时候我们的输入将会有很多的指标。你可以把它看成是我们体检的各种值。最后一排的外代表了他是否会得糖尿病。 那么多维的特征输入应该怎么办呢&#xff1f;我们就需要把每一个特征x付以相应的权重。在进行逻…

dubbo学习 三 dubbox概述

当当网根据自身的需求&#xff0c;对dubbo进行了扩展就叫成了dubbox。具体的使用方法可以参照官网各种例子&#xff1a;http://dangdangdotcom.github.io/dubbox/ 支持rest风格远程调用 之前了解过restful服务具体是什么&#xff0c;resteasy也了解过&#xff0c;所以看到就可以…

使用Pytorch完成多分类问题

多分类问题在最后的输出层采用的Softmax Layer&#xff0c;其具有两个特点&#xff1a;1.每个输出的值都是在(0,1)&#xff1b;2.所有值加起来和为1. 假设是最后线性层的输出&#xff0c;则对应的Softmax function为&#xff1a; 输出经过sigmoid运算即可是西安输出的分类概率…

PyTorch的nn.Linear()详解

1. nn.Linear() nn.Linear()&#xff1a;用于设置网络中的全连接层&#xff0c;需要注意的是全连接层的输入与输出都是二维张量 一般形状为[batch_size, size]&#xff0c;不同于卷积层要求输入输出是四维张量。其用法与形参说明如下&#xff1a; in_features指的是输入的二维…

罗彻斯特大学计算机科学系专业排名,罗切斯特大学计算机科学专业

罗切斯特大学(University of Rochester&#xff0c;U of R)建立于1850年&#xff0c;是一所美国著名的私立研究型大学&#xff0c;“新常春藤”联盟之一&#xff0c;北美大学协会(AAU)成员、世界大学联盟成员。360老师介绍&#xff0c;学校的7位学者是美国国家科学院院士&#…

系统权限管理设计 (转)

权限设计&#xff08;初稿&#xff09; 1. 前言&#xff1a; 权限管理往往是一个极其复杂的问题&#xff0c;但也可简单表述为这样的逻辑表达式&#xff1a;判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用&#xff0c;需要根据项目的实…

卷积神经网络(基础篇)

说明 0、前一部分叫做Feature Extraction&#xff0c;后一部分叫做classification 1、每一个卷积核它的通道数量要求和输入通道是一样的。这种卷积核的总数有多少个和你输出通道的数量是一样的。 2、卷积(convolution)后&#xff0c;C(Channels)变&#xff0c;W(width)和H(Heig…

Inception(Pytorch实现)

论文在此: Going deeper with convolutions 论文下载: https://arxiv.org/pdf/1409.4842.pdf 网络结构图: import torch import torch.nn as nn import torch.nn.functional as Fclass Inception3(nn.Module):def __init__(self, num_classes1000, aux_logitsTrue, transform…

SecureCRT 用来当串口工具的设置

今天从淘宝网上买的USB转串口线终于到了&#xff0c;从网上下载了驱动&#xff0c;关于USB转串口驱动在我上传的资源里面有&#xff0c;关于SecureCRT这个串口调试工具我也上传了&#xff0c;是个绿色免安装版本。 刚开始的时候一步一步的设置串口&#xff0c;连接串口也可以连…

Brainstorm-the walkthrough example: Image Classification

(1) 运行create data&#xff0c;其中包括下载cifar10&#xff0c;并转换为hdf5格式&#xff08;详见百度百科&#xff1a;http://baike.baidu.com/view/771949.htm#4_2&#xff09;: cifar10的数据简介见&#xff1a;http://www.cs.toronto.edu/~kriz/cifar.html cd data pyth…

卷积神经网络(高级篇) Inception Moudel

Inception Moudel 1、卷积核超参数选择困难&#xff0c;自动找到卷积的最佳组合。 2、1x1卷积核&#xff0c;不同通道的信息融合。使用1x1卷积核虽然参数量增加了&#xff0c;但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成&#xff0c;要分清哪些…

计算机谈音乐薛之谦,明星浮世绘之薛之谦:分析了50多首音乐作品,为其总结了五个特点...

原标题&#xff1a;明星浮世绘之薛之谦&#xff1a;分析了50多首音乐作品&#xff0c;为其总结了五个特点薛之谦&#xff0c;才华横溢思维敏捷&#xff0c;性格搞怪却又忧郁。我曾经用四个字来形容他&#xff0c;沙雕其外&#xff0c;金玉其中。记得老薛曾经发布了一个动态&…

linux内核下载 编译

linux内核下载网址 今天去看了一场电影“疯狂的原始人”----回来的车上看到一个老奶奶传教士,我想对自己多,加油,加油学习,深思深思 我们现在用的安霸系统,每搞一次我都会进行一次备份,一个系统加上GUI一起都有差不多一G多,而今天下载了最新的linux内核版本,才不80M左…

Deep learning

论文&#xff1a;doi:10.1038/nature14539 论文意义和主要内容 三巨头从机器学习谈起&#xff0c;指出传统机器学习的不足&#xff0c;总览深度学习理论、模型&#xff0c;给出了深度学习的发展历史&#xff0c;以及DL中最重要的算法和理论。 概念&#xff1a; 原理&#xff…