基本上,我们有一个规则设置,当在传入消息的正文中检测到代码字时运行脚本.该脚本将在前面附加一个单词追加当前主题标题.例如,Before:"Test Message",After:"Dept - Test Message".有任何想法吗?
我在Outlook 2010中配置了两个Exchange帐户,但是我无法找到如何到达第二个帐户的收件箱.Session.GetDefaultFolder()总是返回第一个.
甚至枚举Session.Accounts,找到正确的帐户并调用Session.Account(found one).Store.GetDefaultFolder()返回错误的收件箱(来自默认的交换帐户,而不是辅助帐户).
我有大约17k的电子邮件包含订单,新闻,联系人等,可以追溯到11年前.
用户的电子邮件地址已经粗制滥造加密,通过改变停止抓取工具和垃圾邮件@要么*@*或'at'.
我正在尝试创建一个逗号分隔列表来构建我们用户的数据库.
该代码适用于编写文件和循环文件夹,因为如果我将发件人的电子邮件地址写入我当前正在使用电子邮件正文的文件,那么它打印正常.
问题是,Replaces没有改变*at*等@.
Private Sub Form_Load()
Dim objOutlook As New Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim objInbox As MAPIFolder
Dim objFolder As MAPIFolder
Dim fldName As String
fldName = "TEST"
' Get the MAPI reference
Set objNameSpace = objOutlook.GetNamespace("MAPI")
' Pick up the Inbox
Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
'Loop through the folders under the Inbox
For Each objFolder In objInbox.Folders
RecurseFolders fldName, objFolder
Next …Run Code Online (Sandbox Code Playgroud) 问题
我尝试了什么,我
看了现有的解决方案和工具,包括:
我决定采用代码路由,因为它相对简单,并且可以更好地控制重复报告的方式.
我将在下面发布自己的解决方案,因为它可能会帮助其他人
我希望看到其他可能的方法(也许是PowerShell)来解决这个问题,这可能比我的更好.
好吧,看起来有人之前遇到过这个问题,但我没有看到任何进一步的评论或解决方案.请参阅此问题的已接受答案中的编辑.
我的情况是这样的.
我在Win10 x64下使用Exchange电子邮件帐户运行Outlook 2013.我有时会将Outlook运行几天到一周或更长时间而不关闭它.
我想在将新项目添加到"已发送邮件"文件夹时引发事件.这需要在Application ItemSend事件发生之后发生,因为,比方说,我希望在发送消息后删除消息,这是您无法在ItemSend事件处理程序中执行的操作.
所以我有以下代码:
Public WithEvents goSent As Outlook.Items
Private Sub Application_Startup()
'Establish the global object for the folder we want to monitor.
Set goSent = Session.GetDefaultFolder(olFolderSentMail).Items
End Sub
Private Sub goSent_ItemAdd(ByVal Item As Object)
'Do stuff here.
End Sub
Run Code Online (Sandbox Code Playgroud)
一切都工作得很漂亮一天或更长时间,但最终ItemAdd事件处理程序停止射击.如果我进入VBA编辑器并手动运行Application_Startup,则它会再次开始工作.
[编辑:]另外一点信息:Application ItemSend无论Outlook运行多长时间,"内置"事件似乎总是可靠地触发.
[编辑2:]这一次,我在事件停止射击后让事情发生了一天.我打开了VBA编辑器并在Application ItemSend程序中加了一个断点.当它停止时,我查询了这个goSent物体并发现它(a)它仍然存在(而不是存在Nothing),但是(b)它只有昨天在那里的物品,大概是当它变得"不受限制"时已发邮件项目集合.当我Set在立即窗口中提交新语句时,它立即开始再次工作.
[编辑3:]我注意到MSDN文档说ItemAdd在类模块中放置自定义对象的事件处理程序 - 比如我的事件.我在ThisOutlookSession中有我的,但我的理解是ThisOutlookSession 是一个类模块.这有问题吗?
知道为什么会发生这种情况以及如何处理它?我考虑为每次触发时添加一个事件处理程序Application …
我正在尝试自动化我们发送给各种堆栈持有者的电子邮件过程.
我想根据公司代码过滤D列,并将电子邮件发送给O列中列出的人员(电子邮件不应重复),还需要包含CC(不重复)
以下是我正在尝试的VBA,但不能包括TO和CC.
Sub Send_Row_Or_Rows_2()
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Range
Dim Ash As Worksheet
Dim Cws As Worksheet
Dim Rcount As Long
Dim Rnum As Long
Dim FilterRange As Range
Dim FieldNum As Integer
Dim StrBody As String
Dim StrBody2 As String
Dim FileToAttach As String
Dim RngTo As Range
Set RngTo = Ash.Columns("H").Offset(1, 0).SpecialCells(xlCellTypeVisible)
StrBody = "<BODY style=font-size:11pt;font-family:Calibri>Dear Approver,<p>Please be informed that below invoices are waiting for your approval in BasWare for …Run Code Online (Sandbox Code Playgroud) 我写了一些Outlook VBA,需要用户选择一个邮件文件夹(来自他们的邮箱或外部PST).
目前,他们必须直接在代码中编辑路径 - 这不是远程用户友好或高效的.
有谁知道如何让对话框出现,允许用户浏览所有可用的文件夹和子文件夹,然后选择一个?
奖励积分如果它可以仅限于邮件文件夹,但它不是必需的.
早上好,
使用Outlook 2010我编译代码以发送保存在给定帐户的草稿文件夹中的所有电子邮件.现在我已经升级到Office 2013我收到一个错误...它是.Send位,它会丢失并显示错误消息:
"此方法不能与内联响应邮件项一起使用."
我确信有一种简单的方法可以发送草稿,但我已经在网上搜索过,但还是无法想象它.
Public Sub SendDrafts()
Dim lDraftItem As Long
Dim myOutlook As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim myFolders As Outlook.Folders
Dim myDraftsFolder As Outlook.MAPIFolder
'Send all items in the "Drafts" folder that have a "To" address filled
'Setup Outlook
Set myOutlook = Outlook.Application
Set myNameSpace = myOutlook.GetNamespace("MAPI")
Set myFolders = myNameSpace.Folders
'Set Draft Folder. This will need modification based on where it's
Set myDraftsFolder = myFolders("accounts@credec.co.uk").Folders("Drafts")
'Loop through all Draft Items
For lDraftItem = myDraftsFolder.Items.count …Run Code Online (Sandbox Code Playgroud) 背景:
使用Outlook规则触发脚本,我希望收到来自某些高可见性客户端的所有电子邮件后立即打开.
我已成功设置一条规则,当这些客户端向我发送电子邮件时会触发该规则 它看起来像这样:
我已经成功创建了一个脚本,可以打开对电子邮件的回复,具体取决于发送者是谁.它看起来像这样:
Sub OpenEmailImmediately(oEmail As Outlook.MailItem)
Select Case oEmail.Sender
Case "Jobs, Steve"
oEmail.Reply.Display
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但我已经使用.Sender属性实现了它.
问题:
我更愿意使用发件人的电子邮件地址(与我收到的每封电子邮件相关联的唯一值)实现此目的.不幸的是,oEmail.SenderEmailAddress我希望它包含电子邮件地址,仅适用于外部客户端.
在进行故障排除时,我发现我预计oEmail.SenderEmailAddress会有类似于此的值:
steve.jobs@apple.com
对于内部电子邮件,它具有与此类似的值:
/ O = APPLE/CN = RECIPIENTS/CN = JOBSS6738
题:
有没有办法可以使用标准电子邮件地址使这个脚本适用于内部和外部?
实施解决方案的代码:
使用下面的Dmitry答案,代码被修改为使用电子邮件地址:
Sub OpenEmailImmediately(oEmail As Outlook.MailItem)
If oEmail.SenderEmailType = "EX" Then
Select Case oEmail.Sender.GetExchangeUser().PrimarySmtpAddress
Case "steve.jobs@apple.com"
oEmail.Reply.Display
End Select
Else
Select Case oEmail.SenderEmailAddress
Case "tom.brady@patriots.com"
oEmail.Reply.Display
End Select
End If
End Sub
Run Code Online (Sandbox Code Playgroud) 在VBA中创建一个字典,我遇到了一些我很好奇的东西.
当我将Outlook Calendar Item对象添加到字典时ByRef,但当我添加一个灰色的Integer时,它就是ByVal.
我的两个问题是:
ByRef?我看了一下:Objects ByRef的VB字典,但它只讨论了对象的情况而不是整数的情况.
以下代码显示了发生的情况:
Sub checkbyref()
Dim gCal As Items
Dim dict As New Scripting.Dictionary
Set dict = New Scripting.Dictionary
Dim intCheck As Integer
intCheck = 5
Set gCal = GetFolderPath("\\GoogleSync\GoogleSyncCal").Items 'gets caledar items based on path
strMeetingStart = "01/5/2019 12:00 AM"
strGSearch = "[Start] >= '" & strMeetingStart & "'"
gCal.Sort "[Start]"
Set gCal = gCal.Restrict(strGSearch)
Debug.Print intCheck 'prints "5"
Debug.Print gCal(1).Start 'prints 1/7/2019 9:30:00 …Run Code Online (Sandbox Code Playgroud) outlook-vba ×10
vba ×7
outlook ×5
append ×1
dictionary ×1
excel ×1
excel-vba ×1
outlook-2010 ×1
outlook-2016 ×1
regex ×1