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

本文关键字:编码 问题 文件 MailBee 读取 eml | 更新日期: 2023-09-27 17:52:38

这与我们使用的邮寄工具有关:MailBee,它非常容易使用。

  1. 我们创建一个邮件(定义消息主体和附件,如果需要)
  2. 我们创建联系人列表并将其添加到DataTable
  3. 我们调用MailBee的AddJob方法,它生成一个ANSI格式的。email文件
  4. 文件写入完成后,我们读取文件并使用:Match match = Regex.Match(recipient, @"""(.*?)"" <(.*?)>");
  5. 找到To:字符串。

这个值似乎是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之前所做的事情。但我无法验证

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

您正在尝试将ANSI字符串转换为UTF-8。这就是为什么你会看到这个错误。

而不是……

Encoding.UTF8.GetString(bytes);

尝试使用:

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

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

解码失败的原因是Mailbee编码的字符串从一开始就是错误的。

我发现你可以指定RequestEncoding和ResponseEncoding的mailbee,我设置为Encoding.UTF8

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