【问题标题】:How to create a vbs to check for unread emails如何创建一个 vbs 来检查未读邮件
【发布时间】:2014-01-22 19:16:12
【问题描述】:

我一直在寻找有关如何为 Outlook 创建 Visual Basic 脚本的方法,并且大部分建议都来自该网站。不幸的是,它们都不能满足我的确切需求。

脚本原因:

我的一些同事可以访问并打算检查一个共享邮箱,但有时这可能会被忽略。我想创建一个脚本来检查此共享邮箱中的未读电子邮件,并在文件夹包含超过 10 封电子邮件时向特定联系人发送电子邮件。

到目前为止我所尝试的:

Option Explicit

 Private Sub Main()
  Dim olMAPI As Outlook.NameSpace
  Dim Folder As Outlook.MAPIFolder
  Const FOLDER_TO_OPEN = "Mailbox - John Doe"   'Modify as appropriate

  Set olMAPI = GetObject("", "Outlook.Application") _
                          .GetNamespa   ce("MAPI")
  Call PrintFolderNames(olMAPI.Folders(FOLDER_TO_OPEN), "->")
  Set olMAPI = Nothing
End Sub

 Sub PrintFolderNames(tempfolder As Outlook.MAPIFolder, a$)
  Dim i As Integer
  If tempfolder.Folders.Count Then
     Debug.Print a$ & " " & tempfolder.Name & "  ";
     Debug.Print tempfolder.UnReadItemCount
     For i = 1 To tempfolder.Folders.Count
       Call PrintFolderNames(tempfolder.Folders(i), a$ & "->")
     Next i
  Else
     Debug.Print a$ & " " & tempfolder.Name & "  ";
     Debug.Print tempfolder.UnReadItemCount
  End If
 End Sub

我曾尝试先创建一个脚本来检查特定文件夹中的未读电子邮件,但这通常会因语法/运行时错误而失败。我试过了:

但这会带来一个编译错误,然后是一个语法错误。

我也试过了:

Const olFolderInbox = 6

Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon "Default Outlook Profile", , False, True    

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

Set colItems = objFolder.Items
Wscript.Echo colItems.Count

objOutlook.Quit

【问题讨论】:

  • 那么,究竟是什么错误?请不要让我们猜测。
  • 它要么返回语法错误,要么返回运行时 424 错误。它通常会突出显示语法错误的 Private Sub Main ()。

标签: vba vbscript outlook


【解决方案1】:

您必须安装 Outlook 才能使用此代码:

Const olFolderInbox = 6
Const olMailItem = 0
dim objOutlook

call checkForUnreadMails


sub checkForUnreadMails()
    dim objFolder, objNamespace

    'get running outlook application or open outlook
    Set objOutlook = GetObject(, "Outlook.Application")
        If objOutlook Is Nothing Then
            Set objOutlook = CreateObject("Outlook.Application")
        End If

    Set objNamespace = objOutlook.GetNamespace("MAPI")  

    'get inbox folder
    Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

    'send mail if more than 10 mails are unread
    if objFolder.UnReadItemCount > 10 then
        sendMail "your@mail.address"
    end if

    'send mail if more folder contains more than 10 mails
    'if objFolder.Items.Count > 10 then
    '   sendMail "your@mail.address"
    'end if
end sub

sub sendMail(address)
    dim oItem
    Set oItem = objOutlook.CreateItem(olMailItem)

    With oItem
         .To = address
         .Subject = "Unread mails!"
         .Body = "You have too many unread mails!"
         .send
    End With
end sub

【讨论】:

  • 非常感谢您提供此 Manu,请您指导我输入此内容的位置。我现在已经安装了 Vs Express for Desktop 2013,但我被告知可以通过按 ALT + F11 将其输入到 Outlook 中。
  • 嗨 Manu,我刚刚尝试运行此程序,但在 Outlook 的模块 1 中输入此内容时,我遇到了“无效的外部程序”错误,突出显示“调用 checkForUnreadMails”(ALT+F11)
  • 哦,我以为你需要一个 vbs 文件...尝试创建一个新的 vbs 文件并将此代码复制到其中。
  • 谢谢 Manu,我已经创建了文件并修改了相应的字段(电子邮件地址),我收到了 Line 35 Char 50 Exoected 'End' 错误。请帮忙。
  • 我已经稍微编辑了代码...请再试一次,一次不要修改字段。它对我有用...
猜你喜欢
  • 2011-04-29
  • 2015-07-27
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多