Google GMail API w G Suite - 我可以直接将邮件插入Gmail用户邮箱吗?

时间:2018-05-25 16:45:35

标签: gmail-api

在我的项目中,联系请求表单被发送到HTTP Firebase功能(Google Cloud Function包装器......),收到的数据应发送给gmail用户contact@mydomain.org(G Suite帐户) (我不想使用像SendGrid这样的其他服务......)

目前我使用gmail.users.messages.send()发送邮件,显然GMail API正在使用Googlea帐户管理员电子邮件覆盖来自:原始发件人电子邮件...

我试图在gmail.users.settings.sendAs.create()之前运行以添加来自:email地址的原始文件,但在这种情况下我还需要设置一个smtpMsa服务器作为中继...

无论如何从收到的数据(来自:msg_text :)建立邮件消息并直接插入我的contact@mydomain.org gmail框以模拟'收到的消息中包含正确的信息?或者它应该只由smtp服务器发送?

更新

我可以使用users.message.import()... 但是如果我导入到另一个电子邮件地址(联系人@)而不是帐户管理员...

,我会收到错误
{"infos":"Delegation denied for admin@mydomain.org"}

这项工作          return 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 :(得分:0)

我们可以!

我最终成功了......直接将邮件插入我的Google Suite电子邮件地址..而from:地址实际上是原始的联系表单发件人电子邮件地址!

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"}}