Last active
September 21, 2023 14:41
-
-
Save totuworld/2428c996fd0b79bb70ca0d8e7bae59b9 to your computer and use it in GitHub Desktop.
sendEmailWithFile.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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