【问题标题】:Email generator called from Application_NewMail is generating duplicate emails从 Application_NewMail 调用的电子邮件生成器正在生成重复的电子邮件
【发布时间】:2020-06-28 15:31:05
【问题描述】:

我有这个宏,它从指定文件夹中挑选文件 (pdf),然后将其作为附件通过电子邮件发送。

它通过 Application_NewMail 运行,然后链接到创建和保存 pdf 的 Excel 文件。

它有效,但附件在两封单独的电子邮件中发送了两次 - 我曾考虑编写另一个宏来删除重复的电子邮件,但我担心这可能会删除我不想删除的电子邮件。

文件夹路径和电子邮件地址已被占位符替换。

Sub Any_help_appreciated()

Dim objMail As Outlook.MailItem
Dim fso As Object 'Scripting.FileSystemObject
Dim strFile As String
Dim fsoFile 'As Scripting.File
Dim fsoFldr 'As Scripting.Folder
Dim dtNew As Date, sNew As String

Set fso = CreateObject("Scripting.FileSystemObject")

strFile = "FOLDER PATH" 'path to pdf folder

Set fsoFldr = fso.GetFolder(strFile)
dtNew = Now - TimeValue("00:00:30") 'select pdf if created in last 30 secs

For Each fsoFile In fsoFldr.Files

    If fsoFile.DateCreated > dtNew Then

        sNew = fsoFile.Path

        Set objMail = Application.CreateItem(olMailItem)

        With objMail
            .To = "email.address@email.com"
            .Subject = "Subject"
            .BodyFormat = olFormatPlain
            .Attachments.Add sNew
            .Send ' .send
        End With

    End If

Next fsoFile

End Sub

【问题讨论】:

  • 我认为您需要添加附件然后发送,因此将您的 objmail 创建等移至循环之前,并将您的 .send 移出循环之后。所以循环中的所有内容都是.attachments.add
  • @Nathan_Sav 感谢您的回复 - 同样的问题,它不喜欢 .send 不符合其他电子邮件规范的事实。
  • 新创建的文件是否打开?在运行代码时。
  • 我不明白select pdf if created in last 30 secs 的逻辑。您是否定期运行此代码?这可能造成了这个问题。
  • @0m3r 不是的,到时候已经保存关闭了。

标签: vba email outlook


【解决方案1】:

您收到两封电子邮件,因为Application_NewMail 事件处理程序执行了两次,并且连续发送了两封电子邮件(只有两封,因为服务器处理电子邮件需要一些时间)。我猜这是因为.To 的值email.address@email.com 是您用于测试的电子邮件帐户。

尝试添加一些检查 objMail.Send 的代码是否会执行两次,例如将内容写入文本文件、日志等。

或在处理完 PDF 文件后将其移至其他文件夹。

【讨论】:

  • 非常感谢,一旦我知道这是我可以解决这个问题的原因。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2013-04-08
  • 2010-10-27
相关资源
最近更新 更多