如何删除电子邮件中的重复内容?

如何删除电子邮件中的重复内容?

我想自动删除收到的电子邮件中的重复消息内容。

例如,每当我与公司中的某个人交换电子邮件时,我都希望能够过滤掉对话中无用的、重复的内容,如签名和标题(发件人:、日期:、抄送:、主题:...)。

我没有使用过宏/VBA,在我能接触到的 Outlook/VB 书籍中也找不到任何技巧。我有一些使用 Python 的经验,但它非常基础(我参加了《艰难学习 Python》课程)。

答案1

这个答案(由我本人提供)提供了图形化的分步演示,说明如何设置规则并编写修改传入电子邮件的宏收到后对尸体做一些处理。

您只需调整代码进行处理以删除您不想看到的“重复内容”。

从计算角度来看,删除重复内容的一般问题实际上相当复杂。

假设“重复字符串”是文本中已经出现的子字符串,那么您将得到如下循环结构(伪代码(请勿尝试将其复制到程序中):

For i = 1 To Len(str)
    For j = i To Len(str)
        needle = substring(str, i, j)
        nlen = Len(needle)
        For k = 1 To Len(str)
            match = substring(str, k, k + nlen)
            If needle = match Then
                '...do stuff
            End If
        Next
    Next
Next

听起来相当复杂。此外,这种循环会捕获诸如“Pettitte”(姓氏)之类的内容并将其更改为“Peti”(其余字符是长度为 1 的子字符串,已经出现过)。您必须为“needle”设置一个最小长度,以避免字母表中每个字母最多出现一个实例。然后,您必须对字符串进行一些分析,以确定它是“标题文本”还是您想要删除的内容。否则,它会捕获诸如“你不应该这样做。我真的强烈建议你不要这样做。”之类的内容,并将其更改为“你不应该这样做。我真的强烈建议你”

如果你不想一般用途(天真的)查找重复内容的方法可能会删除很多有意义的内容,你必须决定:

  • 尝试检测哪些子字符串的重复项;
  • 保留哪些重复实例以及删除哪些重复实例。

VBA 中的和函数应该会有所帮助。在 VBA 编辑器中按下键盘上的InStr,查看各个模块中可用的函数列表。VBA 模块中的内置字符串函数应该很有用。MidF2

我认为目前还没有现成的格式可供您使用,但如果您只想删除多余的邮件标头,如 From:、To:、Subject:,那么使用一些子字符串或正则表达式匹配应该很容易检测到它们。如果您真的被代码困住了,我认为 StackOverflow 问题作为后续问题会更合适。

相关内容