如何发送 base64Url 编码的原始电子邮件

本文关键字:原始 电子邮件 编码 何发送 base64Url | 更新日期: 2023-09-27 18:32:36

我收到了符合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 Raw邮件。Java有一个很棒的内置库,叫做javax.mail.internet(MimeMessage类(,它非常漂亮地完成了这项工作。我正在使用EWS托管的API与Exchange在线合作,它无法直接解析Gmail原始邮件。

已编辑:删除了编码的消息。

此致敬意

如何发送 base64Url 编码的原始电子邮件

正如您指出的字符串是base64url,您必须稍微调整以克服与原始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;
周六, 29 11月 2014 04:55:31 -0800
MIME 版本:1.0
X-无自动连接:1
收到: 通过 10.114.186.6;星期一, 17 十一月 2014 07:11:34 -0800 (PST( 日期:2014 年 11 月 29 日星期六 04:55:31 -0800
消息 ID:[为保护隐私而删除]
主题:使用新收件箱
的提示 发件人:[为隐私而删除]
收件人:"您的团队@365innovate"<[出于隐私原因删除]>
内容类型:多部分/替代;边界=001A11C33C7AEE86EE05080F6437

-

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

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

如果要使用 EWS 服务在电子邮件中发送内联图像Microsoft则可以将图像作为附件发送并将其设置为内联。以下是将 MIMEMessage 转换为电子邮件格式的分步指南 - https://azaylamba.medium.com/converting-mimemessage-to-emailmessage-while-sending-email-using-microsoft-ews-service-a-57137e281f53