gost

导航

Asp.net 邮件传输

Asp.net 邮件传输(转)

因为项目需要,我本来做的是通过密码问题找回用户忘记的密码,结果客户要邮件自动发送的那种找回密码,还要用自己的邮件服务器。那么我怎么办?还要留个邮件服务器接口,好难做啊,让我真不知所措,我上网上查了一下午,也测试了一下午,邮件自动发送怎么做,我用了差不多4种方法了,试了又试,我是在Webconfig里配置,或是用比较流行的Jmail 。不知这算不算接口了,哎,邮件服务器配置我不会配,也没配过反正我就这样做了,呵呵,如果有做过邮件服务器配置的朋友看到我这个文章,希望能给我点提示,指点下我至于怎么换成自己的邮件服务器,又怎么配置,就请高手指点下我吧。

下面说下我总结办法:
第一种方法:

using System.Web.Mail;

public void sendMail()
{
MailMessage mail1 = new MailMessage();
mail1.Body="body here";
mail1.From="xxx@xxx.com";
mail1.To="yyy@yyy.com";
mail1.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1);
mail1.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername","xxx@xxx.com");
mail1.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword","********");
SmtpMail.SmtpServer="mail.xxx.com";
SmtpMail.Send(mail1);
}

以上添加的几个 Fields 是用来作SMTP发信认证的,如果你的发信服务器不需要认证,就可以省略这几句。


第二种方法:

using System.Net.Mail;

方法一:向单个地址发送邮件,不设置web.config文件
public void SendMail()
{
string mailto = "to@company.com";
string mailfrom = "from@company.com";
System.Net.NetworkCredential credential = new System.Net.NetworkCredential("from_username", "from_password");
SmtpClient smtp = new SmtpClient("smtp.company.com");
smtp.Credentials = credential;

MailMessage message = new MailMessage(mailfrom, mailto);
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "subject here";
message.Body = "body here";
smtp.Send(message);
message.Dispose();
}

方法二、向单个地址发送邮件,设置web.config文件
public void SendMail()
{
string mailto = "to@company.com";
string mailfrom = "from@company.com";

MailMessage message = new MailMessage(mailfrom, mailto);
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "subject here";
message.Body = "body here";
smtp.Send(message);
message.Dispose();
}

在web.config中添加如下:
<system.net>
<mailSettings>
<smtp from="from@company.com">
<network host="smtp.company.com" port="25" userName="from_username" password="from_password"/>
</smtp>
</mailSettings>
</system.net>

方法三:群发邮件,设置web.config文件
public void SendEmail()
{
string mailto = "to1@company.com,to2@company.com";
string title = "mail title here";
string content = "mail content here";

SmtpClient smtp = new SmtpClient();
MailMessage message = new MailMessage();
MailAddressCollection address = new MailAddressCollection();
string[] mailtos = mailto.Split(',');
for (int i = 0; i < mailtos.Length; i++)
{
address.Add(mailtos[i]);
}
foreach (MailAddress add in address)
{
message.To.Add(add);
}
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = title;
message.Body = content;
smtp.Send(message);
message.Dispose();
address.Clear();
}

在web.config中添加如下:
<system.net>
<mailSettings>
<smtp from="from@company.com">
<network host="smtp.company.com" port="25" userName="from_username" password="from_password"/>
</smtp>
</mailSettings>
</system.net>

采用以上方法,如果运行发信程序的计算机上装有邮件监控等杀毒软件,会有失败的警告,但实际已发送成功。解决办法是关闭杀毒软件的监控功能。

下面这个记得加上命名空间:

using System.Net;
using System.Net.Cache;
using System.Net.Mail;
using System.Net.Configuration;
using System.Web.Configuration;

适用的框架:asp.net framework 2.0/.net framework3.0/.net framework3.5

在web.config里设置.net framework的网络连接

 

XML/HTML代码
  1. <system.net>   
  2. </system.net>  

如下:设置stmp邮件发送的配置

 

XML/HTML代码
  1. //父元素:configuration(提供所有名称空间的配置)   
  2. <system.net>  
  3.      //这里还可以加入如下元素的设置   
  4.      //authenticationModules:设置用来验证WEB请求的模块   
  5.      //connectionManagement:设置WEB服务器最大连接数   
  6.      //defaultProxy:设置http的代理服务器   
  7.      //mailSettings:配置smtp   
  8.      //requestCaching:控制网络请求缓存机制   
  9.      //settings:为System.NET配置基本网络选项   
  10.      //<webRequestModules>元素(网络设置):指定模块从WEB服务器请求信息。   
  11.     <mailSettings>  
  12.        //deliveryMethod设置邮件发送方式,这里是网络形式   
  13.       <smtp deliveryMethod="Network" from="xxx@yyy.com" >  
  14.          //host邮件发送服务器   
  15.           //userName发送邮件时,用来进行身份验证的用户名   
  16.           //password如下验证时的密码   
  17.         <network host="smtp.yyy.com" userName="xxx@yyy.com" password="zzzzzzz" />  
  18.       </smtp>         
  19.     </mailSettings>  
  20. </system.net>  

 

以编程的方式获取web.config里的smtp配置

NetSectionGroup类

命名空间
System.Net.Configuration:为应用程序提供了以编程方式访问和更新配置文件System.Net命名空间下的设置的类。
程序集
System

定义:
public sealed class NetSectionGroup : ConfigurationSectionGroup

说明:
这个类提供了以程序方式访问存储在配置文件里的信息。
这个类和网络设置文档里的system.net元素(网络设置)相对应。
这部分的为下列名称空间提供配置设置:
System.Net
System.Net.Cache
System.Net.Mail

在程序里读取configuration/system.net/mailSettings/stmp配置

 

C#代码
  1. //NetSectionGroup在上面已经介绍过了   
  2. //GetSectionGroup从指定的配置文件获取system.net的配置   
  3. //WebConfigurationManager.OpenWebConfiguration   
  4. //打开应用程序根目录下的web.config生成System.Configuration.Configuration对象实例   
  5. SmtpSection cfg = NetSectionGroup.GetSectionGroup(WebConfigurationManager.OpenWebConfiguration("~/web.config")).MailSettings.Smtp;  

 

发送电子邮件

C#代码
  1. try{   
  2.    //实例化一个邮件消息对象   
  3.     MailMessage email = new MailMessage(cfg.From, mailto);   
  4.     email.IsBodyHtml = true;   
  5.     email.Body = "要发送的邮件内容,上面已经设置可以支持html内容,例外还可以通过指定email.BodyEncoding属性设置邮件内容的编码";   
  6.     email.Subject = "邮件主题,通过指定email.SubjectEncoding属性设置邮件主题的编码";   
  7.    //实例化smtp客服端对象,用来发送电子邮件   
  8.     System.Net.Mail.SmtpClient stmp = new SmtpClient(cfg.Network.Host);   
  9.    //设置是否需要发送是否需要身份验证,如果不需要下面的credentials是不需要的   
  10.     stmp.UseDefaultCredentials = true;      
  11.     stmp.Credentials = new System.Net.NetworkCredential(cfg.Network.UserName, cfg.Network.Password);   
  12.    //发送邮件   
  13.     stmp.Send(email);   
  14. }   
  15. catch (Exception ex)   
  16. {   

[转]:http://www.cnblogs.com/matrix/archive/2004/05/20/10495.aspx

 

现在的邮件发送大多数需要STMP的身份验证,
.NET里面的
System.Web.Util
System.Web.Mail
就不可以了.
我写这篇文章是希望对大家开发项目有所帮助,高手见笑了


先要去找一个组件,名字叫 JMail
大家可以去网上找一下,下载下来安装上.
将jmail.dll引用到工程中

 

private void Button1_Click(object sender, System.EventArgs e)
{
   
   jmail.Message Jmail=new jmail.Message();

   DateTime t=DateTime.Now;  
   String Subject=" From EMail .net";  
   String body="你好科学12:15";
   String FromEmail="ljt21@163.com";  
   String ToEmail="xiao-maolover@163.com";
   //Silent属性:如果设置为true,JMail不会抛出例外错误. JMail. Send( () 会根据操作结果返回true或false
   Jmail.Silent=true;
   //Jmail创建的日志,前提loging属性设置为true
   Jmail.Logging=true;
   //字符集,缺省为"US-ASCII"
   Jmail.Charset="GB2312";
   //信件的contentype. 缺省是"text/plain") : 字符串如果你以HTML格式发送邮件, 改为"text/html"即可。
   Jmail.ContentType="text/html";
   //添加收件人
   Jmail.AddRecipient(ToEmail,"","");
   Jmail.From=FromEmail;
   //发件人邮件用户名
   Jmail.MailServerUserName="ljt21" ;
   //发件人邮件密码
   Jmail.MailServerPassWord="****" ;
   //设置邮件标题
   Jmail.Subject=Subject;
   //邮件添加附件,(多附件的话,可以再加一条Jmail.AddAttachment( "c:\\test.jpg",true,null);)就可以搞定了。[注]:加了附件,讲把上面的Jmail.ContentType="text/html";删掉。否则会在邮件里出现乱码。
    Jmail.AddAttachment( "c:\\test.jpg",true,null);
   //邮件内容
   Jmail.Body=body+t.ToString();
   //Jmail发送的方法
   Jmail.Send("smtp.163.com",false);
   Jmail.Close() ;
}
这样就OK了..!
经过测试的,没有问题.


Asp.net 自动发送邮件的方法
今天有一个模块需要自动发送邮件的功能,就随便写了一个,记录一下作为积累。


一、首先需要配置web.config文件:


<system.net>
<mailSettings>
    <smtp from="Emailname">
        <network host="smtp.163.com" userName="Emailname" password="Emailpassword"
        port="25" defaultCredentials="false"/>
    </smtp>
</mailSettings>
</system.net>


二、然后编写发送邮件的函数:


//// <summary>
/// 邮件发送方法(带附件)
/// </summary>
/// <param name="mailto">收件人地址。如:receiver@163.com</param>
/// <param name="mailsubject">邮件标题</param>
/// <param name="mailbody">邮件正文</param>
/// <param name="mailFrom">邮件发送人地址。如:sender@163.com</param>
/// <param name="list">附件路径</param>
/// <returns></returns>
public bool MySendMail(string mailto, string mailsubject, string mailbody, string mailFrom, ArrayList list)
{
try
{
    //邮件发送人地址
    System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(mailFrom);
    //如test@163.com,初步测试,用test@sina.com不行,用163的邮件服务器,就必须用163邮箱的用户名
    //收件人地址
    System.Net.Mail.MailAddress to = new System.Net.Mail.MailAddress(mailto);//如test@tom.com
    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(from, to);
    mail.Subject = mailsubject;
    mail.Body = mailbody;
    //以下设置服务器
    System.Net.Mail.SmtpClient mySmth = new System.Net.Mail.SmtpClient();
    //以下为增加附件
    int count = list.Count;
    for (int i = 0; i < count; i++)
    {
      System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(list[i].ToString());
      mail.Attachments.Add(data);
    }
    mySmth.Send(mail);
    mail.Dispose();
    return true;
}
catch
{
    return false;
}
}


三、最后就是对函数的调用了:


//自动发送邮件
string mailSubject = "会员注册确认函";
string mailBody = "正文内容。";
string mailFrom = ConfigurationManager.AppSettings["SendMail"];
ArrayList List = new ArrayList();
List.Add(Server.MapPath(ConfigurationManager.AppSettings["SendMailText"]));
if (MySendMail(this.txtEmail.Text, mailSubject, mailBody, mailFrom, List))
{
...
//发送成功,进行相应处理
}
else
{
...
//发送失败,进行相应处理
return;
}

posted on 2011-09-24 13:18  gost  阅读(226)  评论(0编辑  收藏  举报