VBA中发送邮件有很多方法,Jmail或者直接调用outlook,Jmail要求本机安装Jmail.dll库文件,调用outlook又要要求本机安装outlook并且配置好outlook收发邮件。
本文介绍使用Windows自带的cdosys.dll发送邮件。
不做多解释直接上代码了。
' CDO相关参数
Private Const cdoSendUsingMethod = _
"http://schemas.microsoft.com/cdo/configuration/sendusing"
Private Const cdoSMTPServer = _
"http://schemas.microsoft.com/cdo/configuration/smtpserver"
Private Const cdoSMTPServerPort = _
"http://schemas.microsoft.com/cdo/configuration/smtpserverport"
Private Const cdoSMTPConnectionTimeout = _
"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
Private Const cdoSMTPAuthenticate = _
"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
Private Const cdoSMTPPassword = _
"http://schemas.microsoft.com/cdo/configuration/sendpassword"
Private Const cdoSMTPUserId = _
"http://schemas.microsoft.com/cdo/configuration/sendusername"
Private Const cdoSMTPUsessl = _
"http://schemas.microsoft.com/cdo/configuration/smtpusessl"
Private Const cdoSendUsingPort = 2
Private Const cdoAnonymous = 0
Private Const cnsUseSSL = True
Private Const cdoLanguageCode = _
"http://schemas.microsoft.com/cdo/configuration/languagecode"
' 文字编码
Public Const cdoUTF_8 = "utf-8"
'*******************************************************************************
' 邮件发信(CDO)
'*******************************************************************************
' 参数
' MailSmtpServer : SMTP服务器
' MailFrom : 发件人地址
' MailTo : 收件人地址
' MailCc : CC
' MailBcc : BCC
' MailSubject : 邮件标题
' MailBody : 邮件内容
' MailAddFile : 添加附件 可选
' MailCharacter : 文字编码 可选
' [返回值]
' 正常"OK", 错误"NG"+错误信息
'*******************************************************************************
Public Function SendMailByCDO(MailSmtpServer As String, _
MailFrom As String, _
AccountPassword As String, _
MailTo As String, _
MailCc As String, _
MailBcc As String, _
MailSubject As String, _
MailBody As String, _
Optional MailAddFile As Variant, _
Optional MailCharacter As String)
Const cnsOK = "OK"
Const cnsNG = "NG"
Dim objCDO As Object
Dim vntFILE As Variant
Dim IX As Long
Dim strCharacter As String, strBody As String, strChar As String
On Error GoTo SendMailByCDO_ERR
SendMailByCDO = cnsNG
strCharacter = cdoUTF_8 '"gb2312"
strBody = Replace(MailBody, vbLf, vbCrLf)
MailBody = Replace(strBody, vbCr & vbCrLf, vbCrLf)
Set objCDO = CreateObject("CDO.Message")
With objCDO
With .Configuration.Fields
.Item(cdoSMTPUsessl) = cnsUseSSL
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServer) = MailSmtpServer
.Item(cdoSMTPServerPort) = 465 ' 端口号
.Item(cdoSMTPConnectionTimeout) = 60 ' 超时
.Item(cdoSMTPAuthenticate) = 1 ' 0
.Item(cdoSMTPUserId) = MailFrom
.Item(cdoSMTPPassword) = AccountPassword
.Item(cdoLanguageCode) = strCharacter
.Update ' 设定更新
End With
.MimeFormatted = True
.Fields.Update
.From = MailFrom ' 发信人
.To = MailTo ' 收件人
If MailCc <> "" Then .CC = MailCc ' CC
If MailBcc <> "" Then .BCC = MailBcc ' BCC
.Subject = MailSubject ' 标题
.HTMLBody = MailBody ' 邮件内容
.HTMLBodyPart.Charset = strCharacter ' 文字编码
.TextBodyPart.Charset = strCharacter ' 文字编码
' 附件
If ((VarType(MailAddFile) <> vbError) And _
(VarType(MailAddFile) <> vbBoolean) And _
(VarType(MailAddFile) <> vbEmpty) And _
(VarType(MailAddFile) <> vbNull)) Then
If IsArray(MailAddFile) Then
For IX = LBound(MailAddFile) To UBound(MailAddFile)
.AddAttachment MailAddFile(IX)
Next IX
ElseIf MailAddFile <> "" Then
vntFILE = Split(CStr(MailAddFile), ",")
For IX = LBound(vntFILE) To UBound(vntFILE)
If Trim(vntFILE(IX)) <> "" Then
.AddAttachment Trim(vntFILE(IX))
End If
Next IX
End If
End If
.Send ' 发信
End With
Set objCDO = Nothing
SendMailByCDO = cnsOK
Exit Function
'-------------------------------------------------------------------------------
SendMailByCDO_ERR:
SendMailByCDO = cnsNG & err.Number & " " & err.Description
On Error Resume Next
Set objCDO = Nothing
End Function
SendMailByCDO函数中调用了两个自定义的函数Replace()和Split()。
相关推荐
Powerbuilder 通过CDO发送Email
本文实例讲述了C#使用CDO发送邮件的方法。分享给大家供大家参考。具体分析如下: CDO是一个名为Microsoft CDO For Exchange 2000 Library的COM组件,我们可以用它来连接SMTP Server,使用用户名/密码验证发送邮件。 ...
网上找的有CDO 发邮件的示例。 避免了使用OUTLOOK发邮件时的弹出框确认
一个简单邮件接收案例 CDO.Message CDO.Configuration
利用CDO的Configuration对象,配置相关的信息,再利用CDO的Message对象,发送邮件。
asp 发送邮件 cdo.message
定时自动发送邮件源文件 当设定好时间和接受邮箱就可以发送 系统自带 CDO组件 WINDOW 2003 中需要注册CDO组件
在本地下载个mail服务器软件(如CMailServer),设置好账户后,可以直接运行发送。
C#CDO,NET.MAIL,调用outlook发送邮件 三种办法发送邮件。 三种都测试通过的。 可以使用。 CDO是内网使用代理上网时使用。 调用outlook的方法,没有outlook时无法使用。 net.mail不是代理上网的环境时使用,在代理...
关于VBA邮件发送经过几天的整理,整理出利用CDO,OUTLOOK,MSMAPI进行邮件发送,绝对是想利用VBA做邮件发送的理想材料。通过例子程序简单明了的介绍了这三种邮件发送方式。
全自动通过vba发送邮件,调用stmp服务器直接发送 不用outlook支持,需要stmp用户名和密码... <br>主要原理是基于cdo.dll编程 <br>ps:上次发的基于Outlook发送邮件的VBA程序是半自动了,这次的版本是全自动了
Excel分条发送邮件, 可选择发送方式: Outlook 或CDO
SmtpMail – 提供属性和方法通过使用windows 2000 CDOSYS 的消息组件的联合数据对象来发送邮件消息)。(Provides properties and methods for sending messages using the Collaboration Data Objects for Windows ...
前一段时间有发过一个简单的JMAIL邮件发邮件的代码,今天就把这个代码做一个具体的注解,并增加了另外两个格式的代码,并举几个简单的例子: 首先是jmail.smtpmail的核心代码: 程序代码 <% Set jmail = ...
CDO 代表协作数据对象,它随 Windows 2000、Windows XP 和 Windows Server 2003 一起提供。 在下面找到使用 emailtool_nodisplay 可能很有趣的不同场景。 % 用法 1 : emailtool_nodisplay 可用于监控贵公司软件的...
比如在Outlook 2003中使用CDO发送邮件时提示“有一个程序正试图访问保存于 Outlook 的电子邮件地址”,该文件解压至 C:\Program Files\Common Files\System\MSMAPI\2052 如果系统分区是其它盘符,把C改为...
cdo 1.9.7.1 windows64位安装文件
Climate Data Operators (CDO)使用教程,常见命令汇总