2017-02-03 5 views
-2

タスクスケジューラを介して実行するスクリプトがあり、未読メールがないかどうかをチェックし、以下のような電子メールアラートを送信します。これをさらに強化するために、私は未読のメールをチェックし、「x」分より古いメールのみを送信する必要があります。x分より古いOutlookセッションで未読メールを確認するVBS

これを最も効果的に実行する方法についてのご意見はありますか?

おかげ

さらに答えで推奨コードを含めて、以下の更新されたコードを参照してください - 以下ただし、これは構文エラーに

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 "[email protected]" 
end if 

end sub 

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

With oItem 
    .To = address 
    .Subject = "There are unread emails" 
    .Body = "Please investigate the mailbox." 
    .send 
End With 
end sub 

を引き起こし編集されたバージョン:

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) 

'look at unread emails 
Set UnreadItems = objFolder.Items 

'send mail if mails are unread and older than 15 mins 
For i = UnreadItems.Count To 1 Step -1 
If TypeName(UnreadItems.Item(i)) = "MailItem" Then 
    If DateDiff("n",now, UnreadItems.Item(i).ReceivedTime) > 15 Then 
    sendMail "[email protected]" 
    end if 
end if 
Next 

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

    With oItem 
    .To = address 
    .Subject = "There are unread emails" 
    .Body = "Please investigate the mailbox." 
    .send 
End With 
end sub 
+0

Items.Find/FindNextまたはItems.Restrictを使用してフォルダ内のすべてのアイテムをループしないでください。 –

答えて

0

このすべき仕事:

Set UnreadItems = objFolder.Items 
For i = UnreadItems.Count To 1 Step -1 
If TypeName(UnreadItems.Item(i)) = "MailItem" Then 
    If DateDiff("n",now, UnreadItems.Item(i).ReceivedTime) > 15 Then 
    //Do something 
    End If 
End If 
Next 
+0

ありがとう、私はスクリプトにこれを含めてみましたが、34行目、char 1、コード800A03EAで構文エラーが発生します。私は何を変える必要があるかわからない!上記の元の質問の編集されたバージョンを参照してください:) –

+1

フォルダ内のすべてのアイテムをループしないで、Items.Find/FindNextまたはItems.Restrictを使用してください –

0

タスクスケジューラのOutlookオブジェクトモデルを使用しないでください。サービスとして実行され、Officeアプリケーション(Outlookを含む)はサービスから使用できません。あなたのコードは遅かれ早かれ打ち切られます。

関連する問題