.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://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);
            //各列表之间以 英文状态的逗号分分号隔开
        }

时间: 2024-11-01 07:06:39

.net jMail邮件发送(含抄送、密送、多发、日志记录)实例代码_实用技巧的相关文章

ASP.Net邮箱发邮件实例代码_实用技巧

复制代码 代码如下:  public static void SendEmail()    {         System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();        //这里使用QQ的邮箱来发送测试,如果是其它邮箱,请根据其它邮箱POP3/IMAP/SMTP服务来设置         client.Host = "smtp.qq.com";        client.UseDefaul

VB.NET验证邮件地址的合法性实现代码_实用技巧

一.提出问题 现在,对于用户在Web页面上或电话中给出的Email地址,我们越来越不敢肯定它是否真的有效.在今天这个垃圾邮件泛滥成灾的年代,人们完全有理由舍不得轻易透露Email地址. 另一方面,对于通过正规途径得到的邮件地址,当我们将它用于合法的目的时,也常常要为邮件地址是否有效而烦恼,用户可能有意或无意地写错地址,也可能由于长时间不访问而导致邮箱失效.对于少量的邮件地址,也许可以手工验证其合法性,例如发送测试email:但是,当邮件地址的数量达到数万甚至更多时,手工验证就不可能了,必须用专门

.net平台推送ios消息的实现方法_实用技巧

本文实例讲述了.net平台推送ios消息的实现方法.分享给大家供大家参考. 具体实现步骤如下: 1.ios应用程序中允许向客户推送消息 2.需要有苹果的证书以及密码(怎么获取,网上搜一下,需要交费的) 3.iphone手机一部,安装了该ios应用程序 4..net 项目中引用PushSharp.Apple.dll,PushSharp.Core.dll(这两个文件在网上搜一下,有源码的) 5.开始写代码,定义全局的对象PushBroker pusher = new PushBroker(); 6.

Asp.Net类库中发送电子邮件的代码_实用技巧

通常验证电子邮件真实有效的办法是:当用户填写的注册资料经过网站初步格式验证之后,用户并不能利用此帐号登录,系统会向用户注册时填写的电子邮件地址发送一封电子邮件,邮件中给出一个链接,只有当用户点击了这个链接之后才能登录到网站,如果用户填写的电子邮件地址不是真实有效的或者不是他本人的,就不会收到这封电子邮件,这样仍然不能登录,这一步一般称之为电子邮件激活. 在.net类库中有两种发送电子邮件的方式,一种是在.net2.0以下版本中的做法,一种是.net2.0以上版本的做法.下面分别介绍这两种办法.

ASP.NET(VB)写的后台发送短信实现代码_实用技巧

复制代码 代码如下: Dim postData As String Dim byteArray As Byte() Dim objWebRequest As HttpWebRequest Dim newStream As Stream postData = "cell=短信供应商提供信息1&enterpriseId=短信供应商提供信息2&mobile=手机号1,手机号2&message=发送数据测试..." objWebRequest = WebRequest.

漂流瓶推送需求的逻辑实现代码_相关技巧

本身这两个数据之间没有关联,并且sql语句里面的排序规则不能满足要求:sql里只有数据中前一个排序条件出现相同的情况时才考虑后面的排序条件.实际情况是如果按先推送时间后距离排序的话,距离就起不了作用,反之亦然. 要让两个数据产生关联,有一种做法是将这两个数据做加法或减法后排序,但是这必须要考虑以下情况 两个数据的数据类型不一致,一个是日期类型另一个是双精度类型 必须统一两个数据的排序方向,不能推送时间取正序而距离取反序,视实际需求而定 将这两个数据都转换成一种类型,需要一个系数来平衡它们.如果一

ASP.NET实现推送文件到浏览器的方法_实用技巧

本文实例讲述了ASP.NET实现推送文件到浏览器的方法.分享给大家供大家参考.具体分析如下: 这里主要实现从服务器到浏览器,推送文件,提供用户下载/浏览的功能. 提示: 在AJAX UpdatePanel里面将无效.如果代码从按钮单击事件中被调用,该按钮需要在 AJAX UpdatePanel的外部. 具体代码如下: /// <summary> /// Downloads (pushes) file to the client browser. /// **** NOTE **** Canno

深入Lumisoft.NET实现邮件发送功能的方法详解_实用技巧

在前面的一些文章中,有介绍过DotNet内置SMTP类的邮件发送功能,附件.嵌入图片的模式都有介绍,本文继续介绍Lumisoft.NET这个非常优秀的开源组件,用该组件来设计开发邮件工具,将变得更加方便,功能更加强大.网上很多文章基本介绍如何使用该组件来收取邮件较多,较少介绍使用该组件做邮件发送功能的.本文主要探寻使用该组件实现邮件的发送功能,邮件发送有两种方式,一种是不用发件人即可发送邮件,一种是使用发件人账户密码和SMTP服务器来实现邮件发送的,本文分别对这两种方式进行介绍. 组件下载地址:

深入Lumisoft.NET组件与.NET API实现邮件发送功能的对比分析_实用技巧

我在另一篇文章<深入Lumisoft.NET实现邮件发送功能的方法详解>有大致对这个Lumisoft.NET组件的使用进行了介绍,当然Lumisoft.NET组件除了提供邮件发送功能外,还提供了邮件接收等功能的处理(包括基于POP3协议和IMAP协议),而.NET则除了提供SMTP协议功能外,则没有提供POP3协议处理的相关类库,因此收取邮件这需要自己进行封装(需要也可以参考codeproject.com上的相关文章). 1..NET的邮件发送功能实现.NET本身封装了一个SmtpClient