asp.net 发邮件(asp发送邮件的几种方法)
一、完整的 asp.net邮件发送
1.补充知识
(1)POP3和SMTP服务器是什么?
简单点来说:POP3用于接收电子邮件,SMTP用于发送电子邮件。
(1)POP3具体指什么?
POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939定义
(2)SMTP具体是指什么?
SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于 TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器就是遵循 SMTP协议的发送邮件服务器。
2.System.Net.Mail
使用ASP.NET发送电子邮件,需要引用System.Net.Mail命名空间。System.Net.Mail命名空间包含用于将电子邮件发送到简单邮件传输协议(SMTP)服务器进行传送的类。
(1)命名空间下有三个比较主要的类:
MailMessage:提供属性和方法来创建一个邮件消息对象,即邮件内容。
Attachment:提供属性和方法来创建一个邮件附件对象,即邮件附件。
SmtpClient:将电子邮件传输到您指定用于邮件传送的 SMTP主机。
(2)MailMessage类:
From:发送邮件的地址
To:接收邮件的地址
Subject:邮件的标题
Priority:邮件的优先级(分别为为High,Low,Normal)
Attachments:电子邮件的数据的附件集合
Bcc:密送地址
Cc:抄送地址
Body:邮件正文
SubjectEncoding:电子邮件的主题内容使用的编码
IsBodyHtml:邮件正文是否为 Html格式的值
详细参考:MailMessage
(3)Attachment类:
详细参考:Attachment
(4)SmtpClient类:
DeliveryMethod:指定如何处理待发的电子邮件
Host:SMTP事务的主机的名称或 IP地址
Credentials:设置用于验证发件人身份的凭据
详细参考:SmtpClient
3.ASP.NET发送邮件两种方式
(1)通过邮件服务提供商的SMTP来发送邮件
首先需要注册对应服务提供商免费邮箱,因为你要使用邮件服务提供商的SMTP,他们需要对身份进行验证,这样可以避免产生大量的垃圾邮件。
有三个是重要的信息:SMTP服务器、用户名、密码。从网上收集了几个类,可以参考下。
#region
///<summary>
///发送邮件
///</summary>
///<param name="mailTo">要发送的邮箱</param>
///<param name="mailSubject">邮箱主题</param>
///<param name="mailContent">邮箱内容</param>
///<returns>返回发送邮箱的结果</returns>
public static bool SendEmail(string mailTo,string mailSubject,string mailContent)
{
//设置发送方的邮件信息,例如使用网易的smtp
string smtpServer="smtp.163.com";//SMTP服务器
string mailFrom="XXX@163.com";//登陆用户名
string userPassword="XXX";//登陆密码
//邮件服务设置
SmtpClient smtpClient=new SmtpClient();
smtpClient.DeliveryMethod= SmtpDeliveryMethod.Network;//指定电子邮件发送方式
smtpClient.Host= smtpServer;//指定SMTP服务器
smtpClient.Credentials= new System.Net.NetworkCredential(mailFrom, userPassword);//用户名和密码
//发送邮件设置
MailMessage mailMessage= new MailMessage(mailFrom, mailTo);//发送人和收件人
mailMessage.Subject= mailSubject;//主题
mailMessage.Body= mailContent;//内容
mailMessage.BodyEncoding= Encoding.UTF8;//正文编码
mailMessage.IsBodyHtml= true;//设置为HTML格式
mailMessage.Priority= MailPriority.Low;//优先级
try
{
smtpClient.Send(mailMessage);//发送邮件
return true;
}
catch(SmtpException ex)
{
return false;
}
}
(2)利用本机的SMTP虚拟服务器的SMTP来发送邮件
需要进行SMTP配置,还是第一种简单实用。
4.参考资料:常用邮件服务器
gmail.com:
POP3服务器地址:pop.gmail.com
SMTP服务器地址:smtp.gmail.com
qq.com:
POP3服务器地址:pop.qq.com
SMTP服务器地址:smtp.qq.com
163.com:
POP3服务器地址:pop.163.com
SMTP服务器地址:smtp.163.com
sina.com:
POP3服务器地址:pop3.sina.com.cn
SMTP服务器地址:smtp.sina.com.cn
yahoo.com:
POP3服务器地址:pop.mail.yahoo.com
SMTP服务器地址:smtp.mail.yahoo.com
sohu.com:
POP3服务器地址:pop3.sohu.com
SMTP服务器地址:smtp.sohu.com
china.com:
POP3服务器地址:pop.china.com
SMTP服务器地址:smtp.china.com
21cn.com:
POP3服务器地址:pop.21cn.com
SMTP服务器地址:smtp.21cn.com sina.com:
二、在ASP.NET中使用SmtpMail发送邮件
在ASP中就可以通过调用CDONTS组件发送简单邮件在ASP NET中自然也可以不同的是 Net Framework中将这一组件封装到了System Web Mail命名空间中
一个典型的邮件发送程序如下
<%@ Import Namespace= System Web Mail%><script runat= server>MailMessage mail=new MailMessage();mail From= service@brookes;mail To= brookes@brookes;mail BodyFormat=MailFormat Text;mail Body= a test*** tp mail;mail Subject= r u ok?;SmtpMail SmtpServer= localhost;SmtpMail Send(mail);</script>通常情况下系统调用IIS自带的默认SMTP虚拟服务器就可以实现邮件的发送但是也经常会遇到这样的错误提示
The server rejected one or more recipient addresses The server response was: Unable to relay for brookes@brookes产生这个错误的原因除了地址错误的可能外还有一个重要原因如上文提到的 IIS并不带有真正的邮件功能只是借用一个 SMTP虚拟服务器实现邮件的转发在MSDN中有如下提示
如果本地 SMTP服务器(包括在 Windows和 Windows Server中)位于阻塞任何直接 SMTP通信量(通过端口)的防火墙之后则需要查找网络上是否有可用的智能主机能用来中转发往 Internet的 SMTP消息智能主机是一个 SMTP服务器它能够中转从内部 SMTP服务器直接发送到 Internet的外出电子邮件智能主机应能同时连接到内部网络和 Internet以用作电子邮件网关
打开默认SMTP虚拟服务器-属性-访问-中继限制可以看到这种转发或者中继功能受到了限制在限制列表中添加需要使用此服务器的主机的IP地址就可以解决上文提到的问题
如果不使用IIS自带的SMTP虚拟服务器而使用其他真正的邮件服务器如IMail Exchange等常常遇到服务器需要寄送者身份验证的问题(ESMTP)在使用需要验证寄送者身份的服务器时会出现错误
The server rejected one or more recipient addresses The server response was: not local host ckocoo not a gateway以前在ASP中遇到这种问题没有什么解决的可能只能直接使用CDO组件(CDONTS的父级组件)
conf Fields[CdoConfiguration cdoSMTPAuthenticate] Value= CdoProtocolsAuthentication cdoBasic;conf Fields[CdoConfiguration cdoSendUserName] Value= brookes; conf Fields[CdoConfiguration cdoSendPassword] Value= XXXXXXX;在 Net Framework中显然对这一需求有了考虑在MailMessage组件中增加了Fields集合易增加ESMTP邮件服务器中的寄送者身份验证的问题不过这一方法仅适用于 Net Framework不适用于 Net Framework版本带有寄送者身份验证的邮件发送程序如下
<%@ Import Namespace= System Web Mail%><script runat= server>MailMessage mail=new MailMessage();mail From= service@brookes;mail To= brookes@brookes;mail BodyFormat=MailFormat Text;mail Body= a test*** tp mail;mail Subject= r u ok?;mail Fields Add(//schemas microsoft/cdo/configuration/*** tpauthenticate);//basic authenticationmail Fields Add(//schemas microsoft/cdo/configuration/sendusername brookes);//set your username heremail Fields Add(//schemas microsoft/cdo/configuration/sendpassword walkor);//set your password hereSmtpMail SmtpServer= lsg moon net;SmtpMail Send(mail);</script> lishixinzhi/Article/program/net/201311/15428三、急求asp.net发送邮件示例!!!
这是我在项目中所使用的发邮件的静态类,直接调用就可了
首先你得引入命名间
using System.Net.Mail;
using System.Net;
public static class ServiceMail
{
public static bool Send( string sendTo, string subject, string body)
{
return Send( sendTo, subject, body, false);
}
public static bool Send( string sendTo, string subject, string body, bool isHTML)
{
bool result= false;
SmtpClient client= new SmtpClient("mail.carhappy.com.cn");//邮件服务器
client.Credentials= new NetworkCredential("用于发送的Email","密码");
MailMessage msg= new MailMessage("service@carhappy.com.cn", sendTo);
msg.SubjectEncoding= msg.BodyEncoding= Encoding.GetEncoding("gb2312");
msg.IsBodyHtml= isHTML;
msg.Subject= subject;
msg.Body= body;
try
{
client.Send( msg);
result= true;
}
catch( Exception)
{
result= false;
}
return result;
}
}
需要注意的是你要根上面的注解,作出相应的改过,不知道你现在有没有企业邮局,如果没有你得想办法弄一个,否则是发不出去.
其实如果自己有服务器的话,建一个属性自己的公司的邮局也是一件很简单的事情
如果还不懂的话再问吧,祝你好运.