【问题标题】:Gmail api with .net core - How to draft an email带有 .net 核心的 Gmail api - 如何起草电子邮件
【发布时间】:2022-10-06 04:40:31
【问题描述】:

我正在尝试将 Google 的 Gmail API 集成到我的 .Net Core (c#) 控制台应用程序中。我有使用日历、文档和表格 API 的概念证明,但我不知道如何使用 Gmail API 起草电子邮件。

我能找到的唯一指南使用 Java (https://developers.google.com/gmail/api/guides/drafts),但我不确定如何翻译以下部分,特别是 Properties、Session 和 MimeMessage 类型:

    // Encode as MIME message
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);
    MimeMessage email = new MimeMessage(session);
    email.setFrom(new InternetAddress(fromEmailAddress));
    email.addRecipient(javax.mail.Message.RecipientType.TO,
        new InternetAddress(toEmailAddress));
    email.setSubject(messageSubject);
    email.setText(bodyText);

我不想发送电子邮件,我只想创建一个将出现在我的草稿文件夹中的草稿。这是我到目前为止所拥有的:

static void Main(string[] args){
    string[] gmailScopes = { GmailService.Scope.GmailCompose };
    var credential = GetCredentialsFromFile(gmailScopes);
    GmailService service = new GmailService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = APPLICATION_NAME
    });

    //*** create a MimeMessage??? ***
    string messageHtml = \"This is a test<br/><h1>Hello, World</h1>\";
    //string messageHtmlEncoded = Base64UrlEncoder.Encode(messageHtml);
    Draft draft = new Draft
    {
        Message = new Message
        {
            //Raw = messageHtmlEncoded
        }
    };
    
}
private GoogleCredential GetCredentialsFromFile(string[] scopes)
{
    GoogleCredential credential;
    using var stream = new FileStream(\"client_secrets.json\", FileMode.Open, FileAccess.Read);
    credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
    return credential;
}

任何有关如何使用 Google api 创建草稿的帮助将不胜感激。

一个附带的问题,一旦我能够得到这个工作,草稿会驻留在用于身份验证的服务帐户中还是会在我的草稿文件夹中?

提前致谢。

    标签: c# .net-core google-api gmail-api


    【解决方案1】:

    您可以使用GmailService.Users.Drafts.Create 在用户邮箱中创建草稿。

    例子 :

    string[] gmailScopes = { GmailService.Scope.GmailCompose };
    GmailService service = new GmailService(new BaseClientService.Initializer() {
        ApplicationName = APPLICATION_NAME,
        HttpClientInitializer = await GetCredentialsFromFile(gmailScopes)
    });
    
    string messageHtml = "This is a test<br/><h1>Hello, World</h1>";
    string messageHtmlEncoded = Base64UrlEncoder.Encode(messageHtml);
    Draft draft = new Draft {
        Message = new Message {
            Raw = messageHtmlEncoded
        }
    };
    
    service.Users.Drafts.Create(draft, "me").Execute();
    

    【讨论】:

      【解决方案2】:

      事实证明,我的问题是使用没有 G Suite 帐户的服务帐户。在我切换到 OAUTH 身份验证后,它工作得很好。我将继续展示我的代码的主要部分,以防它可能对其他人有所帮助。

      var secrets = GoogleClientSecrets.FromFile("client_secret_oath.json");
      var userCredentials = GoogleWebAuthorizationBroker.AuthorizeAsync(
              secrets.Secrets,
              _Scopes,
              "user",
              CancellationToken.None,
              new FileDataStore("token_send.json", true)
      )
      .Result;
      
      var gmailService = new GmailService(new BaseClientService.Initializer()
      {
          HttpClientInitializer = userCredentials,
          ApplicationName = APPLICATION_NAME
      });
      
      string messageHtml = $"To: <email>@gmail.com\r\nSubject: Test Subject\r\nContent-Type: text/html;charset=utf-8\r\n\r\ntest body";
      string messageHtmlEncoded = Base64UrlEncoder.Encode(messageHtml);
      
      Draft draft = new Draft
      {
          Message = new Message
          {
              Raw = messageHtmlEncoded
          }
      };
      
      var createRequest = gmailService.Users.Drafts.Create(draft, "me");
      var draftResponse = createRequest.Execute();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-25
        • 2014-11-24
        • 2013-04-11
        • 2011-08-28
        • 2016-09-22
        • 1970-01-01
        • 2017-07-24
        • 2015-10-25
        相关资源
        最近更新 更多