解析邮件正文时如何剥离签名图像?

时间:2017-11-28 23:09:13

标签: c# asp.net regex regex-negation regex-group

我只使用以下方法从电子邮件正文中捕获所有有效的电子邮件地址。

 public static IEnumerable<string> ParseAllEmailAddressess(string data)
    {
        HashSet<String> emailAddressess = new HashSet<string>();
        Regex emailRegex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.IgnoreCase);
        MatchCollection emailMatches = emailRegex.Matches(data);
        foreach (Match emailMatch in emailMatches)
        {
            emailAddressess.Add(emailMatch.Value);
        }
        return emailAddressess;
    }

这里的问题是Outlook将签名图像转换为一些随机的电子邮件地址,如(image001.png@01D36870.C9EE4D60)。我的方法将其视为有效的电子邮件地址并捕获它。我想在解析电子邮件正文时剥离这样的电子邮件地址。

我可以考虑拆分电子邮件地址。在@ site之前,使用第一个索引匹配图像扩展名“.png”以识别是否有效的电子邮件。但我觉得效率不高。应用一些reg ex来剥离签名图像内容会很快。

任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我最终创建了以下方法来从电子邮件正文中剥离签名图像电子邮件地址。

  public static readonly string[] _validExtensions = { "jpg", "bmp", "gif", "png", "jpeg","tiff","raw","psd" };

    public static bool IsImageExtension(string email)
    {
        bool isContainsImageExt = false;           

            MailAddress addr = new MailAddress(email);
            string username = addr.User;
            if (!string.IsNullOrEmpty(username) && username.Contains('.'))
            {
                String[] parts = username.Split(new[] { '.' });
                if(!string.IsNullOrEmpty(parts[0]) && !string.IsNullOrEmpty(parts[1]))
                {
                    if(_validExtensions.Contains(parts[1].ToLower()) && (parts[0].ToLower().Contains("image")))
                    {
                         isContainsImageExt = true;
                    }
                }
            }

        return isContainsImageExt;
    }