2015-02-24 155 views
0

我想寫一個VBA腳本,當Outlook收到來自特定電子郵件地址的新電子郵件時,VBA腳本必須檢測並重新發送新收到的電子郵件地址簿中的所有聯繫人。收到新電子郵件時發送電子郵件給Outlook通訊簿中的所有聯繫人(VB)

現在我能夠發送電子郵件給所有聯繫人地址簿:

Sub SendEmails() 
Dim ContactsFolder As Folder 
Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) 
Dim Contact As Object 
Dim olApp As Outlook.Application 
Dim objMail As Outlook.MailItem 
Set olApp = Outlook.Application 

For Each Contact In ContactsFolder.Items 
    Set objMail = olApp.CreateItem(olMailItem) 
    With objMail 
     .Subject = "Subject of the received email" 
     .Body = "Body of the received email" 
     .To = Contact.Email1Address 
     .Send 
    End With 
Next 
End Sub 

,但如何使用這個腳本,所以當從一個特定的電子郵件地址收到新的電子郵件叫。

我試圖把這個ThisOulookSeassion檢查新郵件的事件,所以我可以在它叫我上面的代碼:

Private Sub Application_NewMail() 
MsgBox "New mail" 
End Sub 

,但沒有奏效。

而且我想這(我把它放在ThisOulookSeassion太):

Private WithEvents Items As Outlook.Items 
Private Sub Application_Startup() 
Dim olApp As Outlook.Application 
Dim objNS As Outlook.NameSpace 
Set olApp = Outlook.Application 
Set objNS = olApp.GetNamespace("MAPI") 
' default local Inbox 
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items 
End Sub 
    Private Sub Items_ItemAdd(ByVal item As Object) 

On Error Goto ErrorHandler 
Dim Msg As Outlook.MailItem 
If TypeName(item) = "MailItem" Then 
    Set Msg = item 
    ' ****************** 
    ' and placing my code here. 
    ' ****************** 
    End If 
ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 

但是當我點擊運行它問我要創建新的宏,並且不運行代碼。

有什麼建議嗎?

+1

*全部*聯繫人?你在製造病毒嗎? – 2015-02-24 14:25:25

+0

@DmitryStreblechenko哈哈,不,我只是想把每日新聞發送給訂閱者。而已 :) 。 – Omar 2015-02-24 15:09:32

回答

1

最簡單的方法是在Outlook中創建規則。然後,您可以分配一個現有的VBA宏,以在規則運行時運行。通常,VBA子謹下列之一:

Sub SendEmails(mail as MailItem) 
    Dim ContactsFolder As Folder 
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) 
    Dim objMail as MailItem 
    Dim Contact As Object 

    For Each Contact In ContactsFolder.Items 
     Set objMail = olApp.CreateItem(olMailItem) 
     With objMail 
     .Subject = mail.Subject 
     .Body = "Body Text" 
     .To = Contact.Email1Address 
     .Send 
     End With 
    Next 
End Sub 

你也可以考慮添加收件人收件人集合並設置其TypeolBCC值。因此,他們每個人都會收到一封單獨的電子郵件,而您只需提交一封郵件。

+0

謝謝@Eugene這是一個很好的解決方案,但有一個問題,我如何獲得主題和收到的電子郵件的標題,並在「SendEmails」宏中使用它而不是「測試消息」和「正文文本」? 也談到發送一個電子郵件通過將聯繫人在bbc中,而不是分別發送給每個人。這個解決方案的問題是大多數垃圾郵件過濾器認爲電子郵件是垃圾郵件。 – Omar 2015-02-24 15:07:21

+1

您已經獲得了作爲參數傳遞的MailItem類的實例。只需在那裏獲得必要的屬性。查看已更改的源代碼。 – 2015-02-24 17:06:12

相關問題