如何使用C#发送电子邮件

2016-02-19 12:27 10 1 收藏

下面是个如何使用C#发送电子邮件教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

【 tulaoshi.com - 编程语言 】

前几天学生问怎样用C#发送电子邮件,网上文章很多,随手找了一篇,给学生,让他自己去看下。结果,搞了一天没有搞定,只好来仔细看一下。用C#发送电子邮件,网上介绍的很多文章都是使用SmtpClient,也有System.Web.Mail ,但是,System.Web.Mail 已经是不推荐使用的了。以下是在网上常见的一种发送电子邮件的代码:
Code
 1MailMessage MyEmilMessage=new MailMessage();
 2string attachFile;        //用于构造附件的字符串变量
 3
 4MyEmailMessage.From="Writer@sadf.com";
 5MyEmailMessage.To="Geter@dff.com;tome@asd.com";
 6MyEmailMessage.Subject="邮件发送的一个简单例子";
 7MyEmailMessage.body="猫王呼叫耗子,收到请回答!!!";
 8MyEmailMessage.BodyFormat=MailFormat.Text;
 9MyEmailMessage.Priority=MailPriority.High;
10
11//构造添加附件
12attachFile=@"D:testtest.txt";
13MailAttachment mailAttach=new MailAttachment(attachFile);
14MyEmailMessage.Attachments.Add(mailAttach);
15
16//发送电子邮件
17SmtpMail.SmtpServer="发送电子邮件的SMTP地址或者IP";// 指定smtp服务器
18SmtpMail.Send(MyEmailMessage);//发送电子邮件
19
这些代码基本上都没有任何错误,编译也都会通过,但是,如果使用这种方式发送,基本上可以保证,你的电子邮件发送不成功。然后,这里是缺少身份验证,而且比较麻烦就是这个身份验证。下面是我给学生写的一个示例:
Code
 1           string mailContent="邮件内容";
 2
 3            MailMessage msg = new System.Net.Mail.MailMessage();
 4            msg.To.Add("******@gmail.com"); //收件人
 5
 6            //发件人信息
 7            msg.From = new MailAddress("*****@gmail.com", "发送人姓名", System.Text.Encoding.UTF8);
 8            msg.Subject = "这是测试邮件";   //邮件标题
 9            msg.SubjectEncoding = System.Text.Encoding.UTF8;    //标题编码
10            msg.Body = mailContent; //邮件主体
11            msg.BodyEncoding = System.Text.Encoding.UTF8;
12            msg.IsBodyHtml = true;  //是否HTML
13            msg.Priority = MailPriority.High;   //优先级
14
15            SmtpClient client = new SmtpClient();
16            //设置GMail邮箱和密码 
17            client.Credentials = new System.Net.NetworkCredential("帐号@gmail.com", "密码");
18            client.Port = 587;
19            client.Host = "smtp.gmail.com";
20            client.EnableSsl = true;
21            object userState = msg;
22            try
23            {
24                client.Send(msg);
25                MessageBox.Show("发送成功");
26            }
27            catch (Exception ex)
28            {
29                MessageBox.Show(ex.Message, "发送邮件出错");
30            } 
31
这里的重点是邮箱身份验证那个地方,一定不能写错,否则,邮件发送不出去。到这里,似乎是大功告成了,但是,你会发现,相同的程序,在某些机器上可以发送成功,在某些机器上发送总是失败,是系统的原因?似乎不是,因为相同的系统,也是有的发送成功,有的发送失败。那是,框架的原因?似乎也不是。
这里就有一个很令人迷惑的现象出现,同样的系统,同样的框架,还是有的能发送成功,有的发送失败。失败的具体原因说是邮件标头编码有错误。那么,我们去掉Subject,不写,用默认的可以吗?也是一样的。这个问题很见鬼,于是使用EtherPeek进行抓包,发现了一个有趣的现象,这里有一个很重要的包:

这里要注意的是红色划线的地方,EHLO xqxPC,我的机器名就是xqxPC,问题就在这里啦,SmtpClient发送电子邮件的时候,需要发送一条EHLO指令到邮件服务器,参数是机器名,如果机器名使用中文,就发送不成功了。
 

简单总结一下:
1、使用SmtpClient发送电子邮件是很简单的,只要正确创建了MailMessage对象和SmtpClient就可以很容易的发送出去电子邮件。
2、如果电子邮件服务器需要身份验证,注意下面这句话:
smtpClient.Credentials = new System.Net.NetworkCredential("帐号@gmail.com", "密码");
3、机器名不能使用中文。

来源:http://www.tulaoshi.com/n/20160219/1600911.html

延伸阅读
标签: PHP
  <? *  名称:用Socket发送电子邮件 *  描述:本类实现了直接使用需要验证的SMTP服务器直接发送邮件,参考文章《用Socket发送电子邮件》作者:limodou *        此文章比较早,他是用不用验证SMTP服务器发送邮件,现在基本上SMTP服务器都需要验证了,所以这个文章里的类  &n...
SQL Server 2005的设置如下: 1.运行SQL Server Surface Area Configuration-Surface Area Configuration for features-选择Database Mail-选择Enable Database mail stored procedures 2.打开SQL Management Studio-Management-Database mail-Configure SMTP Settings. 3.打开SQL Server Agent-Operators-建立一个新的Operator 4.建立一个...
标签: PHP
  我经常听到这样一个问题:"我有一个从网站发来的合同。我如何给通过表单发送的电子邮件增加一个附件呢?" 首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PHP或其它的服务器端的脚本语言。当然你还要一个真正支持PHP的网站的账号。如果满足了这个前提,在你读完了本章后就可以用PHP发送带附件的电子邮件了。 ...
标签: Delphi
  Delphi让你发送Flash电子邮件完整源代码: {******Unit1.pas源代码内容如下******} unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Psock, NMsmtp; type TForm1 = class(TForm) Label1: TLabel; txtTo: TEdit; Label2: TLabel; txtFrom: TEdit; La...
标签: Delphi
  Delphi让你发送Flash电子邮件 无论Outlook XP还是最新的Foxmail 4.0,都只能在HTML格式的电子邮件中嵌入JPG、GIF格式图片,而音色俱佳的Flash动画却只能作为电子邮件附件发送给好友,你可曾感到遗憾? 经过一番实验探索,我使用Delphi终于实现了将Flash动画(.SWF格式)嵌入到电子邮件正文中发送的功能,Foxmail、Outlo...

经验教程

259

收藏

44
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部