【问题标题】:send outlook mail from excel vba从 excel vba 发送 Outlook 邮件
【发布时间】:2013-05-27 01:42:11
【问题描述】:

我有以下发送 Outlook 邮件的代码。但是当 Outlook 关闭时,这将不起作用。
Sub DraftMail(emailAddr, strBody, strSub)
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = GetObject(, "Outlook.Application")
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
End If Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
    .To = ""
    .CC = ""
    .BCC = emailAddr
    .Subject = strSub
    .HTMLBody = strBody
    .Send   'or use .Display
    .ReadReceiptRequested = True
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing

End Sub

即使前景关闭,任何人都可以帮助我使其工作吗?

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    试试这个代码: (未测试)

    Sub SendMail()
    
        Dim iMsg As Object
        Dim iConf As Object
        Dim Flds As Variant
    
    
        Set iMsg = CreateObject("CDO.Message")
        Set iConf = CreateObject("CDO.Configuration")
    
        iConf.Load -1
        Set Flds = iConf.Fields
    
        With Flds
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<server>"
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
            .Update
        End With
    
        With iMsg
    
            Set .Configuration = iConf
            .To = "test@gmail.com"
            .From = "test@gmail.com"
            .Subject = "MIS Reports" & " " & Date & " " & Time
            .TextBody = "Link to Currency Data :" & vbNewLine & "<" & myDest & ">"
            .Send
        End With
    
        Set iMsg = Nothing
        Set iConf = Nothing
    
    End Sub
    

    【讨论】:

    • 感谢 Santosh 的回复。但我只需要通过 Outlook 发送邮件。您能否修改我的代码以使其正常工作
    • @Tjs 您需要输入服务器详细信息,从电子邮件 ID 更改为,希望它甚至适用于 Outlook。
    【解决方案2】:

    首先你有任何错误处理吗?例如,如果您调用 getObject 并且它已关闭,您应该得到一个错误?

    因此,大多数人使用的方式是调用 get object,如果出现错误,则他们知道 Outlook 已关闭并创建一个新实例。

    如果您想非常精确,错误代码编号是 429,例如此代码请参见此处Link to previous question.

    为了让你开始,这也应该有效

    On Error Resume Next
    
    Set OutApp = GetObject(, "Outlook.Application")
    If OutApp Is Nothing Then
       Set OutApp = CreateObject("Outlook.Application")
    End If
    

    一旦你有这个工作,那么你可以删除“On Error Resume Next”并根据需要捕获特定的错误 429,然后你就知道该错误是因为 Outlook 没有运行。

    【讨论】:

      【解决方案3】:

      最简单的做法是构造一个mailto:// url 并通过shell command 运行它。

      您必须URL encode 主题和正文才能正确显示。

      示例(在 Windows 中粘贴运行命令):

      mailto://user@domain.com?subject=New%20Email&amp;body=This%20is%20the%20message%20body.

      【讨论】:

        猜你喜欢
        • 2018-07-24
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 2022-12-13
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多