如何使用Google Apps Script和Mailchimp API发送带有附件的事务性电子邮件



我想弄清楚如何在Mailchimp的交易电子邮件中发送附件。根据文档说明,attachments数组必须包含具有typenamecontent属性的对象。我弄不明白的是content。令人惊讶的是,我在SO上找到了一个相关的问题。

文档说它的值必须是:

附件的内容作为base64编码的字符串

所以我有这个函数发送电子邮件,但附件内容是损坏的(名称和类型看起来很好):

const sendEmail = emailObj => {
console.log('sendEmail()');
const URL = 'https://mandrillapp.com/api/1.0/messages/send';
const { html, subject, toEmail, attachmentId } = emailObj;
const file = DriveApp.getFileById(attachmentId);
const type = file.getMimeType();
const name = file.getName();
const content = Utilities.base64Encode(file.getBlob().getDataAsString());
const options = {
header: {
'Content-Type': 'application/json',
},
payload: JSON.stringify({
key: 'key',
message: {
from_email: 'email@domain.com',
subject,
html,
to: [
{
email: toEmail,
type: 'to',
},
],
attachments: [
{
type,
name,
content,
},
],
},
}),
};

const response = UrlFetchApp.fetch(URL, options);
console.log(response.getContentText());
return emailObj;
};

附件是一个损坏的PDF文件,但名称正确。

我也试过将内容设置为:

  • file.getBlob()
  • file.getBlob().getDataAsString()
  • file.getBlob().getBytes()

希望以前有人这样做过:)

由于我目前的限制,我无法完全测试API,我尝试在在线驱动器中转换我的文件的Base64,此方法有效。

content = Utilities.base64Encode(file.getBlob().getBytes())

base64Encode在字节数组上工作,如文档所示。如果有特殊字符,可以添加特定的字符集(如Utilities.Charset.UTF_8)。

如果它仍然不工作,然后尝试变化base64EncodeWebSafe。总是使用它的字节数组作为参数。

最好的测试方法是,当您尝试将其转换为文件时,检查您获得的base64格式是否有效。您可以尝试将base64转换为文件的在线站点,或者从中创建一个驱动器文件,并检查它是否是合适的base64。Base64上的getDataAsString返回将错误,因为我已经测试过。需要原始字节,所以getBytes在我的测试中做到了。

最新更新