C# 利用Jmail接收邮件

 

W3 JMail 邮件组件是Dimac公司开发的用来完成邮件的发送、接收、加密和集群传输等工作的。w3 Jmail组件是国际最为流行的邮件组件之一,当今世界上绝大部分ASP程序员都在使用w3 Jmail组件构建邮件发送系统,那是因为w3 Jmail组件使用了新的内核技术,使其更加可靠和稳定。

一、下面向读者介绍w3 Jmail4.3组件的新特性:

1、   w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件;

2、   w3 Jmail4.3组件一共有十多个对象(后面将详细介绍)——这些对象中,绝大多数是针对Jmail.Message对象操作的;

3、   支持从POP3邮件服务器收取邮件;

4、   支持加密邮件的传输;

5、   快速发送,一次会话就完成邮件发送;

6、   还有一个特性就是可以使用w3 Jmail4.3组件的集群发送功能一次发送成千上万个邮件,还可以通过邮件合并(mailmerge)对象来个性化邮件。

二、Jmail邮件组件的安装及卸载:

1、   安装

跟使用别个组件一样,在使用Jmail邮件组件之前要先安装或注册该组件Jmail.dll。具体注册方法,是先把Jmail.dll文件拷贝到硬盘的某一目录下(如C:\Jmail\Jmail.dll),然后执行命令Regsvr32 C:\Jmail\Jmail.dll即可。

2、   卸载

卸载组件是安装组件的相反动作,可以使用参数/U来卸载已安装的组件,执行命令Regsvr32 /U  Jmail.dll即可。

三、详细介绍W3 Jmail组件的对象(12个):

1、.POP3对象

属性(或方法)
 说明
 
Connect(Username,Password,Server,Port)
 连接POP3服务器,断口可选,默认110。
 
DeleteMessages()
 从邮件服务器上删除所有邮件。
 
DeleteSingleMessage(MessageID)
 从邮件服务器上删除由MessageID指定的邮件。
 
Disconnect()
 关闭跟邮件服务器的连接。
 
DownloadHeaders()
 从邮件服务器上读取所有的邮件头并传递给Messages集合。
 
DownloadMessages()
 从邮件服务器读取所有邮件。
 
DownloadSingleHeader(MessageID)
 从邮件服务器读取指定的邮件头并传递给Messages集合。
 
DownloadUnreadMessages()
 从邮件服务器上读取所有未读邮件。
 

 

2、.Messages对象

属性(或方法)
 说明
 
Clear()
 清除集合中的所有内容,并不会删除邮件服务器上的任何邮件。
 
Count():Integer
 返回集合中记录的数目:I=Messages.Count
 
Item(Index):Pointer
 返回一个Message对象。Set oMsg=Messages.Item(0)
 

 

3、.Message对象

属性(或方法)
 说明
 
AddAttachment(FileName,isInline,ContentType):String
 给邮件添加一个文件型的附件。isInline设置为True时,添加的这个附件就是一个可嵌入的附件。
 
AddCustomAttachment(FileName,Data,isInline):String
 给邮件添加一个自定义类型的附件。
 
AddHeader(Xheader,Value)
 给邮件添加一个自定义邮件头X-Header。
 
AddNativeHeader(Header,Value)
 给邮件添加一个邮件头。
 
AddRecipient(emailAddress,recipientName,PGPKey)
 给邮件添加一个收件人。RecipientName和PGPKey是可选项,RecipientName为收件人姓名,PGPKey给邮件加密。
 
AddRecipientBCC(emailAddress,PGPKey)
 添加一个邮件暗送人(BCC)地址。
 
AddRecipientCC(emailAddress,recipientName,PGPKey)
 给邮件添加一个邮件抄送人(CC)地址。
 
AddURLAttachment(bstrURL,bstrAttachAs,isInline,bstrAuth):String
 从指定的URL下载文件并添加为邮件附件。参数bstrAttachAs是用来更改添加为邮件附件的文件名。
 
AppendBodyFromFile(FileName)
 清除邮件正文,并把指定文件的内容作为邮件正文。
 
AppendHTML(Text)
 从邮件追加HTML格式正文,如例所示:Message. AppendHTML(“<H3>Hello Word</H3>”)
 
AppendText(Text)
 向邮件添加文本正文。
 
Clear()
 清除所有邮件消息,是成为一个空对象。
 
ClearAttachments()
 清除附件列表。如:Message.ClearAttachments
 
ClearCustomHeaders()
 清除所有自定义的邮件头。
 
ClearRecipients()
 清除所有收件人地址列表。
 
Close()
 释放Jmail与邮件服务器连接而使用的缓存(Cache)。
 
DecodeHeader(Header):String
 输出一个邮件头消息。
 
ExtractEmailAddressesFromURL(bstrURL,bstrAuth)
 从指定的网制(URL)读取并添加邮件列表。
 
GetMessageBodyFromURL(同上)
 删除邮件正文并用指定的URL的内容代替。
 
KeyInformation(keyIdentifier):pointer
 返回一个PGPKey对象。
 
LoadFromStream(Stream)
 从数据库流读取数据,该数据库流必须符合RFC822标准。
 
LogCustomMessage(Message)
 给Jmail日志文件添加自定义日志。此函数只有在logging属性被设置为True时有效。
 
Nq()
 将邮件追加到发送队列等待发送。
 
ParseMessage(MessageSource)
 解析一个邮件,数据流必须符合RFC822格式标准。
 
SaveToStream(Stream)
 保存邮件到数据流,数据流必须符合RFC822格式标准。
 
Send(MailServer,enque):Boolean
 发送邮件。邮件服务器是一个描述邮件服务器名称或地址的字符串,用户名和密码是可选项。当要发送认证邮件时使用格式为:用户名:密码@邮件服务器
 
SendToNewsGroup(ServerName,NewsGroup)
 使用指定的NNTP服务器发送邮件到新闻组,多个邮件用“,”隔开。
 
About():string
 设置一些附加信息。
 
Attachments():Pointer
 返回邮件的附件集合。Set Attachments=Message.Attachments
 
Body():String
 

例子:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using jmail;

namespace AutorReceiverMail
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ReciveByJmail();
        }

        /**/
        /// <summary>
        /// 利用Jmail接收邮件
        /// </summary>
        private void ReciveByJmail()
        {
            /**/
            ///建立收邮件对象
            jmail.POP3Class popMail = new jmail.POP3Class();

            /**/
            ///建立邮件信息接口
            jmail.Message mailMessage;

            /**/
            ///建立附件集接口
            jmail.Attachments atts;

            /**/
            ///建立附件接口
            jmail.Attachment att;

            try
            {
                popMail.Connect(TxtPopUser.Text.Trim(), TxtPopPwd.Text.Trim(), TxtPopServer.Text.Trim(), Convert.ToInt32(TxtPopPort.Text.Trim()));
                //popMail.Connect("hongkaihua", "13783684495", "pop.126.com",110);
                /**/
                ///如果收到邮件
                if (0 < popMail.Count)
                {
                       /**/
                    ///根据取到的邮件数量依次取得每封邮件
                    for (int i = 1; i <= popMail.Count; i++)
                    {
                        /**/
                        ///取得一条邮件信息
                        mailMessage = popMail.Messages[i];

                        /**/
                        ///取得该邮件的附件集合
                        atts = mailMessage.Attachments;

                        /**/
                        ///设置邮件的编码方式                         
                        mailMessage.Charset = "GB2312";

                        /**/
                        ///设置邮件的附件编码方式                        
                        mailMessage.Encoding = "Base64";

                        /**/
                        ///是否将信头编码成iso-8859-1字符集                       
                        mailMessage.ISOEncodeHeaders = false;

                        /**/
                        ///邮件的优先级                    
                        txtpriority.Text = mailMessage.Priority.ToString();

                        ///**/
                        ///邮件的发送人的信箱地址                     
                        txtSendMail.Text = mailMessage.From;

                        /**/
                        ///邮件的发送人                    
                        txtSender.Text = mailMessage.FromName;

                        /**/
                        ///邮件主题                  
                        txtSubject.Text = mailMessage.Subject;

                        /**/
                        ///邮件内容
                        Message.Text = mailMessage.Body;

                        /**/
                        ///邮件大小                       
                        txtSize.Text = mailMessage.Size.ToString();

                        switch (mailMessage.From)
                        {
                            case "375650524@qq.com":

                        for (int j = 0; j < atts.Count; j++)
                        {
                            /**/
                            ///取得附件
                            att = atts[j];

                            /**/
                            ///附件名称                             
                            string attname = att.Name;

                            switch (mailMessage.Subject)
                            {
                                case "联通预报20110726":

                            /**/
                            ///上传到服务器
                            //att.SaveToFile("D:" + "\\Mail\\MailReceive\\" + attname);
                            /**/
                            //邮件的优先级                    
                            //txtpriority.Text = mailMessage.Priority.ToString();

                            /**/
                            /邮件的发送人的信箱地址                     
                           // txtSendMail.Text = mailMessage.From;

                            ///**/
                            /邮件的发送人                    
                           // txtSender.Text = mailMessage.FromName;

                            ///**/
                            /邮件主题                  
                            //txtSubject.Text = mailMessage.Subject;

                            ///**/
                            /邮件内容
                            //Message.Text = mailMessage.Body;

                            ///**/
                            /邮件大小                       
                            txtSize.Text = mailMessage.Size.ToString();

                            string all = "D:" + "\\Mail\\MailReceive\\";
                            string path = all + attname;
                            DirectoryInfo dir = new DirectoryInfo(all);

                            if (dir.Exists)
                            {
                                att.SaveToFile(path);
                            }
                            else
                            {
                                dir.Create();
                                att.SaveToFile(path);
                            }
                            break;
                            }
                        }
                        break;
                    }

                        }

                   
                    panMailInfo.Visible = true;
                    att = null;
                    atts = null;

                }

                else
                {
                    //Response.Write["没有新邮件!"];
                    MessageBox.Show("没有新邮件");
                }

                popMail.DeleteMessages();
                popMail.Disconnect();
                popMail = null;
            }

            catch
            {
                //Response.Write["Warning!请检查邮件服务器的设置是否正确!"];
                MessageBox.Show("Warning!请检查邮件服务器的设置是否正确!");
            }
        }

 

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值