如何创建Gmail API消息

use*_*973 5 .net c# gmail-api

我想使用Google的Gmail API发送消息.我已成功验证,并尝试使用GmailService发送邮件.

我想用这个:

myService.Users.Messages.Send(myMessage, "me").Execute();
Run Code Online (Sandbox Code Playgroud)

其中myService是a Google.Apis.Gmail.v1.GmailService而myMessage是a Google.Apis.Gmail.v1.Data.Message.

myService很好,我做过OAuth舞蹈.我可以从我的收件箱中获取所有信息.但我不知道如何建造myMessage.我有一个标准的.NET MailMessage,具有人类可读的Subject,Body,To,From等.

但谷歌Message类需要字段PayloadRaw.将full MailMessage设置为可以设置为PayloadRaw属性的字符串的最简单方法是什么?或者这不是我应该做的事情?

Message类的文档.

use*_*973 7

我找到了解决方案.奇怪的是,.NET本身似乎并不容易支持.虽然有一个很好的nuget包,称为AE.Net.Mail,它可以为流编写一个易于创建的消息对象.

这是我指向这个方向的示例代码.

复制粘贴代码作为网站似乎已关闭,Google的缓存可能不会永远持续下去:

using System.IO;
using System.Net.Mail;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;

public class TestEmail {

  public void SendIt() {
    var msg = new AE.Net.Mail.MailMessage {
      Subject = "Your Subject",
      Body = "Hello, World, from Gmail API!",
      From = new MailAddress("[you]@gmail.com")
    };
    msg.To.Add(new MailAddress("yourbuddy@gmail.com"));
    msg.ReplyTo.Add(msg.From); // Bounces without this!!
    var msgStr = new StringWriter();
    msg.Save(msgStr);

    var gmail = new GmailService(Context.GoogleOAuthInitializer);
    var result = gmail.Users.Messages.Send(new Message {
      Raw = Base64UrlEncode(msgStr.ToString())
    }, "me").Execute();
    Console.WriteLine("Message ID {0} sent.", result.Id);
  }

  private static string Base64UrlEncode(string input) {
    var inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
    // Special "url-safe" base64 encode.
    return Convert.ToBase64String(inputBytes)
      .Replace('+', '-')
      .Replace('/', '_')
      .Replace("=", "");
  }
}
Run Code Online (Sandbox Code Playgroud)