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()。
相关推荐
华南理工大学李家春老师的计算机安全Ⅰ选修课,目的“通过对VBA+CDO的使用,成功自动发送一封电子邮件”。 包含操作文档,完整的实验报告和相关文件
### CDO方法发送邮件 #### 一、CDO概述 CDO(Collaboration Data Objects)是一套由Microsoft...通过以上步骤,我们可以有效地利用CDO来发送带有特定配置的电子邮件。这对于自动化任务、通知系统等领域具有重要意义。
你可以通过这个对象来创建、读取、修改和发送邮件。以下是一些关于CDO.Message的重要属性和方法: 1. **Fields集合**: 这个集合允许你设置和获取邮件的各种属性,如发件人、收件人、主题、正文等。例如,`Message....
CDO是Microsoft的一项技术,它允许程序通过邮件服务器发送邮件,而无需用户交互。下面,我们将详细探讨如何使用VBA和CDO来发送邮件: 1. **引入CDO库**:首先,你需要在VBA代码中引入CDO库。在VBA编辑器中,选择...
标题中的“用CDO和SMTP协议发送Mail的源代码”是指使用CDO(Collaborative Data Objects)组件和SMTP(Simple Mail Transfer Protocol)协议来编写程序,实现从本地计算机发送电子邮件的功能。CDO是Microsoft提供的...
Powerbuilder 通过CDO发送Email
使用 `CreateObject("cdo.message")` 创建邮件对象,并通过 `.Configuration.Fields` 设置发件人信息、授权码、SMTP服务器等参数。`smtpauthenticate = 1` 表示使用SMTP服务器需要身份验证,`smtpusessl = False` ...
CDO库提供了对邮件发送的全面控制,包括设置发件人、收件人、主题、正文以及附件等。 首先,我们需要确保服务器上已经安装了CDO库。在IIS(Internet Information Services)中,这个通常是默认安装的。如果没有,...
CDO(Collaboration Data Objects)是微软提供的一种COM组件,它允许开发者通过编程方式与邮件服务器交互,实现邮件的发送。在C#中,我们可以利用CDO组件中的`MessageClass`对象来构造邮件,并通过`Configuration`...
在VBA中,如果选择使用CDO而不是Outlook,可以通过`CDOSYS`组件来发送邮件。CDO提供了一种与邮件服务器通信的抽象层,支持多种邮件协议,如SMTP(Simple Mail Transfer Protocol)。配置好CDO后,同样可以设置邮件...
以下是使用CDO发送EML文件的步骤: 1. 添加对CDO库的引用:在项目中右键点击“添加引用”,然后选择“COM”选项卡,找到并添加“Microsoft CDO for Windows 2000 Library”。 2. 创建CDO.Message对象并设置配置: ...
定时自动发送邮件源文件 当设定好时间和接受邮箱就可以发送 系统自带 CDO组件 WINDOW 2003 中需要注册CDO组件
CDO(Collaboration Data Objects)是一个用于构造和发送邮件、访问目录服务、管理消息队列等的API,因此,CDO.Message对象被用来通过脚本发送邮件。 在实现VBS发送邮件的过程中,需要设置邮件的主题(Subject)、...
在Visual FoxPro(VFP)中实现邮件发送功能,虽然其内置支持并不直接提供发送短信的服务,但可以通过一些变通的方式实现。这个过程通常涉及到利用SMTP(Simple Mail Transfer Protocol)服务来发送电子邮件,然后...
C#CDO,NET.MAIL,调用outlook发送邮件 三种办法发送邮件。 三种都测试通过的。 可以使用。 CDO是内网使用代理上网时使用。 调用outlook的方法,没有outlook时无法使用。 net.mail不是代理上网的环境时使用,在代理...
通过CDO,开发人员能够轻松地创建、发送和接收邮件,而无需深入了解底层协议如SMTP或IMAP等细节。这使得CDO成为了在ASP中实现邮件功能的理想选择。 #### ASP中的CDOSYS组件 CDOSYS是ASP环境下的一个内置对象,可以...
关于VBA邮件发送经过几天的整理,整理出利用CDO,OUTLOOK,MSMAPI进行邮件发送,绝对是想利用VBA做邮件发送的理想材料。通过例子程序简单明了的介绍了这三种邮件发送方式。
全自动通过vba发送邮件,调用stmp服务器直接发送 不用outlook支持,需要stmp用户名和密码... <br>主要原理是基于cdo.dll编程 <br>ps:上次发的基于Outlook发送邮件的VBA程序是半自动了,这次的版本是全自动了