从MailBee读取.eml文件时出现编码问题

时间:2014-03-24 15:58:47

标签: c# encoding base64

这与我们使用的邮件工具有关:MailBee,非常易于使用。

  1. 我们创建一个邮件(如果需要,定义邮件正文和附件)
  2. 我们创建了一个联系人列表并将其添加到DataTable
  3. 我们调用MailBee的AddJob方法生成ANSI格式的.eml文件
  4. 完成文件编写后,我们使用以下内容阅读文件并找到To:字符串:Match match = Regex.Match(recipient, @"""(.*?)"" <(.*?)>");
  5. 此值似乎是base64编码的。这是我的单元测试解析的代码。

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            TestMethods.DecodeString("To: \"=?utf-8?B?QWJkdXJyYWhpbSDvv716Z2Vub2dsdQ==?=\" <email@somehost.com;;>");
            // This results in "Abdurrahim �zgenoglu" while it should be "Abdurrahim Özgenoglu"
        }
    }
    
    public class TestMethods {
        public static string DecodeString(string stringToDecode)
        {
            Match base64Match = Regex.Match(stringToDecode, @"=\?utf-8\?B\?(.*)\?=");
            if (base64Match.Success)
            {
                string encodedName = base64Match.Groups[1].Value;
                byte[] bytes = Convert.FromBase64String(encodedName);
                return Encoding.UTF8.GetString(bytes);
            }
    
            return stringToDecode;
        }
    }
    

    有关可能出现的问题的任何建议吗?我怀疑MailBee在将文本转换为base64之前做了些什么。但我无法验证。

2 个答案:

答案 0 :(得分:1)

您正在尝试将ANSI字符串转换为UTF-8。这就是您看到此错误的原因。

而不是......

Encoding.UTF8.GetString(bytes);

尝试使用:

Encoding.GetEncoding(1252).GetString(bytes);

或者

Encoding.GetEncoding("ISO-8859-1").GetString(bytes);

Source

答案 1 :(得分:0)

这种解码不起作用的原因是Mailbee编码的字符串从一开始就是错误的。

我找到的是你可以指定mailbee的RequestEncoding和ResponseEncoding,我设置为Encoding.UTF8

无论如何,当我这样做时它已经解决,并确保导入的包含名称的CSV首先是UTF8。