前提・実現したいこと
GASを利用してGmailから特定のメールをスプレッドシートにリストアップしたいです。
項目は「件名、送信元、宛先、本文、添付ファイル」
添付がある場合は添付ファイルをドライブにダウンロード(ファイルを作成)→作成されたファイルのIDを取得→ハイパーリンクを作成してリスト化して、ハイパーリンクにより添付ファイルの場所に飛べるようにしたいです。
発生している問題・エラーメッセージ
添付ファイルをドライブ内に作成後、ファイルIDの取得ができません。
ファイル自体は存在しているのに、getId()ができておらず、エラーメッセージはないが
取得結果がUndefinedとなります。
該当のソースコード
GoogleAppsScript
1// 設定情報 2function getConfig() { 3 return { 4 ssId: '',// スプレッドシートの ID 5 ssName: 'シート1',// スプレッドシートのタブ名 6 query: '検索ワード after:2019/8/31', 7 folderId: '' // ドライブのフォルダ(念のため共有もつけている) 8 }; 9} 10 11// 添付ファイルを保存 12function fetchFile(folderId, message) { 13 var folder = DriveApp.getFolderById(folderId); 14 var attachments = message.getAttachments(); 15 var obj = {}; 16 attachments.forEach(function (att){ 17 obj[att.getName()] = folder.createFile(att).getId(); 18 }); 19 return obj 20} 21 22// 実行関数 23function main() { 24 var config = getConfig(); 25 var sheet = SpreadsheetApp.openById(config.ssId) 26 .getSheetByName(config.ssName); 27 var messages = [['Subject', 'From', 'To', 'Content', 'Attachment']]; 28 29 GmailApp 30 .search(config.query) 31 .forEach(function (thread) { 32 thread.getMessages().forEach(function (message) { 33 var subject = message.getSubject(); 34 var to = message.getTo(); 35 var from = message.getFrom(); 36 var content = message.getPlainBody(); 37 var attachment = fetchFile(config.folderId, message); 38 39 var links = []; 40 if(attachment) { 41 var attName = Object.keys(attachment); 42 attName.forEach(function(a) { 43 links.push('=HYPERLINK(\"https://drive.google.com/uc?id=' + attName.a + '\",\"' + a + '\")'); 44 }); 45 } 46 else{ 47 links.push(''); 48 } 49 messages.push([subject, from, to, content].concat(links)); 50 }); 51 }); 52 53 if (messages.length === 0) { 54 return; 55 } 56 sheet.getRange('A1:E' + messages.length ).setValues(messages); 57}
試したこと
念のため、ドライブのフォルダの共有設定を「リンクを知っている人が全員編集可」としました。
複数のファイル形式で試したが、すべてNG。
ファイルのアップロードが完了するのを待つためにSleepを10秒いれてみたが変化なし。
補足情報
添付ファイルの個数は複数の場合もあるが今回はひとまず一件のみとしています。
回答1件
あなたの回答
tips
プレビュー