我们的防火墙用户发送消息请求解除对他们认为不应被阻止的某些网站的阻止。他们的消息主题字段包含此类网站 url。实际上,每条消息发送一个 url。由于用户数量的增加,预计每天会收到数百或可能数千条消息。
是否有一个 Outlook 宏可以将此类 url(从收到的邮件主题字段)收集或提取到一个文本文件中,而无需打开任何邮件?
非常感谢您对此事的任何帮助。
提前致谢
我们的防火墙用户发送消息请求解除对他们认为不应被阻止的某些网站的阻止。他们的消息主题字段包含此类网站 url。实际上,每条消息发送一个 url。由于用户数量的增加,预计每天会收到数百或可能数千条消息。
是否有一个 Outlook 宏可以将此类 url(从收到的邮件主题字段)收集或提取到一个文本文件中,而无需打开任何邮件?
非常感谢您对此事的任何帮助。
提前致谢
请将此代码写入您的 Outlook VBA 模块。在下面的一些行中更改文件夹和目标文件的一些名称。有关其他信息,请参阅 sub 中的注释。
Sub Retrieve_http()
'our Outlook folder- deifinitions
Dim myItem As MailItem
Dim myFolder As Folder
Dim myNamespace As NameSpace
Set myNamespace = Application.GetNamespace("MAPI")
'put your folders name here
'1st one is store folder which should refer to firewall_support@iuass.org
'second is possibly 'inbox folder'
Set myFolder = myNamespace.folders("firewall_support@iuass.org").folders("inbox")
'destination file
Dim resFile As String
resFile = "c:\Users\Kazik\Desktop\httpRequest.txt"
Dim ff As Byte
ff = FreeFile()
'creating or opening it- each time you run this macro we will append data
'until deletion of either file or its content
Open resFile For Append As #ff
For Each myItem In myFolder.items
If InStr(1, myItem.Subject, "http://") > 0 And _
InStr(1, myItem.Subject, "classified under:") > 0 Then
'write to file
Write #ff, myItem.Subject
End If
Next
Close #ff
End Sub
编辑以包括适当的删除过程和对图片的代码引用。
下图显示 Outlook 窗口(波兰语版),其中: Business Mail 是顶级文件夹之一(指单独的 .pst 文件)。“Skrzynka odbiorcza”只是“收件箱”。
搜索某些电子邮件、检索电子邮件主题并随后删除电子邮件的代码如下所示:
Sub Retrieve_http()
'our Outlook folder- deifinitions
Dim myItem As MailItem
Dim myFolder As Folder
Dim myNamespace As NameSpace
Set myNamespace = Application.GetNamespace("MAPI")
'put your folders name here
Set myFolder = myNamespace.folders("Business Mail").folders("skrzynka odbiorcza")
'destination file
Dim resFile As String
resFile = "c:\Users\Kazik\Desktop\httpRequest.txt"
Dim ff As Byte
ff = FreeFile()
'creating or opening it- each time you run this macro we will append data
'until deletion of either file or its content
Open resFile For Append As #ff
Dim i!
For i = myFolder.items.Count To 1 Step -1
If InStr(1, myFolder.items(i).Subject, "http://") > 0 And _
InStr(1, myFolder.items(i).Subject, "classified under") > 0 Then
'write to file
Write #ff, myFolder.items(i).Subject
'delete item
myFolder.items(i).Delete
End If
Next
Close #ff
End Sub
这是您问题的解决方案:)
当您制作 For Each Outlook 时,它会枚举每封电子邮件。如果您在 For Each 循环中移动任何电子邮件,则 Outlook 会更改文件夹中所有电子邮件的数量,但不会更改循环的迭代次数。这会导致一些消息将不会被读取。
解决方案是从最后一封电子邮件开始循环,如此处提到的 Outlook 宏,以从大量邮件的“主题字段”中收集/提取数据到文本文件中
代码:将(对于 Inbox.Items 中的每个 InboxMsg)替换为
For i = Inbox.Items.Count To 1 Step -1 '从末端向后迭代 Set InboxMsg = Inbox.Items(i)