我正在尝试将电子邮件从公司的 Outlook 转发到公司外部的电子邮件帐户。我已获准这样做。
我想转发主题行中包含“Excel Friday”的任何电子邮件。
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
If Msg.Subject = "Excel Friday" Then
Dim myMail As Outlook.MailItem
Set myMail = Msg.Reply
myMail.To = "xxxxxx@fakemail.com"
myMail.Display
End If
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
我想将主题行中包含“Excel Friday”的任何电子邮件转发到另一个电子邮件地址。
但在代码中您检查主题行是否完全匹配:
If Msg.Subject = "Excel Friday" Then
相反,您需要寻找子字符串。要查找字符串中子字符串的位置,请使用Instr函数。
If Instr(Msg.Subject, "Excel Friday") Then
我还注意到您使用了 Reply 方法:
Set myMail = Msg.Reply
请改用Forward方法:
Set myMail = Msg.Forward
然后使用Send方法。
myMail.Recipients.Add "Eugene Astafiev"
myMail.Send
请注意,该代码基于ItemAdd事件处理程序。当大量项目一次添加到文件夹(超过 16 个)时,不会触发此事件。
您可以使用运行脚本规则来执行此操作
Sub ChangeSubjectForward(Item As Outlook.MailItem)
Item.Subject = "Test"
Item.Save
Set olForward = Item.Forward
olForward.Recipients.Add "Jasonfish11@domain.com"
olForward.Send
End Sub
如果使用 vba,您可以随时对文件夹中的所有邮件运行。
粘贴到 ThisOutlookSession 并运行
Sub ChangeSubjectThenSend()
Dim olApp As Outlook.Application
Dim aItem As Object
Set olApp = CreateObject("Outlook.Application")
Set mail = olApp.ActiveExplorer.CurrentFolder
For Each aItem In mail.Items
aItem.Subject = "New Subject"
aItem.Save
Set olForward = aItem.Forward
olForward.Recipients.Add "Jasonfish11@domain.com"
olForward.Send
Next aItem
End Sub
仅供参考,您可以使用基本规则和警报规则来执行此操作
为什么需要使用 VBA 宏?Outlook 允许手动完成工作。
抱歉,我粘贴了代码的旧版本之一(我猜我没有点击“保存”)。我确实将其更改为 msg.forward 和 mymail.send 我已经尝试过 Instr,但仍然无法让它工作。我如何知道我要搜索的“默认”收件箱是哪个文件夹?有没有可能我认为的默认收件箱实际上不是?抱歉,我刚刚接触来自 Excel 世界的 Outlook 宏,因此很多 Outlook 应用程序对我来说都是新的。
我建议从MSDN 中的Outlook 2010 中的 VBA 入门文章开始。尝试向代码中添加Debug.Print语句以查看幕后发生的情况。