bugfix> gmail-api > 投稿

私のプロジェクトでは、Contact Request FormがHTTP Firebase関数(Google Cloud Function wrapper ...)に送信され、受信したデータはgmailユーザーcontact@mydomain.org(G Suiteアカウント)に送信されます (私はSendGridのような別のサービスを使用しないようにしています...)

現在、私はgmail.users.messages.send()でメッセージを送信します。明らかに、GMail APIはFrom:元の送信者のメールをGoogleaアカウントの管理者のメールで上書きしています...

元のアドレスを追加するためにgmail.users.settings.sendAs.create()の前に実行しようとしました:この場合、リレーとして使用されるsmtpMsaサーバーもセットアップする必要があります...

とにかく受信したデータからメールメッセージを作成し(from:msg_text:)、それをcontact@mydomain.org Gmailボックスに直接挿入して、受信したメッセージを正しい情報で「シミュレート」しますか?または、smtpサーバーによってのみ送信されるべきですか?

更新 

users.message.import()を使用できます... しかし、アカウント管理者とは別のメールアドレス(contact @)にインポートするとエラーが発生します...

{"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 件
  • はい、できます!

    私はついに成功しました... 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"}}
    
    

あなたの答え