【发布时间】:2020-06-23 16:11:55
【问题描述】:
我有大约 17,000 封电子邮件,其中包含 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 objFolder
End Sub
Public Sub RecurseFolders(targetFolder As String, currentFolder As MAPIFolder)
If currentFolder.Name = targetFolder Then
GetEmails currentFolder
Else
Dim objFolder As MAPIFolder
If currentFolder.Folders.Count > 0 Then
For Each objFolder In currentFolder.Folders
RecurseFolders targetFolder, objFolder
Next
End If
End If
End Sub
Sub WriteToATextFile(e As String)
MyFile = "c:\" & "emailist.txt"
'set and open file for output
fnum = FreeFile()
Open MyFile For Append As fnum
Print #fnum, e; ","
Close #fnum
End Sub
Sub GetEmails(folder As MAPIFolder)
Dim objMail As MailItem
' Read through all the items
For i = 1 To folder.Items.Count
Set objMail = folder.Items(i)
GetEmail objMail.Body
Next i
End Sub
Sub GetEmail(s As String)
Dim txt = s
Do Until InStr(txt, "@") <= 0
Dim tleft As Integer
Dim tright As Integer
Dim start As Integer
Dim text As String
Dim email As String
text = Replace(text, " at ", "@", VbCompareMethod.vbTextCompare)
text = Replace(text, "'at'", "@", VbCompareMethod.vbTextCompare)
text = Replace(text, "*at*", "@", VbCompareMethod.vbTextCompare)
text = Replace(text, "*at*", "@", VbCompareMethod.vbTextCompare)
text = Replace(text, "<", " ", VbCompareMethod.vbTextCompare)
text = Replace(text, ">", " ", VbCompareMethod.vbTextCompare)
text = Replace(text, ":", " ", VbCompareMethod.vbTextCompare)
'one two ab@bd.com one two
tleft = InStr(text, "@") '11
WriteToATextFile Str(tleft)
WriteToATextFile Str(Len(text))
start = InStrRev(text, " ", Len(text) - tleft)
'WriteToATextFile Str(start)
'WriteToATextFile Str(Len(text))
'start = Len(text) - tleft
text = left(text, start)
'ab@bd.com one two
tright = InStr(text, " ") '9
email = left(text, tright)
WriteToATextFile email
text = right(text, Len(text) - Len(email))
GetEmail txt
Loop
End Sub
【问题讨论】:
-
你试过text = Replace(text, "at", "@", VbCompareMethod.vbTextCompare),即at中没有空格。替换函数不能使用通配符。
-
是的,我需要那里的空间,因为空间存在,我也需要删除它。 Replace 在任何行上都不起作用。
-
你能举一个替换语句中写的实际文本的例子吗?您也可以使用即时窗口对其进行测试。只需放置一个“?”,然后输入一个测试用例。
-
您的过程
GetEmail声明了一个变量txt,其初始值为参数s。但是,代码并没有使用这个变量,而是使用了text。这是您帖子中的错字,还是这实际上是您的代码?此外,倒数第三行再次调用该过程......好像它是一个递归函数。