`
xieyunbiao
  • 浏览: 36935 次
  • 性别: 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()。

分享到:
评论

相关推荐

    Powerbuilder 通过CDO发送Email

    Powerbuilder 通过CDO发送Email

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

    本文实例讲述了C#使用CDO发送邮件的方法。分享给大家供大家参考。具体分析如下: CDO是一个名为Microsoft CDO For Exchange 2000 Library的COM组件,我们可以用它来连接SMTP Server,使用用户名/密码验证发送邮件。 ...

    EXCEL VBA 发邮件示例

    网上找的有CDO 发邮件的示例。 避免了使用OUTLOOK发邮件时的弹出框确认

    CDO邮件接收ASP案例

    一个简单邮件接收案例 CDO.Message CDO.Configuration

    CDO方法发送邮件

    利用CDO的Configuration对象,配置相关的信息,再利用CDO的Message对象,发送邮件。

    asp 发送邮件 cdo.message

    asp 发送邮件 cdo.message

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

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

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

    在本地下载个mail服务器软件(如CMailServer),设置好账户后,可以直接运行发送。

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

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

    VBA-sendMail

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

    Excel发送邮件 新

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

    Excel分条发送邮件

    Excel分条发送邮件, 可选择发送方式: Outlook 或CDO

    发送邮件发送,先提一下SMTP

    SmtpMail – 提供属性和方法通过使用windows 2000 CDOSYS 的消息组件的联合数据对象来发送邮件消息)。(Provides properties and methods for sending messages using the Collaboration Data Objects for Windows ...

    ASP用JMail、CDO发送邮件

    前一段时间有发过一个简单的JMAIL邮件发邮件的代码,今天就把这个代码做一个具体的注解,并增加了另外两个格式的代码,并举几个简单的例子: 首先是jmail.smtpmail的核心代码: 程序代码 &lt;&#37; Set jmail = ...

    使用 CDO 发送电子邮件:使用免费的 Microsoft 邮件组件 CDO 发送 HTML 格式的邮件-matlab开发

    CDO 代表协作数据对象,它随 Windows 2000、Windows XP 和 Windows Server 2003 一起提供。 在下面找到使用 emailtool_nodisplay 可能很有趣的不同场景。 % 用法 1 : emailtool_nodisplay 可用于监控贵公司软件的...

    cdo.dll sp3

    比如在Outlook 2003中使用CDO发送邮件时提示“有一个程序正试图访问保存于 Outlook 的电子邮件地址”,该文件解压至 C:\Program Files\Common Files\System\MSMAPI\2052 如果系统分区是其它盘符,把C改为...

    cdo-1.9.7.1-cygwin64-Win10.zip

    cdo 1.9.7.1 windows64位安装文件

    cdo_refcard.pdf

    Climate Data Operators (CDO)使用教程,常见命令汇总

Global site tag (gtag.js) - Google Analytics