ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17967|回复: 17

[分享] 用VBA+Jmail来收发邮件的资料

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-11-11 15:26 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:邮件应用开发
终于在网上搜到关于Jmail收发邮件的好资料!
经VBA方法测试已成功!不敢私藏。供大火研究。
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
返回邮件正文。Response.Write (Message.Body) [NextPage]
  BodyText():String
返回全部的文本正文。Response.Write (Message.BodyText)

Charset():String
设置邮件使用的字符集。默认为US-ASCII,支持中文则设置为GB2312。

ContentTransferEncoding():String
设置邮件编码。默认为:Quoted-Printable.

ContentType():string
返回正文类型。

Date():Date
返回邮件发送时间。

DeferredDelivery():Date
设置邮件定时发送。

Encoding():String
设置附件的默认编码:Base64或Quoted-Printable

EncryptAttachments():Boolean
设置为True时,所有的附件都被加密,当然是编译器可用的情况下。其默认值为True.

ErrorCode():Integer
如果message.silent设置为True时,该函数包含错误号。

ErroeMessage():String
如果message.silent设置为True时,该函数包含错误描述。

ErroeSource():String
如果message.silent设置为True时,该函数包含错误来源。

From():String
返回或设置发件人的Email地址。

FromName():String
返回或设置发件人的名字。

HtmlBody():String
返回或设置邮件正文的HTML部分。

ISOEncodeHeaders():Boolean
邮件头是否使用iso-8859-1编码。(默认为True)

Log():String
当Logging为True时,该函数返回创建的日志。

Logging():Boolean
是否启用日志。Message.Logging=True时,启用日志。

MailData():String
返回邮件的源代码。

MailDomain():String
设置发送邮件时使用的邮件服务器。

MailServerPassWord():String
当邮件服务器使用SMTP发信认证时,该函数设置登录密码。

MailServerUserName():String
当邮件服务器使用SMTP发信认证时,该函数设置登录帐号。

MimeVersion():String
声明Mime版本,默认为1.0。

MsPickupdirectory():String
指定MS SMTP服务的Pickup文件夹的位置。

PGPEncrypt():Boolean
当邮件是使用PGP发送时并该属性被设置为True时,该邮件将被自动加密。

PGPSign():Boolean
当邮件是使用PGP发送时并该属性被设置为True时,该邮件将被自动签名。

Priority():Byte
设置邮件的优先级:1、2和3

Recipients():Pointer
返回收件人集合。

RecipientsString():String
返回收件人集合(只读)。

ReplyTo():String
指定一个回复地址。

Silent():Boolean
当设置为True时,Send()方法就会忽略错误并不将错误信息返回给操作系统。

SimpleLayout():Boolean
当设置为True时,发信时Jmail不会添加邮件头到邮件里。

Size():Integer
返回邮件的总字节数。

Subject():String
设置邮件标题。

Text():string
返回完整的邮件内容。

Version():String
返回Jmal的版本信息。




4、 Headers对象

属性(或方法)
描述

GetHeader(HeaderName):String
返回指定的邮件头的值。

Text():String
返回所有的邮件头的值。




5、 Recipients对象

属性(或方法)
描述

Add(Value)
追加一个收件人到集合中。

Clear()
清除集合中的全部记录。

Count():Integer
返回集合中收件人的总数。

Item(Index):Pointer
返回集合中的一个指定的收件人。




6、 Recipient对象

属性(或方法)
描述

New(Name,Email,recipientType):Pointer
创建一个可以添加到收件人集合中Recipients的收件人。

Email():String
返回收件人的邮件。

Name():String
返回收件人的姓名。

ReType():Integer
返回收件人模式(收件人To=0,抄送CC=1,暗送BCC=2)。




7、 Attachments对象

属性(或方法)
描述

Add(Attachment)
添加一个附件到集合。

Clear()
清除集合中的全部附件。

Count():Integer
返回集合中附件的总数。

Item(Index):Pointer
返回集合中指定的附件。[NextPage]
   8、 Attachment对象

属性(或方法)
描述

New(FileName,ContentType,Data):Pointer
创建一个可以加入到Attachments集合的附件。如果指定Data的值,那么Jmail将创建一个以Data参数为内容的自定义附件。

SaveToFile(FileName)
保存附件到硬盘。

ContentType():String
返回附件类型(ContentType)

Data():String
返回附件的内容。

BinaryData():String
以二进制模式返回附件的内容。

IsInline():Boolean
如果附件被设置为可嵌入(inline),则返回True。

Name():String
返回附件的文件名称。

Size():Integer
返回附件的大小。





9、 MailMerge对象

属性(或方法)
描述

BulkMerge(RecordSet,enque,Maildestination)
参照邮件模板合并所有记录,要指定使用的pickuo文件夹或邮件服务器。

Expand():Pointer
参照用户指定的方式合并邮件模板(mailTemplate)。

ExpandFromRecordSet(RecordSet):Pointer
参照邮件模板(mailTemplate)合并ADO对象中的一例。

SetDebugMode(TestMailAddress,TestCount)
将邮件合并(mailMerge)设置为测试模式。

Item(VariableNmae):String
手工设置合并参数。注意:该功能不使用于ADO数据例的合并。

MailTemplate():Pointer
设置一个创建好的Message对象,这个对象将被作为邮件合并的模板。

MergeAttachments():Boolean
当该属性设置为 True时,附件被作为邮件合并的一个选项。





10、 PGPKeys对象

属性(或方法)
描述

Count():Integer
返回密码的总数。

Item(Index):Pointer
返回PGPKey信息对象。





11、 PGPKeyInfo对象

属性(或方法)
描述

KeyCreateDate():String
返回邮件密码创建的时间。

KeyID():String
返回密码的ID号。

KeyUser():String
返回创建密码的用户名。





12、 SpeedMailer对象

属性(或方法)
描述

EnqueMail(FromEmail,RecipientEmails,

Subject,Body,MsPickupdirectory)
添加一个邮件到发送队列。内容、主题等数据通过该方法的参数传递。

SendMail(FromEMail,RecipientEMails,

Subject,Body,MailServers)
通过SMTP发送一封邮件。内容、主题等数据通过该方法的参数传递。

SendXMLMail(XML)
关于该函数的用法请访问:http://tools.rushui.net





四、利用Jmail4.3邮件组件发送邮件示例:

通过以上的介绍,相信读者对Dimac W3 Jmail及其一些常用的对象已有了比较全面的了解。下面将通过一个例子来讲解如何创建w3 Jmail对象,并使用它来创建一个新邮件,设置邮件的标题、内容等并发送该邮件。

JmailSend.asp

<%@Language=”VBScript”%>

<%

Response.Buffer=True

‘创建Jmail.Message对象实例oJmail

Set oJmail=Server.CreateObject(“Jmail.Message”)

‘启动日志功能

oJmail.Logging=True

‘不将错误返回给操作系统

oJmail.Silent=True

‘设置邮件发送者的邮件地址

oJmail.From=”rushui2008@163.com

‘设置邮件发送者的姓名

oJmail.FromName=”如水”

‘设置接收邮件人的邮箱地址

oJmail.AddRecipient “rushui@qq.com

‘设置邮件标题

oJmail.Subject=”邮件测试系统”

‘邮件正文

oJmail.Body=”朋友:”&vbCrLf&vbCrLf&”最近,我使用Jmail开发一个邮件发送系统。”

‘发送邮件,Mail.myDomain.com假设为SMTP服务器

oJmail.Send(“Mail.myDomain.com”)

%>



接下来我们再来看一个比较简单的邮件接收系统。这个例子的执行过程,首先是从存放邮件的服务器上取出邮件,然后把它同附件一起显示在WEB也面上。

JmailReceipt.asp

<% @LANGUAGE=VBSCRIPT %>
<%

Set pJmail = Server.CreateObject( "JMail.POP3" )
pJmail.Connect "username", "password", "mail.mydomain.com"
Response.Write( "你有 " & pJmail.count & " 封新邮件<br><br>" )
if pJmail.count > 0 then
Set msg = pJmail.Messages.item(1)
ReTo = ""
ReCC = ""
Set Recipients = msg.Recipients
separator = ", "
For i = 0 To Recipients.Count - 1
If i = Recipients.Count - 1 Then
separator = ""
End If
Set re = Recipients.item(i)
If re.ReType = 0 Then
ReTo = ReTo & re.Name & " (" & re.EMail & ")" & separator
else
ReCC = ReTo & re.Name & " (" & re.EMail & ")" & separator
End If
Next
Function getAttachments()
Set Attachments = msg.Attachments
separator = ", "
For i = 0 To Attachments.Count - 1
If i = Attachments.Count - 1 Then
separator = ""
End If
Set at = Attachments(i)
at.SaveToFile( "c:\fujian\" & at.Name )
getAttachments = getAttachments & "<a href=""/fujian/" &_
at.Name &""">" & at.Name & "(" & at.Size & " bytes)" &_
"</a>" & separator
Next
End Function

%>
<html>
<body>
<TABLE>
<tr>
<td>主题</td>
<td><%= msg.Subject %></td>
</tr>
<tr>
<td>发件人</td>
<td><%= msg.FromName %></td>
</tr>
<tr>
<td>收件人</td>
<td><%= ReTO %></td>
</tr>
<tr>
<td>抄送人</td>
<td><%= ReCC %></td>
</tr>
<tr>
<td>附件</td>
<td><%= getAttachments %></td>
</tr>
<tr>
<td>正文</td>
<td><pre><%= msg.Body %></pre></td>
</tr>
</TABLE>
</body>
</html>
<%
end if
pJmail.Disconnect ‘断开POP3连接
%>

至此,一个简单的邮件发送和接收系统就开发完成了。至于有些网友要开发比较复杂的邮件系统,可以结合以上所讲的对象及其属性方法来开发,肯定会开发出功能强大齐全的邮件系统。

TA的精华主题

TA的得分主题

发表于 2010-11-11 17:35 | 显示全部楼层
网上好多,这个JMAIL 很方便的

TA的精华主题

TA的得分主题

发表于 2011-8-18 16:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-25 21:53 | 显示全部楼层
本帖最后由 yb010 于 2011-10-25 22:05 编辑

来个VBA的何如?
使用前先注册:jmail.dll
Function mySenL(UserName As String, Password As String, AttachFile1 As String) As Balloon
    Dim JmailMsg As Object, Arymailto As Variant, k%
    Set JmailMsg = CreateObject("jmail.message")
    JmailMsg.MailServerUserName = UserName '用户名
    JmailMsg.MailServerPassWord = Password '密码
    JmailMsg.Logging = True                  '是否使用日志
    Arymailto = Split("UserName1,123456789@qq.com,UserName2,987654321@qq.com", ",")  '添加收件人
    For k = 0 To (UBound(Arymailto) - 1) / 2
        JmailMsg.AddRecipient Trim(Arymailto(k * 2 + 1)), Trim(Arymailto(k * 2))  '添加收件人
    Next
    JmailMsg.From = "000000000@qq.com" '发件人地址
    JmailMsg.FromName = "张三"      '发件人
    JmailMsg.Encoding = "base64"    '设置编码
    JmailMsg.Charset = "gb2312"
    JmailMsg.Priority = 1           '设置邮件的优先级
    JmailMsg.Silent = True          '安静模式
    JmailMsg.Subject = "邮件内容"
    JmailMsg.Body = "邮件标题"
    If AttachFile1 <> "" Then
       JmailMsg.AddAttachment (AttachFile1)    '附件
    End If
    If Not JmailMsg.Send("smtp.qq.com:") Then
       mySenL =False
    Else
       mySenL =True
    End If
    JmailMsg.Close
    Set JmailMsg = Nothing
    'MsgBox (JmailSend) '测试时可以用
End Function


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-7 11:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主能不能上个例子参考下啊。谢谢呀

TA的精华主题

TA的得分主题

发表于 2011-12-7 13:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏中.{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2011-12-18 20:52 | 显示全部楼层
测试成功。
有两个问题,提醒一下需要使用的朋友:
一、用于发送邮件的邮箱,需设置启用POP3或是SMTP服务器;
二、    If Not JmailMsg.Send("smtp.qq.com:") Then
        mySenL =False
     Else
        mySenL =True '这条语句会出错,提示mySenL = Nothing,没找到原因。
     End If

接收邮件的VBA还在测试中,,,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-5-2 10:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
写的真好,收下,学习。

TA的精华主题

TA的得分主题

发表于 2012-5-28 14:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
发邮件的代码多着呢,收邮件才复杂可惜没有。这篇文章我在百度花了20积分呢。看了没多大用

TA的精华主题

TA的得分主题

发表于 2012-10-7 11:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 01:23 , Processed in 0.036369 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表