LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

全面介绍C#实现简单的SmtpClient及SSL发送带附件邮件---Good!

admin
2017年11月7日 21:12 本文热度 12516

SMTP(Simple Mail Transport Protocol)简单邮件传输协议。在.NET Frameword类库中提供SmtpClient类(System.Net.Mail),她提供了一个轻型方法来发送SMTP电子邮件信息。SmtpClient类中的Bcc属性是用来指定此电子邮件抄送的收件人的集合,这就意味着可以为每个邮件制定多个收件地址。Attachmenty属性也是一个集合,可以使用它为邮件添加多个附件。 发送邮件中用的其他类主要还有:

1. Attachment类,表示文件附件,它允许将文本、流、文件附加到电子邮件中。

2. MailAddress类,表示邮件地址。

3. MailMessage类,表示电子邮件。

            string host = "smtp.163.com";//   邮件服务器smtp.163.com表示网易邮箱服务器

            string userName = "15764226619@163.com";   //发送端账号

            string password = "password";   //发送端密码(这个客户端重置后的密码)

            SmtpClient mailClient = new SmtpClient(host);

            //SmtpClient mailClient = new SmtpClient(host, 25);

            //mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式

            //Credentials登陆SMTP服务器的身份验证.

            //mailClient.EnableSsl = false; //不启用ssl加密

            mailClient.UseDefaultCredentials = true;

            mailClient.Credentials = new NetworkCredential(userName, password);

            //test@qq.com发件人地址、test@tom.com收件人地址

            MailMessage message = new MailMessage(new MailAddress("test@qq.com"),new MailAddress("test@tom.com"));

            //MailMessage message = new System.Net.Mail.MailMessage();  //另外一种方式创建发信连接,可以支持多人收信

            //message.From = new MailAddress(userName, "账户名");  //发信邮件账户

            //message.From = new MailAddress(userName, "账户名", System.Text.Encoding.UTF8);  //发信邮件账户,3个参数分别是发件人邮箱,发件人姓名,编码

            //message.To.Add(new MailAddress("11@qq.com")); //收信主送邮件账户,可接受多个邮件地址,用逗号分隔即可,或者反复增加本行也可以接收多个收信人

            //message.To.Add(new MailAddress("11@qq.com", "账户名")); //收信主送邮件账户,含账户名

            //message.CC.Add(new MailAddress("21@qq.com")); //收信抄送邮件账户,可接受多个邮件地址,用逗号分隔即可,或者反复增加本行也可以接收多个收信人

            //message.Bcc.Add(new MailAddress("tst@qq.com")); //可以添加多个收件人,用逗号分隔即可

            //message.IsBodyHtml = true;

            //message.SubjectEncoding = System.Text.Encoding.UTF8;  //邮件主题编码,采用UTF8格式

            //message.BodyEncoding = System.Text.Encoding.UTF8;

            //message.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");  //邮件内容编码,采用GB2312格式

            //message.Priority = System.Net.Mail.MailPriority.High;

            message.Body = "Hello Word! 邮件发送测试";    //邮件内容

            message.Subject = "this is a test";   //邮件主题

            //Attachment 附件

            Attachment att = new Attachment(@"C:/hello.txt");

            message.Attachments.Add(att);   //添加附件

            //Attachment att1 = new Attachment(@"C:/welcome.txt");

            //message.Attachments.Add(att1);   //继续添加附件

            Console.WriteLine("Start Send Mail....");

            //发送....

            mailClient.Send(message);

            Console.WriteLine("Send Mail Successed");

            Console.ReadLine();

注意上面的发件人地址和发信人账号要一致,否则通不过验证。OK,这样就可以成功发送邮件了。


该文章在 2017/11/8 11:42:01 编辑过

全部评论4

admin
2017年11月7日 22:37
//C#多个邮件地址是否合法、重复、以及字符串首尾去逗号代码及其他处理string addresses = ; AddressList = AddressList.Replace(,, ,).Replace(;, ,).Replace(;, ,).Trim();string[] strArray = AddressList.Split(new char[] ); int length = strArray.Length; for (int i = 0; i < length; i++) } if (addresses.EndsWith(,)) if (addresses.StartsWith(,)) mailMessage.To.Add(addresses); 该评论在 2017/11/7 22:37:55 编辑过
admin
2017年11月7日 22:44
我今天测试了一下,不管是什么免费邮箱的smtp,一般每天都会有邮件发送数量的上限,163一般为50封,qq一般为100f封,超过了这个上限当天就不允许再发送邮件了。QQ邮箱不是你想进就进的。这种东西不是头脑一热就能成的,期望的与实际相差很远。做什么项目都应该先考虑好,不要盲目的弄。 1.QQ邮箱那边有内容检测,广告、链接、图片尽量少带; 2.IP频繁问题,163会以你自己真实的IP进行发送(猜测,如果是服务器代发,那就和发件人有关); 3.发件人频繁问题(发多了拉黑); 4.域名黑名单,ip黑名单(发多了拉黑,举报核实拉黑); 5.被举报可能被系统拦截(可以点击我的信息->收信查询->查看收件状态); 6.个别短号的QQ邮箱是发不进的,切记。短号的拦截方式和长号的有些区别,如:666222与789456123的拦截方式不同。 其他可以尝试的方法:不借助第三方SMTP服务器,在本机安装SMTP服务器,比如免费的Free SMTP Server。装完之后无需任何设置,启动SMTP服务器,再运行上面的程序,一切正常。但是如果使用本地的SMTP服务器(比如本机IIS的SMTP服务器)发送邮件,会被许多大型网站的邮箱当做垃圾邮件来处理,原因是本地SMTP服务器的地址并不为人所知,发送的邮件理所当然会被当做来历不明的邮件,所以一般要借助一些大型知名网站的SMTP服务器来为我们发送邮件。 该评论在 2017/11/7 23:33:42 编辑过
admin
2017年11月7日 22:58
//异步执行,带回调效果演示SmtpClientsmtp=newSmtpClient();smtp.Host=mailServer.Host;smtp.Port=25;smtp.EnableSsl=false;smtp.UseDefaultCredentials=false;smtp.DeliveryMethod=SmtpDeliveryMethod.Network;smtp.Credentials=newNetworkCredential(mailServer.Email,mailServer.Pwd);smtp.EnableSsl=true;smtp.SendCompleted+=newSendCompletedEventHandler(smtp_SendCompleted);MailAddressfrom=newMailAddress(mailServer.Email,小王);MailAddressto=newMailAddress(toMail,toMail.Substring(0,toMail.IndexOf(@)));MailMessagemail=newMailMessage(from,to);mail.DeliveryNotificationOptions=DeliveryNotificationOptions.OnFailure;mail.IsBodyHtml=true;mail.Priority=MailPriority.High;mail.ReplyTo=from;mail.Sender=from;mail.Subject=title;mail.Body=content;mail.BodyEncoding=Encoding.Default;smtp.SendAsync(mail,toMail);下面是SendAsync函数的回调函数:voidsmtp_SendCompleted(objectsender,AsyncCompletedEventArgse)elseif(lvMailTo.InvokeRequired)smtp.Dispose();_event.Set();} 该评论在 2017/11/7 23:52:14 编辑过
admin
2017年11月7日 23:9
使用C#和.Net通过SMTP发送邮件详解 到目前为止,发电子邮件已经不是什么新闻了,.Net中包含邮件客户端并不足为奇。一个老的编程事实任然有效:所有程序将扩大到包括最终发送(接收)的电子邮件。因此,如何增加电子邮件到您的程序?此帖探讨我们如何能够使用System.Mail.SmtpClient发送格式化电子邮件。有许多可供选择的选项,我们将探讨其中的大多数。十五年以后事情变得相当容易.发送电子邮件最直接的就是调用一些基本的库函数和.Net的一些固定的实现。快速发送电子邮件 如果您迫不及待的话,可以使用下面带有4字符串参数的 构造函数创建一个简单的邮件。 // public client.Send(string from,string to,string subject,string body) using System.Net.Mail; SmtpClient client = new SmtpClient(); client.Send(martijn@seamana.cn,test@seamana.cn,Testing!,Ifthis break again,.. I won''t know what to do); 在上面的例子中的电子邮件使用系统的NET框架默认设置为发现的发送的。如果你对什么自己系统作为默认的SMTP服务器感到好奇,您可以查询SmtpClient.Host Console.WriteLine(Default SMTP Server: ,client.Host); 请注意,有可能.NET libraries是无法制订SMTP主机,当您尝试发送电子邮件会失败并出现System.InvalidOperationException ( SMTP主机未指定)的异常。 发送一封合适的邮件 一个基本的电子邮箱是一个发件人,一个或多个收件人的邮件正文和一个或多个附件组成的。当然,电子邮件可能是一种过时的俄罗斯字体的编码。 MailAddress toUser = new MailAddress(martijn@seamana.cn); MailAddress toUser2 = new MailAddress(martijn@seamana.cn,MartijnDijksterhuis); MailAddress toUser3 = new MailAddress(martijn@seamana.cn,MartijnDijksterhuis, System.Text.Encoding.UTF8); 名字中不包括任何特殊的字符,所以指定默认的UTF - 8编码。 发送一封只有单一的发送和接收者的电子邮件 如果您的电子邮件只包含一个单一的发送者和一个接收者,MailMessage ( MailAddress From, MailAddress To)构造函数提供了所有您所需要的。它创建一个新的电子邮件的结构,分配发送者和接收者的构造方法。 MailAddress toUser = new MailAddress(myfriend@yahoo.com); MailAddress fromUser = new MailAddress(aishijie36@hotmail.com); MailMessage msg= new MailMessage(fromUser,toUser); 增加更多相同的电子邮件的接收者 一个单一的收件人可能是不够的。不要担心,您可以添加许多人到你的电子邮件,只要你想。 msg.To.Add( new MailAddress(second_to@seamana.cn) ); msg.CC.Add( new MailAddress(first_cc@seamana.cn) ); msg.CC.Add( new MailAddress(second_cc@seamana.cn) ); msg.Bcc.Add( new MailAddress(first_bcc@seamana.cn) ); 设置电子邮件主题和内容 设置电子邮件的主题,并不难,只需通过Msg.Subject设置它 。如果你可以使用如Unicode的其他方式编码。 msg.Subject = 我的心太乱 msg.SubjectEncoding = Encoding.GetEncoding(big5); 以非常类似的方式来设置邮件正文 msg.Body = Dear Customer, + Environment.NewLine + Environment.NewLine; msg.Body += Because of repeated violations of our terms and conditions we had no choice but to; msg.Body += terminate your account with us. + Environment.NewLine + Environment.NewLine; msg.Body += The Management; msg.BodyEncoding = System.Text.Encoding.UTF8; 添加附件到电子邮件 电子邮件可以拥有一个以上的附件,每个附件的继承于System.Net.Mail.Attachment类。您可以通过调用 Attachments.Add ( ) 把它们添加到附件容器。 using System.Net.Mime; Attachment firstAttachment = new Attachment(document.doc,MediaTypeNames.Application.Octet); MailMessage msg= new MailMessage(fromUser,toUser); msg.Attachments.Add(firstAttachement); 第一个参数传递给构造函数是包含附件的路径。如果没有完整的路径,给出了当前的工作目录。该文件类型的在System.Net.Mime中定义 -可用选项有: MediaTypeNamesApplicationOctet PDF RTF Soap Zip ImageGif JPEG Tiff TextHTML Plain RichText XML 如果该类型的文件未指定使用MediaTypesNames.Application.Octet ,怎显示数据没有解释。 添加自定义电子邮件标题到您的电子邮箱 Msg.Header属性允许查询和添加.NET框架所设定的电子邮件标题。全新的电子邮件将只包含一个标题: Mine: 1.0 。 MailMessage Msg = new MailMessage(newMailAddress(martijn@seamana.cn),newMailAddress(martijn@seamana.cn)); // Add a custom header to the e-mail Msg.Headers.Add(X-Header,2.0); // Display all the message headers. string[] Keys = Msg.Headers.AllKeys; foreach (string s in Keys) Console.WriteLine(: , s,Msg.Headers[s]); 用SmtpClient发送电子邮件 通过the SmtpClient class发送电子邮件的艰巨工作实际只需要下面两行代码: SmtpClient client = new SmtpClient(); client.Send(Msg); SmtpFailedRecipientsException: The message could not be delivered to one or more of the recipients in To, CC, or Bcc. SmtpException : Connection failed, authentication failed or a time-out ArgumentNullException / ArgumentOutOfRangeException / InvalidOperationException : Something wrong with the input fields of the e-mail 如果您没有指定任何参数,SmtpClient默认构造函数将查找使用.NET环境。 SMTP服务器 您可以通过第二构造方法指定一个特定的服务器和可选端口 SmtpClient client = new SmtpClient(mail.dijksterhuis.org,3000); 上述SmtpClient.Send是阻塞调用-当电子邮件传送时您的应用程序应停止。当然也有一个异步调用: SmtpClient.SendAsync。 使用SmtpClient.SendAsync是多做一点工作。如何做到这一点请看以下示例: using System;using System.Net.Mail;using System.Threading;using System.ComponentModel;namespace SnmpMailer] Send canceled., token);// Did an error occur during the send?if (arg.Error != null)Console.WriteLine([] , token, arg.Error.ToString());elseConsole.WriteLine(Message sent succesfully!);// Release the main threadmailSendSemaphore.Release();}public static void Main(string[] args),Deliverator.Host);// Specify the call back functionDeliverator.SendCompleted += new SendCompletedEventHandler(MailSendCallback);// For an asyncronous call we can pass a token to help us determine//the message being sendDeliverator.SendAsync(Msg,Msg ID 1212);// Because we have little else to do, we set a semaphore and waitmailSendSemaphore.WaitOne();Console.WriteLine(Mail delivery finished);}}} 该评论在 2017/11/8 0:02:31 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号