Google GMail API w G Suite. Можно ли напрямую вставить сообщение в почтовый ящик пользователя Gmail? - PullRequest
0 голосов
/ 25 мая 2018

В моем проекте форма запроса контакта отправляется в функцию HTTP Firebase (оболочка Google Cloud Function ...), полученные данные должны отправляться пользователю gmail contact@mydomain.org (учетная запись G Suite) (я являюсьпытаясь НЕ использовать другой сервис, такой как SendGrid ...)

В настоящее время я отправляю сообщение с помощью gmail.users.messages.send (), очевидно, API GMail перезаписывает исходное письмо отправителя From: электронное письмо администратора аккаунта Googlea...

Я пытался запустить gmail.users.settings.sendAs.create (), чтобы добавить оригинал с адреса электронной почты, но в этом случае мне также нужно настроить сервер smtpMsa, который будет использоваться.как ретранслятор ...

Есть ли способ построить почтовое сообщение из полученных данных (from: msg_text:) и вставить его в мой почтовый ящик contact@mydomain.org, чтобы «имитировать» полученное сообщениес правильной информацией?или он должен быть отправлен только SMTP-сервером?

ОБНОВЛЕНИЕ

Я могу использовать users.message.import () ... но я получаю сообщение об ошибке, если еслиЯ импортирую на другой адрес электронной почты (контакт @), отличный от учетной записи администратора ...

{"infos":"Delegation denied for admin@mydomain.org"}

ЭТО РАБОТАЕТ возвращает gmail.users.messages.import ({userId: config_key.admin_email, ресурс: {raw: encodedMessage}});

ЭТО НЕ РАБОТАЕТ

 return gmail.users.messages.import({
    userId: config_key.contact_email,
    resource: {
      raw: encodedMessage
    }
  });

1 Ответ

0 голосов
/ 26 мая 2018

ДА МЫ МОЖЕМ!

Мне удалось наконец-то ... вставить сообщение прямо в мой адрес электронной почты Google Suite ... и адрес от: фактически является исходным адресом электронной почты отправителя контактной формыадрес !

function gMailInserMessage (sender_name, sender_email, msg_text) {

  // Create a new JWT client using the key file downloaded from the Google Developer Console
  const jwtClient = new google.auth.JWT(
    postoffice_key.client_email,  // service account with Domain-Wide delagation of Authority
    null,
    postoffice_key.private_key,
    _.values(config_key.scopes.postoffice),
    config_key.admin_email // subject (or sub) impersonated user
  );

  return jwtClient.authorize().then(tokens => {
      // Obtain a new gmail client, making sure we pass along the auth client
      const gmail = google.gmail({
        version: 'v1',
        auth: jwtClient
       });

       // Base64-encode the mail and make it URL-safe 
       // (replace all "+" with "-" and all "/" with "_")
       var encodedMessage = btoa([
        'From: ' + sender_email + '\r\n',
        'To: ' + config_key.admin_email + '\r\n',
        'Subject: Contact\r\n\r\n',
        msg_text
      ].join("")).replace(/\+/g, '-').replace(/\//g, '_');

      //Make an authorized request to insert a User Messages
      return gmail.users.messages.insert({
        userId: 'me',  // impersonated authorized user
        resource: {
          raw: encodedMessage
        }
      });
  }).then(res => res.data);
}

ответ:

{"status":200,"infos": 
{"id":"1639b41c26584963","threadId":"1639b41c26584963"}}
...