从MailBee读取.eml文件时的编码问题
本文关键字:编码 问题 文件 MailBee 读取 eml | 更新日期: 2023-09-27 17:52:38
这与我们使用的邮寄工具有关:MailBee,它非常容易使用。
- 我们创建一个邮件(定义消息主体和附件,如果需要)
- 我们创建联系人列表并将其添加到DataTable
- 我们调用MailBee的AddJob方法,它生成一个ANSI格式的。email文件
- 文件写入完成后,我们读取文件并使用:
Match match = Regex.Match(recipient, @"""(.*?)"" <(.*?)>");
找到
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之前所做的事情。但我无法验证
您正在尝试将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时,它就解决了。