收到新电子邮件时发送电子邮件给Outlook通讯簿中的所有联系人(VB)
我想写一个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
但是当我点击运行它问我要创建新的宏,并且不运行代码。
有什么建议吗?
最简单的方法是在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
你也可以考虑添加收件人收件人集合并设置其Type到olBCC值。因此,他们每个人都会收到一封单独的电子邮件,而您只需提交一封邮件。
谢谢@Eugene这是一个很好的解决方案,但有一个问题,我如何获得主题和收到的电子邮件的标题,并在“SendEmails”宏中使用它而不是“测试消息”和“正文文本”? 也谈到发送一个电子邮件通过将联系人在bbc中,而不是分别发送给每个人。这个解决方案的问题是大多数垃圾邮件过滤器认为电子邮件是垃圾邮件。 – Omar 2015-02-24 15:07:21
您已经获得了作为参数传递的MailItem类的实例。只需在那里获得必要的属性。查看已更改的源代码。 – 2015-02-24 17:06:12
*全部*联系人?你在制造病毒吗? – 2015-02-24 14:25:25
@DmitryStreblechenko哈哈,不,我只是想把每日新闻发送给订阅者。而已 :) 。 – Omar 2015-02-24 15:09:32