.net jMail邮件发送(含抄送、密送、多发、日志记录)

jmail是一个第三方邮件操作组件,通常位于web服务器端,实现收邮件及发邮件功能(客户端用Foxmail这类就很好了)。可以利用它轻松实现发邮件、抄送、密送、多发、日志记录及收邮件功能。本章要讲的,就是:发邮件、抄送、密送、多发、日志记录。

一、组件准备

下载JMail44_pro并安装(记下安装路径)

找到安装路径,将其中的jmail.dll复制到项目中

二、核心发送代码

新建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>
        /// 邮件发送
        /// </summary>
        /// <param name="zt">主题</param>
        /// <param name="zw">正文</param>
        /// <param name="getMail">收件人地址</param>
        /// <param name="fromMail">发件人地址,多个地址间用英文逗号或分号隔开</param>
        /// <param name="csMail">抄送人地址,多个地址间用英文逗号或分号隔开</param>
        /// <param name="msMail">密送人地址,多个地址间用英文逗号或分号隔开</param>
        /// <param name="fjMail">附件服务器目录,多个服务器端目录之间以英文逗号或分号隔开</param>
        public void Send(string zt, string zw, string getMail, string fromMail, string csMail, string msMail, string fjMail)
        {
            jmail.Message jmessage = new Message();
            //Jmail系统配置  
            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], "", "");
            }
            //配置发件人信息  
            jmessage.ReplyTo = fromMail;//指定收件人回复的,所回复到的地址  
            jmessage.From = fromMail;//邮件发件人的邮箱地址  
            jmessage.FromName = "Test!";//邮件发件人显示的姓名  
            jmessage.MailServerUserName = fromMail;//用户名身份验证  
            jmessage.MailServerPassWord = "password";//发送邮件在服务器中的密码  
            //配置附件  
            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://blog.youkuaiyun.com/zhangquanok'>此邮件发送者</a>");
            //发送邮件  
            for (int i = 0; i < sj.Length; i++)
            {
                jmessage.Send("smtp.qq.com", false);//发送邮件服务器  
            }
            //配置jmail日志
            jmessage.Logging = true;
            using (StreamWriter sw = new StreamWriter("E:\\log.txt", true))
            {
                sw.Write(jmessage.Log);
                sw.Close();
            }
            jmessage.Close();//邮件发送完毕,关闭邮件发送状态  
        }
    }
}
说明:
1)在//配置收件人信息//配置抄送人信息//配置密送人信息//配置附件 这四处用if...else...是为解决单邮件发送和多邮件发送的问题,设成**.length>0这个条件也行,但如果这样做,比如:没有抄送人时,cs长度为1,cs[0]是因为没有这个邮箱地址才没有发送出去;

2)配置jmail邮件日志 一定要写到发送邮件的后面,且jmessage.Logging = true;和sw.Write(jmessage.Log);一定要同时使用;

3) 日志记录到文件 E:\\log.txt 中,要选存在,用log4net也行;

4) 当出报错:the message was undeliverable.all servers failed to receive the message时,原因为smtp服务器不支持,更换smtp服务器,以前用163的没问题,但现在用163的不行了。

三、调用发送代码:

新建Mail.aspx,添加一个服务端按钮,在其单击事件中写以下代码:

        protected void Button1_Click(object sender, EventArgs e)
        {
            MailAPI sendMail = new MailAPI();
            string fj = Server.MapPath("files/JSON.rar");
            //sendMail.Send("这是主题", "这是正文", "这是收件人邮箱列表", "这是发件人邮箱地址", "抄送人邮箱列表", "密件人邮箱列表", "附件服务器地址列表");
            sendMail.Send("这是主题", "这是正文", "aaa@163.com,bbb@qq.com", "ccc@qq.com", "ddd@163.com,eee@qq.com", "", fj);
            //各列表之间以 英文状态的逗号分分号隔开
        }
至此,jMail邮件发送功能完成!

jmail  jmail是一种服务器端的邮件发送组件,和个人用的客户端邮件软件不一样的。jmail是在服务器上给程序用来发邮件用的,除了软件编程人员,其他人一般平常用不上。   jmail是一个第三方邮件操作组件,通常位于web服务器端,和站点程序紧配合来接收及提交邮件邮件服务器的控件,让网站拥有发送邮件既接收邮件的功能   与此相同的还有CDONTS.NewMail,Persits.MailSender,IISmail.Iismail等等,他们唯一区别就是jmail只需要注册一个dll组件即可被调用,而其他则需要在iis上设置发布smtp服务器   (1)Body(信件正文) : 字符串   如:JMail.Body = "这里可以是用户填写的表单内容,可以取自Form。"   (2)Charset(字符集,缺省为"US-ASCII") : 字符串   如:JMail.Charset = "US-ASCII"   (3)ContentTransferEncoding : 字符串   指定内容传时的编码方式,缺省是"Quoted-Printable"   如:JMail.ContentTransferEncoding = "base64"   (4)ContentType(信件的contentype. 缺省是"text/plain") : 字符串   如果你以HTML格式发送邮件, 改为"text/html"即可。   如:JMail.ContentType = "text/html"   (5)Encoding : 字符串   设置附件编码方式(缺省是"base64)。 可以选择使用的是"base64", "uuencode" or "quoted-printable" 如:JMail.Encoding = "base64"   (6)Log(Jmail创建的日志,前提loging属性设置为true,见下面) : 字符串   如:使用Response.Write( JMail.Log )语句列出日志信息。   (7)Logging(是否使用日志) : 布尔型   如:JMail.Logging = true   (8)Recipients : 字符串   只读属性,返回所有收件人   如:Response.Write( "" + JMail.Recipients + "" );   (9)ReplyTo(指定别的回信地址) : 字符串   如:JMail.ReplyTo = "qiao198@hotmail.com"   (10)Sender( 发件人的邮件地址) : 字符串   如:JMail.Sender = "qiao198@21cn.com"   (11)SenderName(发件人的姓名) : 字符串   如:JMail.SenderName = "一克"   (12)ServerAddress(邮件服务器的地址) : 字符串   你可以指定个服务器,用分号点开。可以指定端口号。   如果serverAddress保持空白,JMail会尝试远程邮件服务器,然后直接发送到服务器上去。   如:JMail.ServerAddress = "mail.21cn.net.cn"   (13)Subject(设定邮件的标题,可以取自Form。):字符串   如:JMail.Subject = "客户反馈表单"   (14)添加文件附件到邮件   如:JMail.AddAttachment( "c:anyfile.zip" )   (15)AddCustomAttachment( FileName, Data )   添加自定义附件.   如:JMail.AddCustomAttachment( "anyfile.txt", "Contents of file" );   (16)AddHeader( Header, Value )   添加用户定义的信件标头。   如:JMail.AddHeader( "Originating-IP","192.158.1.10" );   (17)AddRecipient(收件人):字符串   如:JMail.AddRecipient( "qiao198@hotmail.com" );   (18)AddRecipientBCC( Email )件收件人:   如:JMail.AddRecipientBCC( "qiao198@hotmail.com" );   (19)AddRecipientCC( Email )抄送收件人:   如:JMail.AddRecipientCC( "" )   (20)AddURLAttachment( URL, 文档名)   下载并添加一个来自url的附件. 第二个参数"文档名", 用来指定信件收到后的文件名。   如:JMail.AddURLAttachment( "http://www.chinabs.net/jmail.zip", "jmail" )   (21)AppendBodyFromFile( 文件名) ,将文件作为信件正文:   如:JMail.AppendBodyFromFile( "c:anyfile.txt" )   (22)AppendText( Text )   追加信件的正文内容,比如增加问候语或者其它信息。   如:JMail.AppendText( "欢迎访问本站!" )   (23)Close() ,强制JMail关闭缓冲的与邮件服务器的连接:   如:JMail.Close()   (24)发送【调用格式:objJMail.Send(SMTPServerAddress[:Port])】   例:JMail.Send("smtp.163.com")   Jmail具有以下特点:   (1)可以发送附件;   (2)详细日志能力,便于你查看问题所在;   (3)设置邮件发送的优先级;   (4)支持种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。   (5)发送/(CC)抄送/紧急信件发送能力;   (6)最关键的就是--免费的组件,不必花钱,所以非常值得使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值