使用Google App Script通过Sendgrid发送电子邮件。

5
我正在创建一个Google表格插件来发送邮件。为了发送邮件,我正在使用SendGrid。但是我找不到任何关于使用Google Appscript发送邮件的文档或示例代码。这是我正在使用的代码,但它不好用。
var data = {

        "api_user":"username",
        "api_key":"ioioi",
        "to":[],
        "tonnage":[],
        "cc":[],
        "ccname":[],
        "bcc":[],
        "subject":sub,
        "from":from,
        "html":htmlBody
      }

      var headers = { "Accept":"application/json", 
                     "Content-Type":"application/json"
                    };



        data = JSON.stringify(data);

        var options = {
          "method": "POST",
          "payload": data,
          "headers": headers,
          "muteHttpExceptions": true
        };

var res = UrlFetchApp.fetch("https://api.sendgrid.com/api/mail.send.json", options);

有人有使用Google AppScript发送SendGrid电子邮件的想法或代码吗?

3个回答

10
尝试以下代码。这对我有用。

尝试以下代码。这对我有用。

   var SENDGRID_KEY ='Your API KEY';

  var headers = {
    "Authorization" : "Bearer "+SENDGRID_KEY, 
    "Content-Type": "application/json" 
  }

  var body =
  {
  "personalizations": [
    {
      "to": [
        {
          "email": "email id of the sender"
        }
      ],
      "subject": "Hello, World!"
    }
  ],
  "from": {
    "email": "From email id"
  },
  "content": [
    {
      "type": "text",
      "value": "Hello, World!"
    }
  ]
}

  var options = {

    'method':'post',
    'headers':headers,
    'payload':JSON.stringify(body)


  }


 var response = UrlFetchApp.fetch("https://api.sendgrid.com/v3/mail/send",options);


 Logger.log(response); 

同时确保你在SendGrid创建的API密钥具有发送电子邮件所需的所有凭据。

1
谢谢,这个方法有效,但是有些电子邮件正文没有发送。我进行了一些搜索,并发现(https://stackoverflow.com/a/51408775/1899661),内容/类型应为“text/html”或“text/plain”。我为我的目的使用了“text/plain”。 - gbarnabic

0

以下是目前在Google Apps Script中为我工作的内容,包括使用动态模板和插入“手柄”中的动态数据到我的SendGrid模板中:

var SENDGRID_KEY ='API_KEY';

var headers = {
  "Authorization" : "Bearer "+SENDGRID_KEY, 
  "Content-Type": "application/json" 
}

function sendEmail_1() {
  
  var body = {
      "personalizations": [
        {
          "to": [
            {
              "email": "test@test.com",
              "name": "Test Name"
            }
          ],
          "bcc": [
            {
              "email": "test@test.com"
            }
          ],
          "dynamic_template_data": 
            {
              "firstName": "Marco Polo"
            }
        }
      ],
      
      "from": 
        {
          "email": "test@test.com",
          "name": "Test Name"
        },
      
      "reply_to": {
          "email": "test@test.com"
        },
      
      "template_id":"TEMPLATE_ID" 
    }
  
  var options = {
    'method':'post',
    'headers':headers,
    'payload':JSON.stringify(body)
  }
  
  var response = UrlFetchApp.fetch("https://api.sendgrid.com/v3/mail/send",options);
}


0

对于将来遇到事务性电子邮件模板问题的任何人:

https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/

这是发送函数(类似于Nikil Mathew的答案,但用于带有动态数据的事务性电子邮件模板):
export const sendBySendGrid = (toEmail, templateId, dynamicTemplateData) => {
  const headers = {
    Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`,
    'Content-Type': 'application/json',
  }

  const body = {
    from: {
      email: process.env.SENDGRID_FROM_EMAIL,
      name: process.env.SENDGRID_FROM_NAME,
    },
    personalizations: [
      {
        to: [
          {
            email: toEmail,
          },
        ],
        dynamic_template_data: dynamicTemplateData,
      },
    ],
    template_id: templateId,
  }

  const options = {
    method: 'POST',
    headers,
    payload: JSON.stringify(body),
  }

  const response = UrlFetchApp.fetch('https://api.sendgrid.com/v3/mail/send', options)

  Logger.log(response)
}

您可以使用您的SendGrid凭据更新process.env.SENDGRID_API_KEYprocess.env.SENDGRID_FROM_EMAILprocess.env.SENDGRID_FROM_NAME


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接