実現したいこと
ラベル分けされたGmailの本文や添付画像をスプレッドシートに張り付けたい。
前提
メールはスレッド状になっていたり、添付画像は複数(基本は1枚)だったりします。
発生している問題・エラーメッセージ
エラーメッセージ エラー Exception: ネットワークの問題または無効な URL のため URL から画像を取得中にエラーが発生しました
該当のソースコード
GAS
1function getMail_new_202304(){ 2 var searchCondition = 'is:unread label:〇〇〇〇〇〇〇〇'; 3 var threads = GmailApp.search(searchCondition, 0, 500); 4 var ss1 = SpreadsheetApp.openById("〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇"); 5 var sh1 = ss1.getSheetByName("シート1"); 6 var row =sh1.getRange(sh1.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow() +1; 7 8 for(const thread of threads){ 9 const messages = thread.getMessages(); 10 for(var i=0; i<messages.length; i++){ 11 const message = messages[i]; 12 const mailBody = message.getPlainBody(); 13 const mailFrom = message.getFrom(); 14 const date = message.getDate(); 15 16 sh1.getRange(row,1).setValue(mailFrom); 17 sh1.getRange(row,2).setValue(date); 18 sh1.getRange(row,3).setValue(mailBody); 19 20 21 22 23 const attachments = messages[i].getAttachments(); 24 var blob; 25 26 for(const attachment of attachments){ 27 console.log(attachment.copyBlob()); 28 blob = attachment.copyBlob(); 29 //base64に変換 30 var c_type = blob.getContentType(); 31 var base64 = Utilities.base64Encode(blob.getBytes()); 32 var data = "data:" + c_type + ";base64, " + base64; 33 //セルイメージを貼り付ける 34 var image = SpreadsheetApp.newCellImage() 35 .setSourceUrl(data) 36 .setAltTextTitle("添付画像") 37 .setAltTextDescription("報告画像") 38 .build(); 39 } 40 sh1.getRange(row,4).setValue(image); 41 // messages[i].markRead(); 42 row++; 43 } 44 } 45} 46
お願い
どこの部分が間違いか、またはそもそも大きな間違いを犯しているなど、具体的に教えていただけると助かります。
〇部分をテスト環境に置き換えると送信元や受信日時、本文は取得でき、添付画像のみうまくいきません。
よろしくお願いします。
追試してみましたが、
添付画像(1MB未満のJPEG画像, 4MB程度のHEIF写真それぞれ1メールに1つ)はセルに挿入されました。
(追記、複数の画像添付でも正常に2行にわたってメールデータと画像がそれぞれ1行ずつ挿入されました。)
ごめんなさい。勘違いでした。複数の画像添付では、最後の画像のみがセルに挿入されていました。
エンコードは2回行われますが、imageを上書きしているのですね。
ありがとうございます。貴殿の環境下でうまくいったとのことで、まさかのスプレッドシートそのものの不具合を疑い、新規シートで走らせたところうまくいきました。原因不明ですが解決しましたのでお礼とさせていただきます。
解決のお役に立ってよかったです。

回答1件
あなたの回答
tips
プレビュー