찰리의 이야기

구글 스프레드시트 앱스크립트 단체메일 개인화로 보내기 본문

찰리: 개발이야기(Engineering)

구글 스프레드시트 앱스크립트 단체메일 개인화로 보내기

쨜리 2022. 4. 25. 00:33
반응형

구글 스프레드시트 앱스크립트 단체메일 개인화로 보내기

 

다수에게 이메일을 보내야하는데, 단체로 이메일을 보내려면 

상대방으로 하여금 상당히 성의가 없어보이게 보내거나,

아니면 결국은 1:1로 하나하나 이메일을 보내야하는 어려움을 겪게 된다.

이를 구글 스프레드시트와 앱스크립트를 이용해서 구현해보았다.

 

구글 스프레드시트의 확장프로그램에는 앱스크립트(Apps Script)가 있는데,

아래처럼 확인해볼 수 있다.

구글 앱 스크립트는 구글 솔루션들과 서드파티 서비스간에 자동화를 쉽게 하기 위해서 만들어졌다.

그래서 이 기능을 만들때에도 지메일과 구글 드라이브를 쉽게 가져와서 자동화를 만들어 보는 것이다.

 

요약해보자면, 아래와 같은 내용으로 구성되어 있다.

1. 스프레드 시트에 이메일에 필요한 정보를 구성한다.
2. 앱스크립트에서 스프레드시트의 내용을 가져온다.
3. 스프레드시트의 길이만큼 반복하여 이메일을 발송하는 앱스크립트를 작성한다.
4. 이메일을 발송할 때 구글 드라이브에서 첨부파일을 불러온다.
1. 스프레드 시트에 이메일에 필요한 정보를 구성한다.

스프레드 시트에는 이메일을 보낼 제목과 

그리고 이메일 본문을 미리 작성해야 한다.

그리고 또한 이메일 대상자들의 수집된 이메일 리스트도 구성해야한다.

수신인, 이메일주소, 결과 정도로 구성해보았다.

 

2. 앱스크립트에서 스프레드시트의 내용을 가져온다.

let ss = SpreadsheetApp.getActiveSpreadsheet();
// 스프레드시트 가져오기
let sheet = ss.getActiveSheet();
// 스프레드시트에서 현재 활성화된 시트 가져오기
let subject = sheet.getRange("A2").getValue();
// 시트에서 범위로 값을 가져오기
let body = sheet.getRange("A4").getValue();

결국은 스프레드 시트에서 A2란에서 이메일 제목을 적어두고

A4란에는 이메일 본문을 구성해두고 가져오는 과정이다. 

이 이메일 본문은 html 형태로 가져와야하는데,

네이버 블로그 등의 에디터에서 글을 작성한 다음,

편하게 html모드로 변경하면 html 형태의 글을 작성할 수 있으니

이용하면 도움이 될 것 같다.

 

 

3. 스프레드시트의 길이만큼 반복하여 이메일을 발송하는 앱스크립트를 작성한다.

let file = DriveApp.getFilesByName(fileName);
let childFile = file.next();

for(let i=7; i<12; i++){ 
  try{
    let name = sheet.getRange("B"+i).getValue();
    let address = sheet.getRange("C"+i).getValue();

    MailApp.sendEmail({
      to: address,
      subject: name+subject,
      htmlBody: body,
      attachments: [childFile.getAs(MimeType.PDF)]
  });

  	sheet.getRange("D"+i).setValue("완료");
  }catch(e){
 	sheet.getRange("D"+i).setValue("실패");
	console.log(e);
  }

for 반복문을 사용하는데

index가 7부터 사용하는 이유는 

그저 스프레드시트의 7번째 줄부터 이름과 이메일이 작성되어 있기 때문이다.

B열의 7번째 열부터 사용하기 위함이다.

 

 

4. 이메일을 발송할 때 구글 드라이브에서 첨부파일을 불러온다.

그리고 DriveApp은 여러가지 메서드를 가지는데, 

그 중 이름으로 구글 드라이브의 파일을 찾을 수 있는 메서드가 

.getFilesByName('파일이름')이다.

그리고 attachments: [childFile.getAs(MimeType.PDF)] 이렇게

보내기만 하면 된다. 

처음엔 권한 오류가 발생하길래 

구글 드라이브의 공유 권한 문제인가 싶어서 찾아봤는데,

사실 권한은 첨부파일을 넣을때 

이 구글 드라이브에 접근해서 구글앱스를 동작시키는 인물만 접근가능하면 된다.

받아보는 사람들에게는 권한이 필요하진 않는다.

 

그것보다는 구글 드라이브에서 이름으로 검색했을 때 

검색되지 않는 경우일 수 있으니, 꼭 파일 이름으로 검색이 되는지 확인해보길 바란다.

 

 

 

구글 스프레드시트 앱스크립트 단체메일 개인화로 보내기

반응형
Comments