質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1335閲覧

GAS Gmailの添付ファイルを保存、更新

rrrrrrrrrr21

総合スコア3

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/21 03:50

前提

GASでgmailの添付ファイルを
Googleドライブに保存、更新させたくチャレンジしております。

実現したいこと

条件に合う複数のメール(添付ファイル)を保存、上書きさせたい。

発生している問題・エラーメッセージ

下記のコードですと最新の添付ファイルしか保存、更新されません。
エラーメッセージ

### 該当のソースコード var SEARCH_TERM = 'subject:(事業部) '; //検索条件(件名で検索の場合) var FOLDER = DriveApp.getFolderById('○○○○'); //保存するフォルダ(Googledrive上のURL”folders/”以下) //メイン(メールから添付ファイルを取得) function fetchFile(){ var myThreads = GmailApp.search(SEARCH_TERM, 0, 30); //条件にマッチしたスレッドを検索して取得(0~30件まで) var myMessages = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得し二次元配列で格納 var attachments = myMessages[0][0].getAttachments(); //添付ファイルを取得 Logger.log(myMessages[0][0].getSubject()); //取得メールの件名表示 updateFile(attachments) //ファイル置き換え } //フォルダの中に入ってるファイルの名前を取得 function getFileNames(){ var files = FOLDER.getFiles(); var fileNames = [] var count = 0 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]) //ドライブに添付ファイルを保存 } } ### 試したこと ### 補足情報(FW/ツールのバージョンなど) こちらのコードをどう修正をすれば希望通りに動くのかご教示いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

var attachments = myMessages[0][0].getAttachments(); //添付ファイルを取得

getMessagesForThreads で取得した myMessages は、指定したスレッド内のすべてのメッセージを含んでいると思いますが、getAttachments する際に myMessages[0][0] と指定しているので、1つ目のスレッドの1つ目のメッセージから添付ファイルを取り出しています。
myMessages を for 等でループさせて、順番に myMessages に含まれるすべてのメッセージから添付ファイルを取得する必要があると思います。

Google のドキュメント getMessagesForThreads(threads) に for 文を使って、指定したスレッド内のすべてのメッセージを取得するサンプルがあるので参照してください。

投稿2022/12/21 04:52

CHERRY

総合スコア25175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rrrrrrrrrr21

2022/12/26 07:22

ご回答ありがとうござます。 無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問