当前位置: 移动技术网 > IT编程>开发语言>.net > .net jMail邮件发送(含抄送、密送、多发、日志记录)实例代码

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

绝爱3000年,鹿喜微七天断食,林书豪vs科比

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

一、组件准备
下载并安装(记下安装路径)

找到安装路径,将其中的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='//www.jb51.net'>此邮件发送者</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);
            //各列表之间以 英文状态的逗号分分号隔开
        }

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网