文:Ryo
通常我們會用JMail之類的第三方工具,來解決郵件的接收和發(fā)送等問題的。但是如果客戶的服務器是租用的不能安裝這些工具的時候,就可以考慮用.net2.0自己寫一個發(fā)送和接收郵件的程序。
首先要引用以下命名空間:
using System.Net;
using System.Net.Mail;
using System.Net.Sockets;
然后首先是發(fā)送郵件的程序,比較簡單,網(wǎng)上搜索到的也是大同小異:
MailAddress from = new MailAddress(發(fā)郵件的email地址);
MailAddress to = new MailAddress(收郵件的email地址);
MailMessage mailobj = new MailMessage(from, to);
mailobj.Subject = funcEncode(你的郵件標題);
注意,這里的funcEncode(見附文)是對文章的標題進行編碼轉換,因為郵件系統(tǒng)使用的是MIME協(xié)議,通常會用到QP編碼(標題等短字符)和base64編碼(文章內(nèi)容等長字符),如果不進行編碼轉換,收郵件的郵箱通常會接收中文郵件的時候出現(xiàn)亂碼,或者會被過濾而收不到。
mailobj.Body = “你的郵件正文”;
mailobj.IsBodyHtml = true;
mailobj.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
mailobj.Priority = MailPriority.High;
如果有附件:
if(aFileUpload.PostedFile.ContentLength > 0)
{
mailobj.Attachments.Add(new Attachment(aFileUpload.PostedFile.FileName));
}
根據(jù)自己的郵箱,選擇發(fā)郵件的SMTP:
SmtpClient smtp = new SmtpClient("smtp.163.com");
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(你的郵箱, 郵箱密碼);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(mailobj);
發(fā)郵件的程序基本完成了。
附:
//對標題進行編碼轉換
public static string funcEncode(string aStr)
{
string c = "";
aStr = System.Web.HttpUtility.UrlEncode(aStr, System.Text.Encoding.GetEncoding("GB2312"));
int j = 0;
for(int i = 0; i < aStr.Length; i++)
{
if(aStr[i] == '%')
{
c += "=";
j = i;
}
if(i - j < 3 && i - j > 0 && j != 0)
{
c += aStr[i].ToString().ToUpper();
}
else
{
if(aStr[i] != '%')
c += aStr[i];
}
}
//為了接收郵件不出現(xiàn)亂碼,我加了一個標頭,聲明用GB2312轉換而成的QP編碼。
return "=?GB2312?Q?" + c + "?=";
}
//以下就是在讀郵件的時候用的解碼。
public static string funcDecode(string aStr)
{
string d = "";
d = aStr.Replace("=", "%");
d = System.Web.HttpUtility.UrlDecode(d, System.Text.Encoding.GetEncoding("GB2312"));
return d;
}