我有一个PDF并获取其内容并将其存储在Blob中。但是,我无法使用MailApp.sendEmail()将此blob作为附件添加到电子邮件中 附件的附件说明了 “要通过电子邮件发送的文件。每个项目都是具有以下属性的JavaScript对象:String fileName,String mimeType(可选)和字符串内容。”
虽然,我可以将mimeType设置为'application / pdf',但它不起作用 - 可能是因为涉及到编码。 这是一个示例代码
var resp = UrlFetchApp.fetch(link);
if (resp.getResponseCode() == 200){
var blob = Utilities.newBlob(resp.getContent());
Logger.log(blob.getDataAsString());
// var pdf = blob.getAs('application/pdf');
var options = {'attachments' :
{'fileName' : 'test',
'mimeType' : 'application/pdf',
'content' : blob.getDataAsString() //Doesn't work
}
};
MailApp.sendEmail(TO_EMAIL, 'Subject','', options);
}
答案 0 :(得分:1)
虽然文档说附件内容必须是String,但它也接受字节数组。这是适用的代码
var resp = UrlFetchApp.fetch(link);
if (resp.getResponseCode() == 200){
var blob = Utilities.newBlob(resp.getContent());
Logger.log(blob.getDataAsString());
// var pdf = blob.getAs('application/pdf');
var options = {'attachments' :
{'fileName' : 'test',
'mimeType' : 'application/pdf',
'content' : blob.getBytes()
}
};
MailApp.sendEmail(TO_EMAIL, 'Subject','', options)
}
答案 1 :(得分:1)
我们需要更新这些文档......您实际上可以直接附加Blob而无需具有文件名,mimetype等的对象。
var resp = UrlFetchApp.fetch("www.google.com");
if (resp.getResponseCode() == 200){
FetchResponse对象(也就是我们称之为'resp'的变量)上有“getBlob”方法,这意味着你可以在任何你想要使用blob的地方使用它而不做任何特殊的事情:
MailApp.sendEmail(TO_EMAIL, 'Subject', '', {attachments: resp});
或者,您可以从FetchResponse获取显式Blob, 这只是一个很好的数据包装,有一些额外的方法。 这样做的唯一明显原因是更改文件名或mime类型, 虽然请注意UrlFetchApp已将这些设置为合理的默认值 (例如,如果你下载了一个名为MyFile.pdf的pdf,那么名称和mime类型已经为你设置为'MyFile.pdf'和'application / pdf'。)
var blob = resp.getBlob();
blob.setName('test');
MailApp.sendEmail(TO_EMAIL, 'Subject', '', {attachments: blob});
}