尝试使用Gmail API发送电子邮件接收'原始'RFC822有效负载消息字符串

问题描述:

我试图用Gmail API执行简单的电子邮件回复。尝试使用Gmail API发送电子邮件接收'原始'RFC822有效负载消息字符串

我收到以下错误:

Google.GoogleApiException: 'Google.Apis.Requests.RequestError

'raw' RFC822 payload message string or uploading message via /upload/* URL required [400]

Errors [

Message['raw' RFC822 payload message string or uploading message via /upload/* URL required] Location[ - ] Reason[invalidArgument] Domain[global]

我的代码是:

var msg = service.Users.Messages.Get("me", labelItem.Id).Execute();//the original email 

        var toReceipients = GetReceipients(msg, "TO", out int toReceipientsCount); 
        var ccReceipients = GetReceipients(msg, "CC", out int ccReceipientsCount); 
        var bccReceipients = GetReceipients(msg, "BCC", out int bccReceipientsCount); 
        toReceipients.AddRange(ccReceipients); 
        toReceipients.AddRange(bccReceipients); 
        var result = string.Join(",", toReceipients); 
        Message newMsg = new Message(); 
        MessagePartHeader toAddress = msg.Payload.Headers.FirstOrDefault(g => g.Name == "To"); 
        MessagePartHeader fromAddress = msg.Payload.Headers.FirstOrDefault(g => g.Name == "From"); 
        fromAddress.Value = toAddress.Value; 
        fromAddress.Value = "[email protected]"; 
        toAddress.Value = result; 
        newMsg.Raw = msg.Raw; 
        newMsg.Payload = new MessagePart(); 
        newMsg.Payload.Headers = new List<MessagePartHeader>(); 
        newMsg.Payload.Headers.Add(toAddress); 
        newMsg.Payload.Headers.Add(fromAddress); 
        newMsg.Payload.MimeType = "text/plain"; 
        MessagePartHeader Subject = msg.Payload.Headers.FirstOrDefault(g => g.Name == "Subject"); 
        newMsg.Payload.Headers.Add(Subject); 
        //MessagePartHeader References = msg.Payload.Headers.FirstOrDefault(g => g.Name == "References"); 
        MessagePartHeader MessageID = msg.Payload.Headers.FirstOrDefault(g => g.Name == "Message-ID"); 
        newMsg.Payload.Headers.Add(MessageID); 
        // MessagePartHeader format = msg.Payload.Headers.FirstOrDefault(g => g.Name == "format"); 
        // MessagePartHeader aaa = msg.Payload.Headers.FirstOrDefault(g => g.Name == "In-Reply-To"); 

        msg.Payload = newMsg.Payload; 
        service.Users.Messages.Send(msg, "me").Execute(); 

是否有执行原来的电子邮件回复一个简单的方法?

是否有关于如何执行此任务的示例参考?

注意Users.messages: send方法支持的/上传 URI和接受上传的媒体具有以下特征:

  • 最大文件大小:35MB
  • 可接受的MIME媒体类型:消息/ RFC822

另外,您可能想要查看中给出的详细信息,

Emails are sent as base64url encoded strings within the raw property of a message resource. The high-level workflow to send an email is to:

  1. Create the email content in some convenient way and encode it as a base64url string.
  2. Create a new message resource and set its raw property to the base64url string you just created.
  3. Call messages.send , or, if sending a draft, drafts.send to send the message.

有了这些,尝试设置为base64编码的电子邮件增值的raw参数在你的请求主体。

只为额外的见解(因为这些都不是C#相关的),看到这些相关的SO职位