【问题标题】:How to send base64Url encoded Raw Email message?如何发送 base64Url 编码的原始电子邮件消息?
【发布时间】:2014-12-18 02:28:05
【问题描述】:

我收到了符合 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:长度不能小于零。 参数名称:长度

请您告诉我可以使用哪个免费的 Mime 库来解析 Gmail 原始邮件。 Java 有一个很棒的内置库,称为 javax.mail.internet(MimeMessage 类),它可以很好地完成这项工作。我正在使用 EWS 管理的 Api 与 Exchange Online 一起使用,它无法直接解析 Gmail 原始邮件。

Edited :删除了编码的消息。

最好的问候,

【问题讨论】:

  • 如果消息是base64编码的,你可以使用:msdn.microsoft.com/en-us/library/dhx0d524%28v=vs.110%29.aspx。除此之外:推荐库在 StackOverflow 上是题外话,因为它经常引发关于哪个库更好的讨论。谷歌不太可能开始这样的讨论:google.com/webhp?q=c%23%20base%2064%20encoding
  • 先生,我已经在使用 base64url 编码器-解码器功能了。 C# 没有对此类函数的内置支持,但它们具有编码/解码 base64 或 base64url 的功能。我的问题是我无法解析 gmail 原始消息以交换可读格式。这样我就可以发送这个原始消息以编程方式进行交换。

标签: c# exchangewebservices gmail-api


【解决方案1】:

正如您指出的字符串是 base64url,您必须稍微调整以克服与原始 base64 的差异,如 wikipedia article 所示。

下表显示了差异:

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");

使用上面的代码将以下结果转储到我的控制台中(部分):

收到:来自 remove.googleusercontent.com
名字不详
通过 gmailapi.google.com
使用 HTTPREST;
2014 年 11 月 29 日星期六 04:55:31 -0800
MIME 版本:1.0
x-无自动附加:1
收到:10.114.186.6; 2014 年 11 月 17 日星期一 07:11:34 -0800(太平洋标准时间) 日期:2014 年 11 月 29 日星期六 04:55:31 -0800
消息 ID:[出于隐私考虑已删除]
主题:使用新收件箱的提示
来自:[出于隐私原因删除]
致:“您的团队@365innovate”
内容类型:多部分/替代;边界=001a11c33c7aee86ee05080f6437

--001a11c33c7aee86ee05080f6437
内容类型:文本/纯文本;字符集=UTF-8
内容传输编码:引用打印

使用新收件箱的提示
[图片:谷歌]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多