Skip to content

Instantly share code, notes, and snippets.

@totuworld
Last active September 21, 2023 14:41
Show Gist options
  • Save totuworld/2428c996fd0b79bb70ca0d8e7bae59b9 to your computer and use it in GitHub Desktop.
Save totuworld/2428c996fd0b79bb70ca0d8e7bae59b9 to your computer and use it in GitHub Desktop.
sendEmailWithFile.js
function sendEmail() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const sheet1 = ss.getSheetByName('list2'); // 이메일 보낼 사람들 목록이 들어간 시트명!
const sheet2 = ss.getSheetByName('template'); // 이메일 내용이 들어간 시트명!
const subject = sheet2.getRange(2,1).getValue(); // 이메일 제목 추출
const n = sheet1.getLastRow(); // 이메일 보낼 명단이 전체 몇 명인지 확인
const folder = DriveApp.getFolderById('폴더ID'); // 폴더 id를 확인해서 추가
const files = folder.getFiles();
const fileMap = new Map(); // TOTO: Object대신 Map을 사용했습니다. 사용법이 조금 다른 문법이라고만 이해하셔도 충분합니다.
while (files.hasNext()) {
let file = files.next();
// 맥에서 작업해서 한글이 자소 분리된 경우, 다시 합쳐버린다.
const fileName = file.getName().replace(/\s/g, '').normalize('NFC');
const encodeFileName = Utilities.base64Encode(fileName, Utilities.Charset.UTF_8);
// Map을 활용해서 폴더 내 파일을 파일이름으로 분류한다.
fileMap.set(encodeFileName, file);
}
// 2번째 행부터 이메일 주소가 있기때문에 2번째 행부터 시작해서 마지막 줄까지 반복하는 구문
for (let i = 2; i < n+1 ; i++ ) {
// 이메일 주소는 2번째 열에 있으니까 (i,2)
const emailAddress = sheet1.getRange(i,2).getValue();
// 이름은 첫번째 열에 있으니까!! (i, 1)
const name = sheet1.getRange(i,1).getValue();
// 이메일 제목에서 <name>이라고 써진 부분을 갈아치운다
const updateSubject = subject.replace("<name>",name);
// 이메일 내용이 될부분 추출
let message = sheet2.getRange(2,2).getValue();
// <name> 이라고 써진 부분을 실제 이름으로 갈아치우는 코드!
message = message.replace("<name>",name);
// 보내야할 파일을 특정해서, attachments array로 만들어서 보내보자.
const pdfFileName = sheet1.getRange(i,3).getValue().replace(/\s/g, '').normalize('NFC'); // TOTO: normalize 코드를 추가했습니다.
const encodePdfFileName = Utilities.base64Encode(pdfFileName, Utilities.Charset.UTF_8); // TOTO: encode할 때 charset을 UTF_8로 지정했습니다.
const pdfFile = fileMap.get(encodePdfFileName);
const attachments = [pdfFile];
// 메일 가랏!
MailApp.sendEmail({
to: emailAddress,
subject: updateSubject,
body: message,
attachments: attachments,
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment