我收到了符合Gmail RFC 2822的消息,其中包含所有内容(标题,正文,主题等)。消息是base64url编码。我试图解析此消息并将其发送到Exchange在线。到目前为止,我已经尝试过Sasa Mime库,但这个伟大的图书馆对我来说并不适用。
string strRaw = System.IO.File.ReadAllText(@"G:\raw.txt");
var mail = Sasa.Net.Mail.Message.Parse(strRaw);
上述代码因以下异常而失败: 异常详细信息:System.ArgumentOutOfRangeException:Length不能小于零。 参数名称:长度
我请你告诉我哪个免费的Mime库可以用来解析Gmail Raw消息。 Java有一个很棒的内置库,叫做javax.mail.internet(MimeMessage类),可以很好地完成工作。我正在使用EWS托管Api在线使用Exchange,并且无法直接解析Gmail原始邮件。
已编辑:已删除已编码的邮件。
最好的问候,
答案 0 :(得分:4)
如您所示,字符串为base64url,您必须稍微调整以克服与wikipedia article中所示的原始base64的区别。
下表显示了差异:
standard | 62 | 63 | pad
-------------------------
base64 | + | / | =
base64Url | - | _ | N/A
使用这些知识,可以清楚地知道如何从base64Url转换为Convert.FromBase64String使用的base64标准。
此代码显示了它的工作原理:
var base64Url = "UmVjZWl2 ..... rest of your base64url string ... -";
// replace - and _ with their base64 chars
var sb64 = new StringBuilder(base64Url)
.Replace('-','+')
.Replace('_', '/');
var bin = Convert.FromBase64String(sb64.ToString());
Encoding.ASCII.GetString(bin).Dump("valid");
使用上面的代码在我的控制台(部分)中转储了以下结果:
收到:来自removed.googleusercontent.com
名字未知的 作者:gmailapi.google.com
使用HTTPREST;
2014年11月29日星期六04:55:31 -0800
MIME版本:1.0
x-no-auto-attachment:1
收到:10.114.186.6;星期一,2014年11月17日07:11:34 -0800(太平洋标准时间) 日期:星期六,2014年11月29日04:55:31 -0800
消息标识:[为隐私而删除]
主题:使用新收件箱的提示
来自:[为隐私而移除]
致:"您的团队@ 365innovate" < [为隐私而移除]>
内容类型:multipart / alternative; boundary = 001a11c33c7aee86ee05080f6437- 001a11c33c7aee86ee05080f6437
内容类型:text / plain;字符集= UTF-8
Content-Transfer-Encoding:quoted-printable使用新收件箱的提示
[image:Google]