Здравствуйте, дружелюбные люди из StackOverflow,
У меня самое трудное время заставить метод GmailApp sendEmail() успешно использовать существующее электронное письмо (например, черновик), которое содержит встроенные изображения в качестве шаблона для новых сообщений.
Похоже, это проблема, так как я обнаружил, что у разработчиков возникла эта проблема здесь и здесь и предлагаемые решения здесь, здесь и здесь. Каждому из этих решений более 4 лет, поэтому, возможно, они устарели. Я не смог использовать ни одно из этих решений, чтобы воспроизвести успех.
В настоящее время я запускаю этот код из своего бэкэнда Google Scripts:
function generateMessageFromTemplate () {
var selectedTemplate = GmailApp.getMessageById('MESSAGE_ID');
//////////////////////////////////////////////////////////////////////////////
// Get inline images and make sure they stay as inline images (via Romain Vialard)
//////////////////////////////////////////////////////////////////////////////
var emailTemplate = selectedTemplate.getBody();
var rawContent = selectedTemplate.getRawContent();
var attachments = selectedTemplate.getAttachments();
var regMessageId = new RegExp(selectedTemplate.getId(), "g");
if (emailTemplate.match(regMessageId) != null) {
var inlineImages = {};
var nbrOfImg = emailTemplate.match(regMessageId).length;
var imgVars = emailTemplate.match(/<img[^>]+>/g);
var imgToReplace = [];
if(imgVars != null){
for (var i = 0; i < imgVars.length; i++) {
if (imgVars[i].search(regMessageId) != -1) {
var id = imgVars[i].match(/realattid=([^&]+)&/);
if (id != null) {
var temp = rawContent.split(id[1])[1];
temp = temp.substr(temp.lastIndexOf('Content-Type'));
var imgTitle = temp.match(/name="([^"]+)"/);
if (imgTitle != null) imgToReplace.push([imgTitle[1], imgVars[i], id[1]]);
}
}
}
}
for (var i = 0; i < imgToReplace.length; i++) {
for (var j = 0; j < attachments.length; j++) {
if(attachments[j].getName() == imgToReplace[i][0]) {
inlineImages[imgToReplace[i][2]] = attachments[j].copyBlob();
attachments.splice(j, 1);
var newImg = imgToReplace[i][1].replace(/src="[^\"]+\"/, "src=\"cid:" + imgToReplace[i][2] + "\"");
emailTemplate = emailTemplate.replace(imgToReplace[i][1], newImg);
}
}
}
}
//////////////////////////////////////////////////////////////////////////////
GmailApp.sendEmail('[email protected]', selectedTemplate.getSubject(), '', {
attachments: attachments,
htmlBody: emailTemplate,
inlineImages: inlineImages
});
};
Документация Google Scripts по методу sendEmail(): здесь.
Это выходные данные этой функции как есть
Когда я отправляю электронные письма из Apps Script как есть, я получаю электронные письма, которые выглядят следующим образом: скриншот Я повторил тест со старой учетной записью электронной почты yahoo.com и получил те же результаты, что и с учетной записью Gmail.
Опять же, у этого разработчика тоже самое проблема.
Если вы можете помочь, я был бы чрезвычайно благодарен!
GmailApp.sendEmail()
? Если это первое, как насчет того, чтобы протестировать его с помощью простого скрипта? Если последнее, можете ли вы предоставить подробную информацию для воспроизведения вашей ситуации? Если это было не то направление, которое вы хотите, я извиняюсь. - person Tanaike   schedule 01.06.2019