Как использовать gapi для отправки электронной почты в Angular 9 - PullRequest
2 голосов
/ 29 мая 2020

Я однажды создал сервис в angular9 и вызвал google api для отправки электронной почты, но это не работает. может кто-нибудь поможет, что мне делать? Я пробовал много других способов, но ни один из них не помог.

sendEmail() {
    const scopes = [
      'https://www.googleapis.com/auth/gmail.send',
    ].join(' ');

    const message =
      "From: sample@gmail.com\r\n" +
      "To: sample2@gmail.com\r\n" +
      "Subject: As basic as it gets\r\n\r\n" +
      "This is the plain text body of the message.  Note the blank line between the header information and the body of the message.";

    const encodedMessage = btoa(message)

    const reallyEncodedMessage = encodedMessage.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

    gapi.load('client:auth2', () => {
      gapi.client.load('gmail', 'v1', () => {
        console.log('Loaded Gmail');
        gapi.client.init({
          apiKey: this.apiKey,
          discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest'],
          client_id: this.clientId,
          immediate: true,
          scope: scopes
        }).then(res => {
          console.log('pop')
          return gapi.client.gmail.users.messages.send({
            userId: 'me',
            requestBody: {
              raw: reallyEncodedMessage
            }
          }).then(res => {
            console.log("done!", res)
          });
        })
      });
    });
  }

ответ от gapi:

kind: "discovery#restDescription"
id: "gmail:v1"
name: "gmail"
version: "v1"
rootUrl: "https://www.googleapis.com/"
servicePath: "gmail/v1/users/"
batchPath: "batch/gmail/v1"

...

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Следуя примеру JavaScript в справочнике API Gmail , вам необходимо изменить свой запрос:

From:

gapi.client.gmail.users.messages.send({
    userId: 'me',
    requestBody: {
        raw: reallyEncodedMessage
    }
})

Кому:

gapi.client.gmail.users.messages.send({
    'userId': userId,
    'resource': {
      'raw': base64EncodedEmail
    }
  })

Если это не помогло, прокомментируйте ответ или предоставьте дополнительную информацию по вопросу.

0 голосов
/ 30 мая 2020

наконец-то я сделал это, и ниже мой код:

  checkForGmailLogin() {
    console.log('onLoadCallbackFunction');
    const scope = ['https://mail.google.com/',
      'https://www.googleapis.com/auth/gmail.modify',
      'https://www.googleapis.com/auth/gmail.compose',
      'https://www.googleapis.com/auth/gmail.send'].join(' ');
    gapi.auth.authorize(
      {
        'client_id': this.clientId,
        'scope': scope,
        'immediate': true,
        discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest'],
      }, authResult => {
        if (authResult && !authResult.error) {
          gapi.client.load('gmail', 'v1', () => this.sendEmail());
        } else {
          console.log('Error in Load gmail');
        }
      });
  }

  sendEmail() {
    const subject = 'Code';
    const code = '123'
    const mimeData = [
      "From: from@gmail.com",
      "To: to@gmail.com",
      "To: to@yahoo.com",
      "Subject: =?utf-8?B?" + window.btoa(unescape(encodeURIComponent(subject))) + "?=",
      "MIME-Version: 1.0",
      "Content-Type: text/plain; charset=UTF-8",
      "Content-Transfer-Encoding: 7bit",
      "",
      "Your code is " + code].join("\n").trim();
    const raw = window.btoa(unescape(encodeURIComponent(mimeData))).replace(/\+/g, '-').replace(/\//g, '_');
    gapi.client.gmail.users.messages.send({
      'userId': 'me',
      'resource': {
        'raw': raw
      }
    }).execute(res => {
      console.log('Email sent', res);
      this.snackBar.success('Email has send Successfully')});
  }
...