在这篇文章里, 我们在尽可能广的范围广内讲解使用 ASP.NET发送电子邮件,包括选择电子邮件格式, 优先权, 附件和电子邮件内码。
现在让我们逐步探索使用ASP.NET发送电子邮件。我们将使用VB来说明例子, 但是我们最后的代码包括VB 和C # 。
Step1: 包括命名空间
System.Web.Util 命名空间在ASP.NET 里。这命名空间包含送电子邮件的所有必要对象。
对象是:
对象 总结
SmtpMail 代表邮件系统。发送电子邮件。
MailMessage 消息, 例如发信人地址, 收信人地址等。
MailFormat 格式,邮件的格式- HTML, 文本, 等
MailAttachment 代表电子邮件附件
MailEncoding enum 代表任一个内码譬如Base64 或UUencode 。
MailPriority enum 设置邮件优先权。价值: 高, 低, 正常
<% @Import Namespace = "System.Web.Util" %>
OK第一部已经完成了步骤2: MailMessage 对象示例
声明MailMessage对象。
Dim mailObj AS new MailMessage
MailMessage 对象属性:属性 描述
From 发信人的地址
To 收信人的地址
Subject 邮件主题
Body 邮件正文
cc 邮件副本接受人地址
bcc 邮件副本接受人地址比显示在邮件中(密件)
Priority 邮件的优先权
BodyEncoding 邮件内码
BodyFormat 邮件格式,html或文本
Attachments 邮件附件
以下的代码片断将展示MailMessage 对象。
mailObj.From = "[email protected]"
mailObj.To = Request.Form ("to")
mailObj.Subject = "subject of the mail"
mailObj.Body = "Message of the mail"发送邮件使用SmtpMail 对象Send 方法。以下代码片断被使用送邮件
SmtpMail.Send(mailObj)vb.net完整源代码
<%@page language="VB" %>
<%@Import Namespace="System.Web.Util" %>
<HTML>
<head>
<title>欢迎使用chenyangasp示例程序
</title>
</head>
<BODY>
<SCRIPT LANGUAGE="VB" RUNAT="server">
' 这个方法当提交时访问服务器
Sub SendMail (Obj As Object, E As EventArgs)
Dim mailObj AS new MailMessage
'设置邮件的发送及接收地址
mailObj.From = Request.Form("From")
mailObj.To = Request.Form("To")mailObj.Subject = "Subject Of the Mail"
mailObj.Body = "Body of the Mail"'html格式的邮件
mailObj.BodyFormat = MailFormat.Html
'设置为高级优先权
mailObj.Priority = MailPriority.High'为邮件添加附件
'注意:这里我们创建了一个mailattachment对象添加一个附件到邮件中
mailObj.Attachments.Add(new MailAttachment("c:\test.doc"))
'使用SmtpMail对象发送邮件
SmtpMail.Send(mailObj)
End Sub
</SCRIPT>
<asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/>
<FORM METHOD="post" RUNAT="server">
Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>C#完整源代码
<%@page language="C#" %>
<%@Import Namespace="System.Web.Util" %>
<HTML>
<head>
<title>欢迎使用chenyangasp示例程序
</title>
</head>
<BODY><SCRIPT LANGUAGE="C#" RUNAT="server">
// 这个方法当提交时访问服务器
public void SendMail (Object Obj, EventArgs E)
{MailMessage mailObj = new MailMessage();// 设置邮件的发送及接收地址
mailObj.From = Request.Form("From");
mailObj.To = Request.Form("To");mailObj.Subject = "Subject Of the Mail";
mailObj.Body = "Body of the Mail";// html格式的邮件
mailObj.BodyFormat = MailFormat.Html;
// 设置为高级优先权
mailObj.Priority = MailPriority.High;// 为邮件添加附件
// 注意:这里我们创建了一个mailattachment对象添加一个附件到邮件中
mailObj.Attachments.Add(new MailAttachment("c:\\test.doc"));// 使用SmtpMail对象发送邮件
SmtpMail.Send(mailObj);
}
</SCRIPT><asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/><FORM METHOD="post" RUNAT="server">Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>
现在让我们逐步探索使用ASP.NET发送电子邮件。我们将使用VB来说明例子, 但是我们最后的代码包括VB 和C # 。
Step1: 包括命名空间
System.Web.Util 命名空间在ASP.NET 里。这命名空间包含送电子邮件的所有必要对象。
对象是:
对象 总结
SmtpMail 代表邮件系统。发送电子邮件。
MailMessage 消息, 例如发信人地址, 收信人地址等。
MailFormat 格式,邮件的格式- HTML, 文本, 等
MailAttachment 代表电子邮件附件
MailEncoding enum 代表任一个内码譬如Base64 或UUencode 。
MailPriority enum 设置邮件优先权。价值: 高, 低, 正常
<% @Import Namespace = "System.Web.Util" %>
OK第一部已经完成了步骤2: MailMessage 对象示例
声明MailMessage对象。
Dim mailObj AS new MailMessage
MailMessage 对象属性:属性 描述
From 发信人的地址
To 收信人的地址
Subject 邮件主题
Body 邮件正文
cc 邮件副本接受人地址
bcc 邮件副本接受人地址比显示在邮件中(密件)
Priority 邮件的优先权
BodyEncoding 邮件内码
BodyFormat 邮件格式,html或文本
Attachments 邮件附件
以下的代码片断将展示MailMessage 对象。
mailObj.From = "[email protected]"
mailObj.To = Request.Form ("to")
mailObj.Subject = "subject of the mail"
mailObj.Body = "Message of the mail"发送邮件使用SmtpMail 对象Send 方法。以下代码片断被使用送邮件
SmtpMail.Send(mailObj)vb.net完整源代码
<%@page language="VB" %>
<%@Import Namespace="System.Web.Util" %>
<HTML>
<head>
<title>欢迎使用chenyangasp示例程序
</title>
</head>
<BODY>
<SCRIPT LANGUAGE="VB" RUNAT="server">
' 这个方法当提交时访问服务器
Sub SendMail (Obj As Object, E As EventArgs)
Dim mailObj AS new MailMessage
'设置邮件的发送及接收地址
mailObj.From = Request.Form("From")
mailObj.To = Request.Form("To")mailObj.Subject = "Subject Of the Mail"
mailObj.Body = "Body of the Mail"'html格式的邮件
mailObj.BodyFormat = MailFormat.Html
'设置为高级优先权
mailObj.Priority = MailPriority.High'为邮件添加附件
'注意:这里我们创建了一个mailattachment对象添加一个附件到邮件中
mailObj.Attachments.Add(new MailAttachment("c:\test.doc"))
'使用SmtpMail对象发送邮件
SmtpMail.Send(mailObj)
End Sub
</SCRIPT>
<asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/>
<FORM METHOD="post" RUNAT="server">
Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>C#完整源代码
<%@page language="C#" %>
<%@Import Namespace="System.Web.Util" %>
<HTML>
<head>
<title>欢迎使用chenyangasp示例程序
</title>
</head>
<BODY><SCRIPT LANGUAGE="C#" RUNAT="server">
// 这个方法当提交时访问服务器
public void SendMail (Object Obj, EventArgs E)
{MailMessage mailObj = new MailMessage();// 设置邮件的发送及接收地址
mailObj.From = Request.Form("From");
mailObj.To = Request.Form("To");mailObj.Subject = "Subject Of the Mail";
mailObj.Body = "Body of the Mail";// html格式的邮件
mailObj.BodyFormat = MailFormat.Html;
// 设置为高级优先权
mailObj.Priority = MailPriority.High;// 为邮件添加附件
// 注意:这里我们创建了一个mailattachment对象添加一个附件到邮件中
mailObj.Attachments.Add(new MailAttachment("c:\\test.doc"));// 使用SmtpMail对象发送邮件
SmtpMail.Send(mailObj);
}
</SCRIPT><asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/><FORM METHOD="post" RUNAT="server">Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>
解决方案 »
- 怎样给一个客户端图片控件加单击事件???
- 请教个问题,关于WebClient post请求的问题
- 通过DefaultView.Sort对网格排序的问题
- 2.0的项目要如何布署啊.
- 怎么做删除确认(VB.net)?
- (求助)我用ASP.NET写的第一个邮件发送程序遇到的问题
- sql语句问题
- 这样的dll文件可以用吗??
- 大家看看这个网站值多少钱????????????????????
- 在VS.NET设置断点的问题?--------------------------------
- Microsoft .NET 的企业解决方案模式,那有电子文档下载,谢谢!!!
- 如果不用VS.NET在一个页面里引用32位的DLL文件?
http://www.yesky.com/20010926/198788.shtml
行 6: MailMessage mailObj = new MailMessage();
我的是vs2003+windows2003
防火墙的smtp也开了,别人一样的代码都可以发,我的机器就不行,晕哦
哪位高手能说说哪里出了问题啊
using System.Net;
using System.Net.Sockets;
using System.Configuration;
using System.Text;
using System.Collections;
using System.Xml;namespace Project1
{
/// <summary>
// Class1 的摘要说明。 /// </summary>
public class NewSendMail
{
private TcpClient tcpClt;
private NetworkStream networkStm;
private Hashtable rightCodeHT = new Hashtable();
private string smtpServerName;
private int smtpServerPort;
private string userName;
private string password;
private string to;
private string from;
private string fromName;
private string charset;
private string recipientName;
private string subject;
private string body;
private string priority; public NewSendMail(string strToName,string strTo,string strBody)
{
to = strTo;
recipientName = strToName;
body = strBody;
smtpCodeAdd();
} public NewSendMail()
{
smtpCodeAdd();
}
private bool initialize()
{
try
{
smtpServerName = ConfigurationSettings.AppSettings["smtpServerName"];
smtpServerPort = Convert.ToInt32(ConfigurationSettings.AppSettings["smtpServerPort"]);
userName = ConfigurationSettings.AppSettings["userName"];
password = ConfigurationSettings.AppSettings["password"];
from = ConfigurationSettings.AppSettings["from"];
fromName = ConfigurationSettings.AppSettings["fromName"];
charset = ConfigurationSettings.AppSettings["charset"];
}
catch
{
return false;
}
priority = "Normal";
subject = "欢迎您使用";
//smtpCodeAdd();
return true;
} private string Base64Encode(string str)
{
byte[] barray;
barray=Encoding.Default.GetBytes(str);
return Convert.ToBase64String(barray);
} private void smtpCodeAdd()
{
rightCodeHT.Add("220","");
rightCodeHT.Add("250","");
rightCodeHT.Add("251","");
rightCodeHT.Add("354","");
rightCodeHT.Add("221","");
rightCodeHT.Add("334","");
rightCodeHT.Add("235","");
} private bool sendCommand(string str)
{
byte[] writeBuffer;
writeBuffer = Encoding.Default.GetBytes(str);
try
{
networkStm.Write(writeBuffer, 0, writeBuffer.Length);
}
catch
{
return false;
}
return true;
} private bool isRight()
{
int streamSize;
byte[] readBuffer = new byte[1024];
string returnValue = "";
try
{
streamSize = networkStm.Read(readBuffer, 0, readBuffer.Length);
}
catch
{
return false;
}
if (streamSize != 0)
returnValue = Encoding.Default.GetString(readBuffer, 0, streamSize);
if(rightCodeHT[returnValue.Substring(0,3)] == null)
return false;
return true;
} public bool sendMail()
{
if (!initialize())
return false;
try
{
tcpClt = new TcpClient(smtpServerName, smtpServerPort);
}
catch
{
return false;
}
networkStm = tcpClt.GetStream();
if (!isRight())
return false; string[] sendBuffer;
string enter = "\r\n"; sendBuffer = new String[9];
sendBuffer[0] = "EHLO " + smtpServerName + enter;
sendBuffer[1] = "AUTH LOGIN" + enter;
sendBuffer[2] = Base64Encode(userName) + enter;
sendBuffer[3] = Base64Encode(password) + enter;
sendBuffer[4] = "MAIL FROM:<" + from + ">" + enter;
sendBuffer[5] = "RCPT TO:<" + to +">" + enter;
sendBuffer[6] = "DATA" + enter;
sendBuffer[7] = "From:" + fromName + "<" + from +">" + enter;
sendBuffer[7] += "To:=?" + charset.ToUpper() + "?B?"
+ Base64Encode(recipientName) + "?=" + "<" + to + ">" + enter;
sendBuffer[7] += "Subject:" + "=?" + charset.ToUpper() + "?B?"
+ Base64Encode(subject) + "?=" + enter;
sendBuffer[7] += "X-Priority:" + priority + enter;
sendBuffer[7] += "X-MSMail-Priority:" + priority + enter;
sendBuffer[7] += "Importance:" + priority + enter;
sendBuffer[7] += "X-Mailer: Huolx.Pubclass" + enter;
sendBuffer[7] += "MIME-Version: 1.0" + enter;
sendBuffer[7] += "Content-Type: multipart/mixed;" + enter;
sendBuffer[7] += " boundary=\"----=_NextPart_000_00D6_01C29593.AAB31770\"" + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770" + enter;
sendBuffer[7] += "Content-Type: text/html;" + enter;
sendBuffer[7] += " charset=\"" + charset.ToLower() + "\"" + enter;
sendBuffer[7] += "Content-Transfer-Encoding: base64" + enter + enter;
sendBuffer[7] += Base64Encode(body) + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770--" + enter + enter;
sendBuffer[7] += enter + "." + enter;
sendBuffer[8] = "QUIT" + enter; int i; for (i=0;i<sendBuffer.Length;i++)
{
if (!sendCommand(sendBuffer[i]))
return false;
if (!isRight())
return false;
} tcpClt.Close();
networkStm.Close(); return true;
} public bool AllEmail(string AllName,string AllEmail,string SendFromName,string SendFromEmail,string Subject,string strBody,string split)
{
string[] TemEmail;
string[] TemName;
TemEmail = AllEmail.Split(Convert.ToChar(split));
TemName = AllName.Split(Convert.ToChar(split));
if(TemEmail.Length != TemName.Length)//收件人的邮箱地址和用户名不等长
return false;
for(int i=0;i<TemEmail.Length;i++)
sendMail(TemName[i],TemEmail[i],SendFromName,SendFromEmail,Subject,strBody); return true;
} public bool sendMail(string SendToName,string SendToEmail,string SendFromName,string SendFromEmail,string Subject,string strBody)
{
if (!initialize())
return false;
try
{
tcpClt = new TcpClient(smtpServerName, smtpServerPort);
}
catch
{
return false;
}
networkStm = tcpClt.GetStream();
if (!isRight())
return false; string[] sendBuffer;
string enter = "\r\n"; sendBuffer = new String[9];
sendBuffer[0] = "EHLO " + smtpServerName + enter;
sendBuffer[1] = "AUTH LOGIN" + enter;
sendBuffer[2] = Base64Encode(userName) + enter;
sendBuffer[3] = Base64Encode(password) + enter;
if(MailAddressIsArt(SendFromEmail) || MailAddressIsArt(SendToEmail))
{
sendBuffer[4] = "MAIL FROM:<" + SendFromEmail + ">" + enter;
sendBuffer[5] = "RCPT TO:<" + SendToEmail +">" + enter;
}
if (!MailAddressIsArt(SendFromEmail) && !MailAddressIsArt(SendToEmail))
{
SendFromEmail="[email protected]";
sendBuffer[4] = "MAIL FROM:<" + SendFromEmail + ">" + enter;
sendBuffer[5] = "RCPT TO:<" + SendToEmail +">" + enter;
}
sendBuffer[6] = "DATA" + enter;
sendBuffer[7] = "From:" + SendFromName + "<" + SendFromEmail +">" + enter;
sendBuffer[7] += "To:=?" + charset.ToUpper() + "?B?"
+ Base64Encode(SendToName) + "?=" + "<" + SendToEmail + ">" + enter;
sendBuffer[7] += "Subject:" + "=?" + charset.ToUpper() + "?B?"
+ Base64Encode(Subject) + "?=" + enter;
sendBuffer[7] += "X-Priority:" + priority + enter;
sendBuffer[7] += "X-MSMail-Priority:" + priority + enter;
sendBuffer[7] += "Importance:" + priority + enter;
sendBuffer[7] += "X-Mailer: Huolx.Pubclass" + enter;
sendBuffer[7] += "MIME-Version: 1.0" + enter;
sendBuffer[7] += "Content-Type: multipart/mixed;" + enter;
sendBuffer[7] += " boundary=\"----=_NextPart_000_00D6_01C29593.AAB31770\"" + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770" + enter;
sendBuffer[7] += "Content-Type: text/html;" + enter;
sendBuffer[7] += " charset=\"" + charset.ToLower() + "\"" + enter;
sendBuffer[7] += "Content-Transfer-Encoding: base64" + enter + enter;
sendBuffer[7] += Base64Encode(strBody) + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770--" + enter + enter;
sendBuffer[7] += enter + "." + enter;
sendBuffer[8] = "QUIT" + enter; int i; for (i=0;i<sendBuffer.Length;i++)
{
if (!sendCommand(sendBuffer[i]))
return false;
if (!isRight())
return false;
} tcpClt.Close();
networkStm.Close(); return true;
}
}}
......
Dim mailObj As New MailMessage()
SmtpMail.SmtpServer = "服務器地址"
mailObj.From = "發送人"
mailObj.To = "接收人"
'mailObj.Bcc = ""
'mailObj.Cc = ""
mailObj.Subject = "標題"
mailObj.Body = " 内容 "
mailObj.BodyFormat = MailFormat.Html
mailObj.Priority = MailPriority.High
'mailObj.Attachments.Add(New MailAttachment("d:\Green.gif"))
SmtpMail.Send(mailObj)
ftp://211.162.77.132中找,用户名和密码见www.uncj.net论坛本人保证是你见到过最简单的解决办法,一定比什么JMAIL强!比mail类强了不知多少倍!比如说,MAIL不能支持附件等!