`
xieyunbiao
  • 浏览: 38678 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

VBA通过CDO发送邮件

 
阅读更多

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()。

分享到:
评论

相关推荐

    计算机安全Ⅰ实验报告3.2:VBA+CDO发送邮件

    华南理工大学李家春老师的计算机安全Ⅰ选修课,目的“通过对VBA+CDO的使用,成功自动发送一封电子邮件”。 包含操作文档,完整的实验报告和相关文件

    CDO方法发送邮件

    ### CDO方法发送邮件 #### 一、CDO概述 CDO(Collaboration Data Objects)是一套由Microsoft...通过以上步骤,我们可以有效地利用CDO来发送带有特定配置的电子邮件。这对于自动化任务、通知系统等领域具有重要意义。

    CDO邮件接收ASP案例

    你可以通过这个对象来创建、读取、修改和发送邮件。以下是一些关于CDO.Message的重要属性和方法: 1. **Fields集合**: 这个集合允许你设置和获取邮件的各种属性,如发件人、收件人、主题、正文等。例如,`Message....

    EXCEL VBA 发邮件示例

    CDO是Microsoft的一项技术,它允许程序通过邮件服务器发送邮件,而无需用户交互。下面,我们将详细探讨如何使用VBA和CDO来发送邮件: 1. **引入CDO库**:首先,你需要在VBA代码中引入CDO库。在VBA编辑器中,选择...

    用CDO和SMTP协议发送Mail的源代码

    标题中的“用CDO和SMTP协议发送Mail的源代码”是指使用CDO(Collaborative Data Objects)组件和SMTP(Simple Mail Transfer Protocol)协议来编写程序,实现从本地计算机发送电子邮件的功能。CDO是Microsoft提供的...

    Powerbuilder 通过CDO发送Email

    Powerbuilder 通过CDO发送Email

    VBA定时群发邮件.docx

    使用 `CreateObject("cdo.message")` 创建邮件对象,并通过 `.Configuration.Fields` 设置发件人信息、授权码、SMTP服务器等参数。`smtpauthenticate = 1` 表示使用SMTP服务器需要身份验证,`smtpusessl = False` ...

    asp 发送邮件 cdo.message

    CDO库提供了对邮件发送的全面控制,包括设置发件人、收件人、主题、正文以及附件等。 首先,我们需要确保服务器上已经安装了CDO库。在IIS(Internet Information Services)中,这个通常是默认安装的。如果没有,...

    C#使用CDO发送邮件的方法

    CDO(Collaboration Data Objects)是微软提供的一种COM组件,它允许开发者通过编程方式与邮件服务器交互,实现邮件的发送。在C#中,我们可以利用CDO组件中的`MessageClass`对象来构造邮件,并通过`Configuration`...

    Excel分条发送邮件

    在VBA中,如果选择使用CDO而不是Outlook,可以通过`CDOSYS`组件来发送邮件。CDO提供了一种与邮件服务器通信的抽象层,支持多种邮件协议,如SMTP(Simple Mail Transfer Protocol)。配置好CDO后,同样可以设置邮件...

    c#解析eml、CDO解析发送eml(Demo)

    以下是使用CDO发送EML文件的步骤: 1. 添加对CDO库的引用:在项目中右键点击“添加引用”,然后选择“COM”选项卡,找到并添加“Microsoft CDO for Windows 2000 Library”。 2. 创建CDO.Message对象并设置配置: ...

    CDO.MESSAGE 定时 发送邮件 源代码

    定时自动发送邮件源文件 当设定好时间和接受邮箱就可以发送 系统自带 CDO组件 WINDOW 2003 中需要注册CDO组件

    VBS中用CDO.Message发送邮件的实现代码

    CDO(Collaboration Data Objects)是一个用于构造和发送邮件、访问目录服务、管理消息队列等的API,因此,CDO.Message对象被用来通过脚本发送邮件。 在实现VBS发送邮件的过程中,需要设置邮件的主题(Subject)、...

    VFP种实现发送邮件,不带附件,变通给手机发送短信。

    在Visual FoxPro(VFP)中实现邮件发送功能,虽然其内置支持并不直接提供发送短信的服务,但可以通过一些变通的方式实现。这个过程通常涉及到利用SMTP(Simple Mail Transfer Protocol)服务来发送电子邮件,然后...

    C#CDO,NET.MAIL,调用outlook发送邮件

    C#CDO,NET.MAIL,调用outlook发送邮件 三种办法发送邮件。 三种都测试通过的。 可以使用。 CDO是内网使用代理上网时使用。 调用outlook的方法,没有outlook时无法使用。 net.mail不是代理上网的环境时使用,在代理...

    asp使用 CDOSYS 发送电子邮件

    通过CDO,开发人员能够轻松地创建、发送和接收邮件,而无需深入了解底层协议如SMTP或IMAP等细节。这使得CDO成为了在ASP中实现邮件功能的理想选择。 #### ASP中的CDOSYS组件 CDOSYS是ASP环境下的一个内置对象,可以...

    VBA-sendMail

    关于VBA邮件发送经过几天的整理,整理出利用CDO,OUTLOOK,MSMAPI进行邮件发送,绝对是想利用VBA做邮件发送的理想材料。通过例子程序简单明了的介绍了这三种邮件发送方式。

    Excel发送邮件 新

    全自动通过vba发送邮件,调用stmp服务器直接发送 不用outlook支持,需要stmp用户名和密码... &lt;br&gt;主要原理是基于cdo.dll编程 &lt;br&gt;ps:上次发的基于Outlook发送邮件的VBA程序是半自动了,这次的版本是全自动了

Global site tag (gtag.js) - Google Analytics