即使缺少预期的附件,如何生成电子邮件?

Posted

技术标签:

【中文标题】即使缺少预期的附件,如何生成电子邮件?【英文标题】:How to generate email even when expected attachment is missing? 【发布时间】:2020-05-25 07:10:12 【问题描述】:

通过浏览互联网,我创建了一个带有宏的 Excel 文件,用于将电子邮件发送到不同的地址,每封电子邮件都带有不同的附件。

仅当所有文件都存在时才有效。 文件地址是自动定义的,每个月我都会发送附有 2 或 3 个文件的电子邮件,但有时文件地址没有文件,因此 VBA 不会生成电子邮件。

即使文件不存在,我也需要使用现有文件创建电子邮件。

Sub send_email_with_multiple_attachments()
    
    On Error Resume Next
    
    Dim o As Outlook.Application
    Set o = New Outlook.Application
    Dim omail As Outlook.MailItem
    
    Dim i As Long
    
    For i = 2 To Range("c100").End(xlUp).Row
        Set omail = o.CreateItem(olMailltem)
        With omail
            .Body = "Caro cliente " & Cells(i, 2).Value
            .To = Cells(i, 3).Value
            .CC = Cells(i, 4).Value
            .Subject = Cells(i, 5).Value
            .Attachments.Add Cells(i, 6).Value
            .Attachments.Add Cells(i, 7).Value
            .Attachments.Add Cells(i, 8).Value
            .Attachments.Add Cells(i, 9).Value
            .Attachments.Add Cells(i, 10).Value
            .Display
        End With
    Next
    
End Sub

【问题讨论】:

请注意,如果您将On Error Resume Next 放在没有错误处理的情况下,此行会隐藏所有 错误消息,直到End Sub 但错误仍然存​​在,您只是看不到它们的消息。这意味着如果你没有看到你的错误,你就无法修复它们,如果你不修复它们,你的代码就无法工作。删除该行并修复您的错误或实施完整的错误处理 (VBA Error Handling – A Complete Guide)。 【参考方案1】:

在将单元格添加为附件之前,您需要检查单元格的内容。 看下面的代码,复习一下代码cmets:

Option Explicit

Sub send_email_with_multiple_attachments()

' section of all objects and parameters declaration
Dim o As Outlook.Application
Dim omail As Outlook.MailItem
Dim strFileExists As String
Dim i As Long, j As Long

Set o = New Outlook.Application

For i = 2 To Range("c100").End(xlUp).Row
    Set omail = o.CreateItem(olMailItem)
    With omail
        .Body = "Caro cliente " & Cells(i, 2).Value
        .To = Cells(i, 3).Value
        .CC = Cells(i, 4).Value
        .Subject = Cells(i, 5).Value

        ' add second loop to check all cells with possible attachments
        For j = 6 To 10
            ' make sure cells is not empty
            If (Cells(i, j).Value) <> "" Then
                strFileExists = Dir(Cells(i, j).Value) ' make sure file exits in current cell
                If strFileExists <> "" Then ' only if file exits add as attachment
                    .Attachments.Add Cells(i, j).Value
                End If
            End If
        Next j

        .Display
    End With
Next

End Sub

【讨论】:

以上是关于即使缺少预期的附件,如何生成电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gmail API 发送的邮件中缺少附件,但仅适用于收件人

在批准报价、运行报告、生成 PDF 并发送带有 PDF 作为附件的电子邮件

如何返回最近收到的电子邮件?

生成带有 Excel XLSX 附件的电子邮件

Apple 或 Mac Mail 会打开所有附件图像,即使它们是嵌入的

Swiftmailer 的多个附件