前提・実現したいこと
gasを使用し、ある特定のメール文をGoogleドライブに自動保存される機能を作成したい。
1.メールの件名を検索
2.メールのデータをPDFにして一件ずつドライブに格納されるように実装
3.かぶりがあれば削除されるようにしたい
4.添付ファイルは保存されなくてもいい(できれば保存されるようにしたい)
発生している問題・エラーメッセージ
https://tonari-it.com/gas-gmail-attachment-drive/
こちらを参考にして作成していますが、pushの仕方、for文の回し方。要素の取得法。pushする方法などがあまり理解できず苦しんでいます。
該当のソースコード
const FOLDER_ID = '********'; //フォルダID const SEARCH_TEAM = '***'; //検索タイトル //メイン(メールから添付ファイルを取得) function fetchFile(){ var myThreads = GmailApp.search(SEARCH_TERM, 0, 100); //条件にマッチしたスレッドを検索して取得(0~100件まで) var myMessages = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得し二次元配列で格納 var valMsgs = []; Logger.log(myMessages[0][0].getSubject()); //取得メールの件名表示 } //フォルダの中に入ってるファイルの名前を取得 function getFileNames(){ var files = FOLDER.getFiles(); var fileNames = [] var count = 0 /* 各メールから日時、送信元、件名、内容、ID、添付ファイルを取り出す */ for (var i = 0; i < myMessages.length; i++) { for (var j = 0; j < myMessages[i].length; j++) { var msid = myMessages[i][j].getId();//メッセージIDを取得 // もしメッセージIDがフォルダに存在しなければ if (!hasId(msid)){ var date = myMessages[i][j].getDate(); var from = myMessages[i][j].getFrom(); var subj = myMessages[i][j].getSubject(); var body = myMessages[i][j].getPlainBody().slice(0, 200); var perm = myThreads[i].getPermalink(); var attach = myMessages[i][j].getAttachments(); var links = ["","",""]; valMessages.push([date,from,subj,body,msid,perm,attach]); } } } while (files.hasNext()) { fileNames[count] = files.next() count++ } return fileNames } //フォルダにあるファイル名が添付ファイル名と同じとき更新 function updateFile(attachments){ var fileNames = getFileNames() for(var i in attachments){ for(var j in fileNames){ //ドライブにすでに同じ名前のファイルがあるか? if(attachments[i].getName() == fileNames[j]){ var files = DriveApp.getFilesByName(fileNames[j]) //重複ファイルを削除 if (files.hasNext()) { var file = files.next() file.setTrashed(true) Logger.log(file.getName()) //削除したファイル名表示 } } } FOLDER.createFile(attachments[i]) //ドライブに添付ファイルを保存 } }
知りたいこと。
1.PDFとしてメールの要素を出力し、フォルダに格納する方法。
2.すでにPDFとして格納されている場合は重複するPDFを削除する機能
回答1件
あなたの回答
tips
プレビュー