如何发送base64Url编码的Raw Email消息?

时间:2014-11-29 14:04:11

标签: c# exchangewebservices gmail-api

我收到了符合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原始邮件。

已编辑:已删除已编码的邮件。

最好的问候,

1 个答案:

答案 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]