.net jMail郵件發(fā)送(含抄送、密送、多發(fā)、日志記錄)實例代碼
jmail是一個第三方郵件操作組件,通常位于web服務(wù)器端,實現(xiàn)收郵件及發(fā)郵件功能(客戶端用Foxmail這類就很好了)??梢岳盟p松實現(xiàn)發(fā)郵件、抄送、密送、多發(fā)、日志記錄及收郵件功能。本章要講的,就是:發(fā)郵件、抄送、密送、多發(fā)、日志記錄。
一、組件準(zhǔn)備
下載JMail44_pro并安裝(記下安裝路徑)
找到安裝路徑,將其中的jmail.dll復(fù)制到項目中
二、核心發(fā)送代碼
新建MailAPI.cs,并輸入以下代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using jmail;
using System.IO;
namespace JmailDemo
{
public class MailAPI
{
/// <summary>
/// 郵件發(fā)送
/// </summary>
/// <param name="zt">主題</param>
/// <param name="zw">正文</param>
/// <param name="getMail">收件人地址</param>
/// <param name="fromMail">發(fā)件人地址,多個地址間用英文逗號或分號隔開</param>
/// <param name="csMail">抄送人地址,多個地址間用英文逗號或分號隔開</param>
/// <param name="msMail">密送人地址,多個地址間用英文逗號或分號隔開</param>
/// <param name="fjMail">附件服務(wù)器目錄,多個服務(wù)器端目錄之間以英文逗號或分號隔開</param>
public void Send(string zt, string zw, string getMail, string fromMail, string csMail, string msMail, string fjMail)
{
jmail.Message jmessage = new Message();
//Jmail系統(tǒng)配置
jmessage.Charset = "GB2312";
jmessage.Encoding = "base64";
//配置郵件信息
jmessage.Subject = zt.Trim();//郵件主題
jmessage.HTMLBody = zw;//郵件正文
//配置收件人信息
string[] sj = getMail.Split(',', ';');
if (sj.Length > 1)
{
for (int i = 0; i < sj.Length; i++)
{
jmessage.AddRecipient(sj[i], "", "");//收件人郵箱地址
}
}
else
{
jmessage.AddRecipient(sj[0], "", "");
}
//配置抄送人信息
string[] cs = csMail.Split(',', ';');
if (cs.Length > 1)
{
for (int i = 0; i < cs.Length; i++)
{
jmessage.AddRecipientCC(cs[i]);
}
}
else
{
jmessage.AddRecipient(cs[0], "", "");
}
//配置密送人信息
string[] ms = msMail.Split(',', ';');
if (ms.Length > 1)
{
for (int i = 0; i < ms.Length; i++)
{
jmessage.AddRecipientBCC(ms[i]);
}
}
else
{
jmessage.AddRecipient(ms[0], "", "");
}
//配置發(fā)件人信息
jmessage.ReplyTo = fromMail;//指定收件人回復(fù)的,所回復(fù)到的地址
jmessage.From = fromMail;//郵件發(fā)件人的郵箱地址
jmessage.FromName = "Test!";//郵件發(fā)件人顯示的姓名
jmessage.MailServerUserName = fromMail;//用戶名身份驗證
jmessage.MailServerPassWord = "password";//發(fā)送郵件在服務(wù)器中的密碼
//配置附件
string[] fj = fjMail.Split(',', ';');
if (fj.Length > 1)
{
for (int i = 0; i < fj.Length; i++)
{
jmessage.AddAttachment(fj[i],true,null);
}
}
else
{
jmessage.AddRecipient(sj[0], "", "");
}
//配置追加信息
jmessage.AppendHTML("<a href='http://www.dbjr.com.cn'>此郵件發(fā)送者</a>");
//發(fā)送郵件
for (int i = 0; i < sj.Length; i++)
{
jmessage.Send("smtp.qq.com", false);//發(fā)送郵件服務(wù)器
}
//配置jmail日志
jmessage.Logging = true;
using (StreamWriter sw = new StreamWriter("E:\\log.txt", true))
{
sw.Write(jmessage.Log);
sw.Close();
}
jmessage.Close();//郵件發(fā)送完畢,關(guān)閉郵件發(fā)送狀態(tài)
}
}
}
說明:
1)在//配置收件人信息//配置抄送人信息//配置密送人信息//配置附件 這四處用if...else...是為解決單郵件發(fā)送和多郵件發(fā)送的問題,設(shè)成**.length>0這個條件也行,但如果這樣做,比如:沒有抄送人時,cs長度為1,cs[0]是因為沒有這個郵箱地址才沒有發(fā)送出去;
2)配置jmail郵件日志 一定要寫到發(fā)送郵件的后面,且jmessage.Logging = true;和sw.Write(jmessage.Log);一定要同時使用;
3) 日志記錄到文件 E:\\log.txt 中,要選存在,用log4net也行;
4) 當(dāng)出報錯:the message was undeliverable.all servers failed to receive the message時,原因為smtp服務(wù)器不支持,更換smtp服務(wù)器,以前用163的沒問題,但現(xiàn)在用163的不行了。
三、調(diào)用發(fā)送代碼:
新建Mail.aspx,添加一個服務(wù)端按鈕,在其單擊事件中寫以下代碼:
protected void Button1_Click(object sender, EventArgs e)
{
MailAPI sendMail = new MailAPI();
string fj = Server.MapPath("files/JSON.rar");
//sendMail.Send("這是主題", "這是正文", "這是收件人郵箱列表", "這是發(fā)件人郵箱地址", "抄送人郵箱列表", "密件人郵箱列表", "附件服務(wù)器地址列表");
sendMail.Send("這是主題", "這是正文", "aaa@163.com,bbb@qq.com", "ccc@qq.com", "ddd@163.com,eee@qq.com", "", fj);
//各列表之間以 英文狀態(tài)的逗號分分號隔開
}
相關(guān)文章
relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序
relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序...2007-03-03基于.net standard 的動態(tài)編譯實現(xiàn)代碼
這篇文章主要介紹了基于.net standard 的動態(tài)編譯實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)
這篇文章介紹了Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03.NET下實現(xiàn)數(shù)字和字符相混合的驗證碼實例
這篇文章介紹了.NET下實現(xiàn)數(shù)字和字符相混合的驗證碼實例,有需要的朋友可以參考一下2013-11-11asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法
這篇文章主要介紹了asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法,結(jié)合實例形式分析了asp.net基于socket實現(xiàn)信息與文件傳輸?shù)南嚓P(guān)技巧,需要的朋友可以參考下2016-06-06關(guān)于EF的Code?First的使用以及踩坑記錄
這篇文章主要介紹了關(guān)于EF的Code?First的使用以及踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11DropDownList 下拉框選擇改變促發(fā)事件和防全局刷新(推薦)
這篇文章主要介紹了DropDownList 下拉框選擇改變促發(fā)事件和防全局刷新(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10ASP.NET?MVC5網(wǎng)站開發(fā)之用戶角色的后臺管理1(七)
這篇文章主要為大家詳細(xì)介紹了ASP.NET?MVC5網(wǎng)站開發(fā)之用戶角色的后臺管理,感興趣的小伙伴們可以參考一下2016-08-08AjaxControlToolKit 顯示瀏覽者本地語言的方法
使用最新版的AjaxControlToolKit控件2008-12-12