brunch

You can make anything
by writing

C.S.Lewis

by Nak Jan 26. 2022

구글 스프레드시트/지메일 연동 벌크 메일 보내기 - 2

프로그래밍을 배워야 하는 이유?

우리는 1편에서 간단한 기능정의와 코드 요약본을 확인하였다.


구글 스프레드시트에 관한 장점과 확장성에 대해서 정리해 놓았으니, 1편을 보지 않았다면 아래에서 확인해보도록 하자.


https://brunch.co.kr/@chunja07/100


2편에서 소개할 내용은 코드 생성 로직이다.


1) gatherAddress - 이메일 주소 불러오기


위에서 보는 것과 같이 이메일 주소를 모두 불러올 필요가 있다.


위 코드를 잘 살펴보도록 하자.


이 메쏘드를 통해 할 일은 바로 C열에 있는 주소 값을 리스트 형태로 담아와 리턴 해주는 메쏘드를 만드는 것이다.


ss1 변수는 스프레드 시트를 활성화 시키는 역할을 한다. 특히 getSheetByName을 통해 특정 시트를 액티베이션 하는 역할을 하는 것이다. 시트 이름은 다른 매쏘드에서 콜을 받아, 변형이 필요할 때마다 특정 매쏘드의 값만 변형하게 되면, 시트가 바뀌더라도 같은 동작을 수행하도록 하였다.


lr1 변수의 경우 가장 끝 열의 숫자를 불러온다. 밑의 Google Developers 문서에 보면 자세한 내용이 나와있으므로 참고하도록 하자. 구글 apps script의 가장 강력한 무기 중 하나는 문서 정리가 잘 되어있다는 점인데, 여러가지 클래스들을 구글 디벨로퍼 사이트에서 찾아서 활용하도록 하자.


https://developers.google.com/apps-script/reference/spreadsheet/sheet


getLastRow 메쏘드를 통해 얻어지는 값은 숫자 5이다. 왜냐하면 테스트 시트 열에는 5개의 데이터만 들어있기 때문이다.


이제 주소값을 담기 위해 리스트 형태의 address 변수를 설정하고 반복문을 돌려, address에 모든 주소를 리스트 형태로 넣어두었다.


즉 address라는 리스트에는 총 2개의 빈 값과 3개의 이메일 주소가 들어가게 되는 것이다.


2) gatherTitle - 회사 이름 불러오기



위의 gatherAdd 메쏘드와 같이 A 열의 회사 이름을 리스트 형태로 저장해서, 리턴해주는 메쏘드이다. 단지 차이점은 Null 값이 생기지 않는다는 것이다. 위에서 설명한 부분과 큰 차이가 없으니 넘어가도록 하겠다.


3) Send - 메일 보내기



send 메쏘드는 위에서 게더링한 리턴값을 바탕으로 벌크로 이메일을 보내는 역할이다.


그럼 변수별 설명을 하도록 하겠다.


sheet 변수

메쏘드의 매개변수로서 역하을 하며 "testinfo"라는 변수의 값이 gatherAdd, gatherTitle에서 호출되어 그 시트에서 액티베이트된 값을 리턴해준다고 생각하면 된다.

pdfFile 변수

구글 드라이브에 저장된 PDF 파일의 아이디 값이다. Driveapp 클래스에서 이렇게 파일 아이디를 불러오는 메쏘드를 통해서 파일을 첨부할 수 있도록 연결해주고 있다. 이런 것을 볼 때마다, 구글 생태계는 이렇게 모든 것이 연결되어 있어서 확장성도 좋고 편리하다는 느낌을 지울 수가 없다.


tempText 변수

textText 시트를 기억하는가? 이 변수는 textText의 텍스트를 가져오는 역할을 한다. 이 역시 앱스크립트 클래스와 메소드를 제공하므로, 이를 통해 가져왔다.

이 시트에 있는 a열1행에 있는 변수 텍스트를 저장하는 함수이다. 사실 이렇게 텍스트를 사용할 경우, 텍스트 스타일이라던가 폰트를 변경하는데 어려움이 있어, 필자는 html 파일을 만들어 html 형태의 텍스트를 내용으로 보내는 형태로 실제로는 사용하고 있다. 하지만 예제 연습에서는 위의 텍스트 파일을 사용하도록 하자.


  var addressUse = gatherAddress(sheet)


gatherAddress 메소드에서 리턴한 값을 가져온다. 리스트 형태로 리턴 값을 받아오며, 들어가는 값은 [chunja07@hanmail.net, chunja07@naver.com,,chunja07@gmail.com,,] 이런 리스트 형태이다


  var tempAdd = gatherAddress(sheet)


반복문 안에 if 절을 썼을 때 계속해서 리스트의 값이 true로 계속 나오게 되어, 어쩔 수 없이 쿠션으로 만든 변수이다. 반복문에서 if 절 사용시 조건 값에 사용하고 버리는 더미 변수라고 생각하면 되겠다.


  var titleUse = gatherTitle(sheet)


gatherTitle 메소드에서 리턴한 값을 가져온다. 리스트 형태로 리턴 값을 받아오며, 들어가는 값은 [기억,니은,디긋,리을,미음] 값을 가지고 있다.


마지막으로 반복문을 통해 실제로 벌크로 메일을 보내는 메소드이다. 

여기서 중요한 부분은 바로 메일 내용의 {title} 부분을 우리가 가져온 titleUse 리스트 내 값들로 바꾸어 주는 것이며, 만약 이메일이 없을 경우 MailApp 클래스의 sendEmail 메소드가 에러를 발생시키기 때문에, 메일이 없는 값은 조건값을 걸어 sendEmail 메소드를 발생시키지 않는 것이다.


  for (var i=0;i<titleUse.length;i++){

    var text = tempText.replace("{title}",titleUse[i]).toString();

    if(tempAdd[i]==""){

    } else {

      MailApp.sendEmail(addressUse[i],"고객을 위해 최선을 다하겠습니다",text, {

        attachments: [pdfFile.getAs(MimeType.PDF)]

      });


위와 가이 반복문의 총 길이는 회사 이름의 리스트 길이와 같다. 왜냐하면 회사 이름의 경우 어떻게 보면 DB에서의 유니크 값과 같이 없어서는 안되는 값이기 때문에, 무조건 존재하기 때문이다. 


var text

replace 메소드를 사용할 경우, {title} 값을 자체적으로 스플리트 하여 titleUse 배열에 있는 값으로 치환하여 준다. 이렇게 각 반복문의 배열 값에 따라 회사 이름으로 치환하여 준 후, PDF 파일을 첨부하여 넣어주면 된다. 


sendEmail 

이 메소드의 경우 필자도 써본적이 없기 때문에, 구글 디벨로퍼 문서를 참조하여 사용하였다. 수신자, 제목, 내용을 넣는 것인데, 조건값을 설정하여 변경할 수도 있다. 또한 html 값을 따로 만들어 넣을 수도 있으니, 구글 디벨로퍼 설명을 참조하면 사용할 수 있다.


이렇게 총 3개의 메소드를 사용하여 지메일을 벌크로 보내는 벌크 이메일 자동화 매크로 기능을 프로그래밍 해보았다.


Wrap up


프로그래밍을 배워야 하는 이유에 대해서

이미 체계가 갖춰진 회사에서는 이런 시스템이 구축이 되어 있을 것이며, 만약 구축되어 있지 않더라도 최근에는 이메일을 벌크로 보낼 수 있는 플랫폼이 존재하기에 그것을 활용해도 좋다. 다만 구글 스프레드시트, docs, form 등을 활용하여 스프레드 시트와 같이 연결시켜 사용하기 위해서는 앱스크립트를 활용하여 무한한 확장과 커스터마이제이션이 가능하다.


만약 프로그래밍을 전혀 접해본 적이 없다면, 아마 이해하기 힘들수도 있을 것이라고 생각한다. 하지만 만약 관심이 있다면, 프로그래밍의 기본적인 부분을 공부한 후(구조, 반복문, 조건문, 변수, 알고리즘 등) 조그만 프로젝트를 하나씩 실행하다보면 발전되어 있는 자신을 발견할 수 있을 것이다.


만약 앱이나 웹으로 실제로 퍼블리싱하게 된다면 네트워크쪽과 DB쪽을 연결 시키기 위해 프레임 워크등을 사용하여야 되기 때문에, 개발자가 아니라면 그 부분까지는 공부할 필요가 없을 것이라고 생각한다. 하지만 프로그래밍 코드를 작성하는 것 만으로도 논리적 사고 능력 향상에 큰 도움을 주니, 취미 활동으로 즐기기 좋은 두뇌 운동을 원한다면 이런 조그만 프로젝트부터 시작해보는게 어떨까 싶다.


매거진의 이전글 구글 스프레드시트/지메일 연동 벌크 메일 보내기 - 1
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari