Google 슬라이드에서 PDF를 만드는 앱 스크립트가 있습니다. Google MailApp을 사용하여 PDF를 보내면 PDF를 올바르게받을 수 있습니다.
var pdf_file = DriveApp.getFileById(certificate.getId()).getAs('application/pdf');
GmailApp.sendEmail(email, subject, body,{attachments: pdf_file,name: subject});
이제 GMail 대신 SendGrid를 사용하고 싶지 않기 때문에 위의 한 줄만 변경하여 더 이상 GMailApp.sendEmail을 호출하지 않고 이제이 새로운 sendGridEmail 함수를 사용합니다.
sendGridEmail(toEmail,subject,body,fromEmail,pdf_file,subject +".pdf");
이것은 내 SendGrid 메일 기능입니다.
function sendGridEmail(toEmail,subject,body_details,fromEmail,myPDFfile,certificateName) {
var SENDGRID_KEY ='xxxxxxxxxxxxxxxxxxxxxxxxxxx';
var headers = {
"Authorization" : "Bearer "+ SENDGRID_KEY,
"Content-Type": "application/json"
}
var cert = Utilities.base64Encode(myPDFfile);
var body =
{
"personalizations": [
{
"to": [
{
"email": toEmail
}
],
"subject": subject
}
],
"from": {
"email": fromEmail
},
"template_id":"d-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"attachments": [
{
content: cert,
filename: certificateName,
type: "application/pdf",
}
]
}
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);
}
이메일을 받았습니다. PDF를 제외한 모든 작품은 비어 있습니다. PDF를 내 sendGridEmail 함수 (디버거에 PDF로 표시됨)로 보낼 때 base64Encode를 수행하면 엄청난 숫자라는 것을 알 수 있지만 이메일을 받으면 빈 pdf 페이지. 이견있는 사람? base64encoding을 사용하는 것은 이번이 처음입니다. 제대로하고 있지 않을 수 있습니다.
이 수정은 어떻습니까?
pdf_file
의 var pdf_file = DriveApp.getFileById(certificate.getId()).getAs('application/pdf');
전송됩니다 sendGridEmail(toEmail,subject,body,fromEmail,pdf_file,subject +".pdf");
. 즉, pdf_file
블롭이고 이는의 사용 sendGridEmail
등 myPDFfile
.data
의 Utilities.base64Encode(data)
할 필요가있다 Byte[]
.위의 사항이 스크립트에 반영되면 다음과 같이 수정하십시오.
var cert = Utilities.base64Encode(myPDFfile);
에:
var cert = Utilities.base64Encode(myPDFfile.getBytes());
이것이 문제의 직접적인 해결책이 아니라면 base64 데이터에 헤더를 추가하여 스크립트를 테스트하는 것은 어떻습니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다