c#发送邮件代码:c#中smtp邮件发送方法示例

发布时间:2020-08-26编辑:脚本学堂
一例c#发送邮件代码,c#发送邮件的方式很多,这里介绍c#实现smtp邮件发送程序的例子,使用smtp方式发送邮件,比如使用163 smtp发送邮件都是很方便的。

c#使用smtp服务器发送邮件的方法

一、c# smtp邮件发送代码

运行效果:
c#实现smtp邮件发送程序

核心代码:
 

复制代码 代码示例:
using System;
using System.Net;
using System.Net.Mail;
using System.Text;
namespace HC.Email
{
/// <summary>
/// 整站邮件服务类
/// </summary>
public class EmailService
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailTo">收件人
/// <param name="subject">主题
/// <param name="body">内容
/// <returns></returns>
public static bool Send(string mailTo, string subject, string body)
{
return Send(new[] {mailTo}, null, subject, body, true, null);
}
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailTo">收件人
/// <param name="subject">主题
/// <param name="body">内容
/// <returns></returns>
public static bool Send(string[] mailTo, string subject, string body)
{
return Send(mailTo, null, subject, body, true, null);
}
 
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailTo">收件人
/// <param name="subject">主题
/// <param name="body">内容
/// <param name="attachmentsPath">附件
/// <returns></returns>
public static bool Send(string[] mailTo, string subject, string body, string[] attachmentsPath)
{
return Send(mailTo, null, subject, body, true, attachmentsPath);
}
 
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailTo">收件人
/// <param name="mailCcArray">抄送
/// <param name="subject">主题
/// <param name="body">内容
/// <param name="isBodyHtml">是否Html
/// <param name="attachmentsPath">附件
/// <returns></returns>
public static bool Send(string[] mailTo, string[] mailCcArray, string subject,string body, bool isBodyHtml,
string[] attachmentsPath)
{
try
{
var config = ConfigHelper.GetConfig<emailconfig>();
if (string.IsNullOrEmpty(config.Host) ||string.IsNullOrEmpty(config.UserName) ||
string.IsNullOrEmpty(config.Port) ||string.IsNullOrEmpty(config.Password))
{
//todo:记录日志
return false;
}
var @from = new MailAddress(config.MailFrom); //使用指定的邮件地址初始化MailAddress实例
var message = new MailMessage(); //初始化MailMessage实例
//向收件人地址集合添加邮件地址
if (mailTo != null)
{
foreach (string t in mailTo)
{
message.To.Add(t);
}
}
 
//向抄送收件人地址集合添加邮件地址
if (mailCcArray != null)
{
foreach (string t in mailCcArray)
{
message.CC.Add(t);
}
}
//发件人地址
message.From = @from;
 
//电子邮件的标题
message.Subject = subject;
 
//电子邮件的主题内容使用的编码
message.SubjectEncoding = Encoding.UTF8;
 
//电子邮件正文
message.Body = body;
 
//电子邮件正文的编码
message.BodyEncoding = Encoding.Default;
message.Priority = MailPriority.High;
message.IsBodyHtml = isBodyHtml;
 
//在有附件的情况下添加附件
if (attachmentsPath != null && attachmentsPath.Length > 0)
{
foreach (string path in attachmentsPath)
{
var attachFile = new Attachment(path);
message.Attachments.Add(attachFile);
}
}
try
{
var smtp = new SmtpClient
{
Credentials = new NetworkCredential(config.UserName, config.Password),
Host = config.Host,
Port = Convert.ToInt32(config.Port)
};
 
//将邮件发送到SMTP邮件服务器
smtp.Send(message);
//todo:记录日志
return true;
}
catch (SmtpException ex)
{
//todo:记录日志
return false;
}
}
catch (SmtpException ex)
{
//todo:记录日志
return false;
}
}
}
}

二、c#使用smtp发送邮件
 

复制代码 代码示例:

//简单邮件传输协议类
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = "smtp.163.com";//邮件服务器
client.Port = 25;//smtp主机上的端口号,默认是25.
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;//邮件发送方式:通过网络发送到SMTP服务器
client.Credentials = new System.Net.NetworkCredential("panthervic", "123456");//凭证,发件人登录邮箱的用户名和密码

//电子邮件信息类
System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("panthervic@163.com", "小明");//发件人Email,在邮箱是这样显示的,[发件人:小明<panthervic@163.com>;]
System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress("43327681@163.com", "小红");//收件人Email,在邮箱是这样显示的, [收件人:小红<43327681@163.com>;]
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAddress);//创建一个电子邮件类
mailMessage.Subject = "邮件的主题";
string filePath = Server.MapPath("/index.html");//邮件的内容可以是一个html文本.
System.IO.StreamReader read = new System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("GB2312"));
string mailBody = read.ReadToEnd();
read.Close();
mailMessage.Body = mailBody;//可为html格式文本
//mailMessage.Body = "邮件的内容";//可为html格式文本
mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//邮件主题编码
mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//邮件内容编码
mailMessage.IsBodyHtml = true;//邮件内容是否为html格式
mailMessage.Priority = System.Net.Mail.MailPriority.High;//邮件的优先级,有三个值:高(在邮件主题前有一个红色感叹号,表示紧急),低(在邮件主题前有一个蓝色向下箭头,表示缓慢),正常(无显示).
try
{
    client.Send(mailMessage);//发送邮件
    //client.SendAsync(mailMessage, "ojb");异步方法发送邮件,不会阻塞线程.
}
catch (Exception)
{
}

三、c# smtp方式发送邮件:使用163 smtp服务器发送邮件

C#中System.Net.Mail.SmtpClient类是专门用来请求SMTP服务器发送邮件的,但是如果使用本地的SMTP服务器(比如本机IIS的SMTP服务器)发送邮件,会被许多大型网站的邮箱当做垃圾邮件来处理,原因是本地SMTP服务器的地址并不为人所知,发送的邮件理所当然会被当做来历不明的邮件,所以要借助一些大型知名网站的SMTP服务器来发送邮件。

这里分享下使用163的SMTP服务器发送邮件的方法。

说明:使用163的SMTP服务器发送邮件会使得你开发系统所发送的邮件都使用163的邮箱地址作为发信人的地址,但这总比把邮件每次都发送到用户的垃圾邮件箱要强,因为如果你发送的邮件全是垃圾邮件,用户可能根本就不会去看你发送的是什么,就把邮件删掉了,这才是最糟糕的....

c#使用163 smtp服务器发送邮件的代码:
 

复制代码 代码示例:
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = "smtp.163.com";//使用163的SMTP服务器发送邮件
client.UsedefaultCredentials = true;
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.Credentials = new System.Net.NetworkCredential("abc", "*******");//163的SMTP服务器需要用163邮箱的用户名和密码作认证,如果没有需要去163申请个,
                                                                        //这里假定你已经拥有了一个163邮箱的账户,用户名为abc,密码为*******
System.Net.Mail.MailMessage Message = new System.Net.Mail.MailMessage();
Message.From = new System.Net.Mail.MailAddress("abc@163.com");//这里需要注意,163似乎有规定发信人的邮箱地址必须是163的,而且发信人的邮箱用户名必须和上面SMTP服务器认证时的用户名相同
//因为上面用的用户名abc作SMTP服务器认证,所以这里发信人的邮箱地址也应该写为abc@163.com
Message.To.Add("123456@gmail.com");//将邮件发送给Gmail
Message.To.Add("123456@qq.com");//将邮件发送给QQ邮箱
Message.Subject = "测试标体";
Message.Body = "测试邮件体";
Message.SubjectEncoding = System.Text.Encoding.UTF8;
Message.BodyEncoding = System.Text.Encoding.UTF8;
Message.Priority = System.Net.Mail.MailPriority.High;
Message.IsBodyHtml = true;
client.Send(Message);