将 Gmail API 邮件转换为 OpenPop Mime 邮件
Converting a Gmail API Message into an OpenPop Mime message
是否可以将 Gmail API 邮件转换为 OpenPop Mime 邮件?
目前,我有:
List<Message> messagesList = new List<Message>();
List<string> rawMessagesList = new List<string>();
foreach(Message m in messages)
{
Message m2 = service.Users.Messages.Get("me", m.Id).Execute();
string m3 = service.Users.Messages.Get("me", m.Id).Execute().Raw;
messagesList.Add(m2);
rawMessagesList.Add(m3);
}
string rMessage = rawMessagesList[0];
byte[] byteMessage = Encoding.ASCII.GetBytes(rMessage);
OpenPop.Mime.Message openPopMessage = new OpenPop.Mime.Message(byteMessage);
string newStringMessage = FindPlainTextInMessage(openPopMessage);
Console.Read();
不幸的是,它 returns 什么都不是,因为原始请求 returns 为空。是否有范围要求,或 gmail 不返回原始邮件的其他原因?
要获取Raw字符串,需要在GetRequest中指定Raw格式。
var emailRequest = svc.Users.Messages.Get("userId", "id");
emailRequest.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
var rawString = emailRequest.Execute().Raw;
此时rawString是一个base64url编码的字符串。在编码为字节之前,您必须将其转换为普通字符串(参见 https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-signature-08#appendix-C):
private static byte[] Base64UrlDecode(string arg)
{
// Convert from base64url string to base64 string
string s = arg;
s = s.Replace('-', '+').Replace('_', '/');
switch(s.Length % 4)
{
case 0:
break; // No pad chars in this case
case 2:
s += "==";
break; // Two pad chars
case 3:
s += "=";
break; // One pad char
default:
throw new Exception("Illegal base64url string!");
}
return Convert.FromBase64String(s);
}
然后您可以使用 Base64UrlDecode 的结果来创建 OpenPop MIME 消息。
是否可以将 Gmail API 邮件转换为 OpenPop Mime 邮件?
目前,我有:
List<Message> messagesList = new List<Message>();
List<string> rawMessagesList = new List<string>();
foreach(Message m in messages)
{
Message m2 = service.Users.Messages.Get("me", m.Id).Execute();
string m3 = service.Users.Messages.Get("me", m.Id).Execute().Raw;
messagesList.Add(m2);
rawMessagesList.Add(m3);
}
string rMessage = rawMessagesList[0];
byte[] byteMessage = Encoding.ASCII.GetBytes(rMessage);
OpenPop.Mime.Message openPopMessage = new OpenPop.Mime.Message(byteMessage);
string newStringMessage = FindPlainTextInMessage(openPopMessage);
Console.Read();
不幸的是,它 returns 什么都不是,因为原始请求 returns 为空。是否有范围要求,或 gmail 不返回原始邮件的其他原因?
要获取Raw字符串,需要在GetRequest中指定Raw格式。
var emailRequest = svc.Users.Messages.Get("userId", "id");
emailRequest.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
var rawString = emailRequest.Execute().Raw;
此时rawString是一个base64url编码的字符串。在编码为字节之前,您必须将其转换为普通字符串(参见 https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-signature-08#appendix-C):
private static byte[] Base64UrlDecode(string arg)
{
// Convert from base64url string to base64 string
string s = arg;
s = s.Replace('-', '+').Replace('_', '/');
switch(s.Length % 4)
{
case 0:
break; // No pad chars in this case
case 2:
s += "==";
break; // Two pad chars
case 3:
s += "=";
break; // One pad char
default:
throw new Exception("Illegal base64url string!");
}
return Convert.FromBase64String(s);
}
然后您可以使用 Base64UrlDecode 的结果来创建 OpenPop MIME 消息。