2017-02-20 33 views
2

私は、受信ボックスに入ってくるすべてのメールをAccessデータベースに記録するためにOutlook VBAにスクリプトを書いています。私は問題なしでトリガしているコードです。 Accessデータベースに問題なくアクセスします。それは問題なしで主題全体をコピーします。それは体に届き、何もコピーしません。私は.Bodyの代わりに.HTMLbodyのようなものを試しましたが、これは再び空のボディを示しています。私のコードは次の通りです:VBA Outlook 2010受信メール.Body is empty

Option Explicit 
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) 
Dim objNS As Outlook.NameSpace 
Dim objEmail As Outlook.MailItem 
Dim strIDs() As String 
Dim intX As Integer 
Dim ws As DAO.Workspace 
Dim db As DAO.Database 
Dim sDb As String 
Dim sSQL As String 
Dim qdf As QueryDef 
strIDs = Split(EntryIDCollection, ",") 
For intX = 0 To UBound(strIDs) 
Set objNS = Application.GetNamespace("MAPI") 
Set objEmail = objNS.GetItemFromID(strIDs(intX)) 
    sDb = "C:\Users\######\Documents\EmailDatabase.accdb" 
    Set ws = DBEngine.Workspaces(0) 
    Set db = ws.OpenDatabase(sDb) 
    sSQL = "INSERT INTO AllEmails (Subject,Message) Values ('" & objEmail.Subject & "','" & objEmail.HTMLBody & "')" 
    Set qdf = db.CreateQueryDef("", sSQL) 
    qdf.Execute dbFailOnErro 
MsgBox objEmail.HTMLBody 
Next 
Set objEmail = Nothing 
End Sub 

私が間違っていることを知っている人は、私に知らせてください。 3時間のグーグル・グーグルはそれをソートしていないようです!

+0

メッセージボックスにも何も表示されませんか? – Jordan

+0

はい@ジョーダンメッセージボックスが開きます(何も障害はスローされません)。 – codeacker

+0

あなたのコード(F8)を踏んで、それが割り当てられたらあなたのローカルウィンドウで 'objEmail'を見ます。変数を展開するときに 'body'プロパティがあるかどうかを確認してください。 'GetItemFromID'が実際に' MailItem'を返すかどうかわかります –

答えて

0

NewMailExイベントハンドラから余分なコード(アクセス)を削除してください。 Outlookのパフォーマンスへの影響を最小限に抑えるには、この方法を慎重に使用してください。ただし、クライアントコンピュータのセットアップによっては、新しいメッセージが受信トレイに到着した後で、受信トレイから別のフォルダに新しいメッセージを移動するクライアントのルールや迷惑メールのような処理が非同期に発生する可能性があります。これらのイベントが発生すると、受信トレイ内のアイテムの数が常に1つ増えます。

EntryIDsCollection文字列には、その項目に対応するエントリIDが含まれています。 EntryIDCollectionに最後にイベントが発生してから受信トレイに受信されたすべてのアイテムのコンマ区切りエントリIDのリストが含まれている場合、この動作は以前のバージョンのイベントから変更されています。

+0

これは啓発のおかげです@eugene MSDNへのあなたのリンクは、NewMailExがIMAPではなくPOP3アカウントであることを説明しています。だから、最善の方法は、電子メールを受け取ったときにスクリプトを実行するルールを作成することでしょうか?その後、その電子メールをどのように識別しますか? – codeacker

+0

この場合、 'MailItem'のインスタンスがVBAマクロに渡されます。ルールに 'GetItemFromId'メソッドを使う必要はありません。 –

+0

私はこれを試してみましたが、それは問題のない対象を再び取得しますが、ボディは取得しません。つまり、メッセージをプレビューまたは開くまでダウンロードすることはできません。今私はその時点でそれをトリガーしようとしている...より多くのグーグルが必要:) – codeacker

関連する問題