在 GAS 中使用 mailjet 发送带附件的邮件
Send mail with attachment using mailjet in GAS
我正在尝试使用来自 Google Apps 脚本的 Mailjet 发送带有 PDF 附件的邮件。我可以毫无问题地发送普通邮件,但不太确定如何包含附件。
Mailjet 文档:https://dev.mailjet.com/guides/#sending-with-attached-files
我认为我的问题是 Base64Content。我真的不明白如何对附件进行编码。当我执行以下代码时,会发送一封带有 PDF 附件的电子邮件,但当我尝试打开 PDF 时,它会显示:"Cannot display PDF (test.pdf is of invalid format)".
var newDoc = DocumentApp.openById(newDocid)
var attachment = newDoc.getAs(MimeType.PDF);
var mailjeturl = "https://api.mailjet.com/v3.1/send";
var mailjetparams = {
"Messages":[{
"From": {"Email": 'myemail@domain.com',"Name": 'Robert'},
"To": [{"Email": 'theiremail@domain.com'}],
"Subject": 'subject',
"HTMLPart": 'this message',
"Attachments": [{"ContentType": "application/pdf",
"Filename": "test.pdf",
"Base64Content": Utilities.base64Encode(attachment)}]
}]
}
var mailjetoptions = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(mailjetparams),
'headers': {'Authorization': 'Basic ' + Utilities.base64Encode(MAILJET_KEY)}
};
var response = JSON.parse(UrlFetchApp.fetch(mailjeturl, mailjetoptions))
尝试这样编码:
var pdf = newDoc.getAs('application/pdf').getBytes();
var attach = {fileName:'test.pdf',content:pdf, mimeType:'application/pdf'};
var mailjetparams = {
"Messages":[{
"From": {"Email": 'sender@domain.com',"Name": 'Robert'},
"To": [{"Email": 'reciever@domain.com'}],
"Subject": 'subject',
"HTMLPart": 'this message',
"Attachments": [attach]
}]
}
下面的修改怎么样?我认为错误的原因可能是 Utilities.base64Encode(attachment)
.
修改点:
attachment
由 newDoc.getAs(MimeType.PDF)
检索到的是 Blob。 Blob 无法使用 Utilities.base64Encode()
直接转换为 base64。所以请将Blob转换为字节数组,并转换为base64。
当这反映到您的脚本中时。修改部分如下
发件人:
var attachment = newDoc.getAs(MimeType.PDF);
收件人:
var attachment = newDoc.getAs(MimeType.PDF).getBytes();
或
var attachment = newDoc.getBlob().getBytes();
当 Google 文档作为 Blob 检索时,Google 会自动转换为 PDF。你也可以用这个。
参考:
如果我误解了你的问题,我很抱歉。
我正在尝试使用来自 Google Apps 脚本的 Mailjet 发送带有 PDF 附件的邮件。我可以毫无问题地发送普通邮件,但不太确定如何包含附件。
Mailjet 文档:https://dev.mailjet.com/guides/#sending-with-attached-files
我认为我的问题是 Base64Content。我真的不明白如何对附件进行编码。当我执行以下代码时,会发送一封带有 PDF 附件的电子邮件,但当我尝试打开 PDF 时,它会显示:"Cannot display PDF (test.pdf is of invalid format)".
var newDoc = DocumentApp.openById(newDocid)
var attachment = newDoc.getAs(MimeType.PDF);
var mailjeturl = "https://api.mailjet.com/v3.1/send";
var mailjetparams = {
"Messages":[{
"From": {"Email": 'myemail@domain.com',"Name": 'Robert'},
"To": [{"Email": 'theiremail@domain.com'}],
"Subject": 'subject',
"HTMLPart": 'this message',
"Attachments": [{"ContentType": "application/pdf",
"Filename": "test.pdf",
"Base64Content": Utilities.base64Encode(attachment)}]
}]
}
var mailjetoptions = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(mailjetparams),
'headers': {'Authorization': 'Basic ' + Utilities.base64Encode(MAILJET_KEY)}
};
var response = JSON.parse(UrlFetchApp.fetch(mailjeturl, mailjetoptions))
尝试这样编码:
var pdf = newDoc.getAs('application/pdf').getBytes();
var attach = {fileName:'test.pdf',content:pdf, mimeType:'application/pdf'};
var mailjetparams = {
"Messages":[{
"From": {"Email": 'sender@domain.com',"Name": 'Robert'},
"To": [{"Email": 'reciever@domain.com'}],
"Subject": 'subject',
"HTMLPart": 'this message',
"Attachments": [attach]
}]
}
下面的修改怎么样?我认为错误的原因可能是 Utilities.base64Encode(attachment)
.
修改点:
attachment
由 newDoc.getAs(MimeType.PDF)
检索到的是 Blob。 Blob 无法使用 Utilities.base64Encode()
直接转换为 base64。所以请将Blob转换为字节数组,并转换为base64。
当这反映到您的脚本中时。修改部分如下
发件人:
var attachment = newDoc.getAs(MimeType.PDF);
收件人:
var attachment = newDoc.getAs(MimeType.PDF).getBytes();
或
var attachment = newDoc.getBlob().getBytes();
当 Google 文档作为 Blob 检索时,Google 会自动转换为 PDF。你也可以用这个。
参考:
如果我误解了你的问题,我很抱歉。