Gmail 첨부 파일을 자동으로 Google 드라이브에 저장을 GAS (Google Apps Script)로 구현
하고 싶은 일
Gmail에서 조건 검색한 이메일 첨부 파일을 Google 드라이브에 자동으로 저장
타 담당자가, 거래처로부터의 청구서를 매번 인쇄→경리 소프트웨어로 입력하고 있었습니다만, 인쇄를 생략하고 PDF 파일을 표시하면서 입력하는 환경을 목표로 하기 위해, Gmail의 메일을 첨부 파일(청구 책은 PDF이지만 이번에는 첨부 파일이라도 저장)을 Google Drive에 저장하는 스크립트를 구현했습니다.
신규성이 부족한 없는 내용입니다만, 첫 투고라고 하는 것과, 다소 집착한 점을 포함해 기재해 둡니다.
구현 흐름
코드 아래를 참조했습니다. 거의 둥근 복사.
텔레비전 방송국에서 일하는 독학 프로그래머 Gmail 첨부 파일을 google drive에 저장
1. Gmail을 조건으로 검색(이번은 from, 날짜, 첨부 있음을 조건)하여 검색 결과를 취득
SaveGmailAttachToDrive.gs
//メール検索用の日付計算
var now = new Date();
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); //こうすることで0時0分0秒となる
var yesterday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1);
var strYesterday = Utilities.formatDate(yesterday, "JST", "yyyy/MM/dd");
//メール検索キーワードの作成
var condition = '';
// condition += ' is:unread' //未読
// condition += ' subject:添付やで'; //件名
condition += ' has:attachment'; //添付あり
condition += ' after:' + strYesterday; //今日(昨日より後)
condition += ' from:' + 'メールアドレス'; //差出人
//Gmailで検索
var searchMail = GmailApp.search(condition);
var messeges = GmailApp.getMessagesForThreads(searchMail); //検索結果を配列で取得
2. Gmail을 조건으로 검색 (이번에는 from, 날짜, 첨부 있음을 조건)하여 검색 결과를 취득
메일의 검색 결과의 배열은 2차원이기 때문에, 이중 루프로 꺼냅니다
SaveGmailAttachToDrive.gs
var hozon_folder = DriveApp.getFolderById('GoogleDriveのFolderID');
for(var i = 0; i < messeges.length; i++) { //検索結果を一つずつ取り出す
for(var j = 0; j < messeges[i].length; j++) { //スレッドの場合ここを複数回実行
var attach = messeges[i][j].getAttachments();
var day = messeges[i][j].getDate(); //取り出したメールの日付を取得
var strDay = Utilities.formatDate(day , "JST", "yyyy_MM_dd");
if (day > today){ //★★メールが今日以降か再度チェック
for(var k = 0; k < attach.length; k++){
var filename = strDay + '_' + attach[k].getName();
hozon_folder.createFile(attach[k]);
var file = hozon_folder.getFilesByName(attach[k].getName())
file.next().setName(filename);
}
}
}
messeges[i][0].markRead();
}
빠진 포인트
메일 검색 결과는 메일 단위가 아니라 스레드 단위였습니다.
즉, 1.의 처리로 오늘의 메일만 취득하고 있다고 생각했는데, 이하 이미지와 같이, Gmail의 검색 결과로 숫자가 표시되는 경우는, thread내에 복수의 메일이 포함되어 있어, 오늘보다 이전의 메일도 포함되어 있을 가능성이 높다.
그렇다고 해서, thread로부터 메세지를 꺼낸 후에도 일자를 판정하는 처리를 더하고 있습니다.
3. 실행 트리거 설정: 시간을 트리거로 하루에 한 번 실행
실행일 첨부 파일을 체크하므로, 23~24시에 매일 실행으로 세트했습니다.
트리거 설정은 아래를 참조하십시오.
GAS 초보자가 GAS를 다루기 위해 알아야 할 사항 10가지
끝
Google Drive에 저장한 파일은 Google Drive↔Synology NAS Cloud Sync↔DropBox에서 DropbBox 동기화하여 다른 사용자도 볼 수 있습니다.
Gmail→DropBox 직접 보존도 생각했습니다만, 이하 소거법에 의해 이번의 구현을 했습니다.
첫 게시물이었습니다. 그 밖에도 GAS로 여러가지 실장하고 있으므로, 그 주위 기고할 수 있으면 좋겠습니다.
Reference
이 문제에 관하여(Gmail 첨부 파일을 자동으로 Google 드라이브에 저장을 GAS (Google Apps Script)로 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kokitkat/items/63f562ced294cd1211dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)