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

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

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

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

Q&A

解決済

1回答

1701閲覧

gmailに届いたメールを、添付ファイル(jpeg画像)とともに、LINENotifyにて通知したい。

yuu_dec

総合スコア12

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

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

0グッド

0クリップ

投稿2018/11/16 05:17

前提・実現したいこと

gmailに届いたメールを、添付ファイル(jpeg画像)とともに、LINENotifyにて通知したい。

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

件名や本文は送信されますが、添付画像が添付されません。

該当のソースコード

GAS

1function getMail(){ 2 3 //指定した件名のスレッドを検索して取得 4 var myThreads = GmailApp.search(FindSubject, 0, 10); 5 //スレッドからメールを取得し二次元配列に格納 6 var myMessages = GmailApp.getMessagesForThreads(myThreads); 7 8 9 for(var i in myMessages){ 10 for(var j in myMessages[i]){ 11 12 //スターがないメッセージのみ処理 13 if(!myMessages[i][j].isStarred()){ 14 15 var strDate = myMessages[i][j].getDate(); 16 var strSubject = myMessages[i][j].getSubject(); 17 var strMessage = myMessages[i][j].getPlainBody().slice(0,200); //本文を200文字取得 18 var attachments = myMessages[i][j].getAttachments(); //添付ファイルを取得 19 20 //LINEにメッセージを送信 21 sendLine(strDate,strSubject,strMessage,attachments); 22 23 //処理済みのメッセージをスターをつける 24 myMessages[i][j].star(); 25 } 26 } 27 } 28} 29 30function sendLine(strDate,strSubject,strMessage,attachments){ 31 32 //Lineに送信するためのトークン 33 var strToken = "トークン"; 34 var formData = { 35 'message' : "\n" + strSubject + "\n" + "\n" + strMessage, 36 'imageFile': attachments // 画像を添付のつもり 37 } 38 var options = 39 { 40 "method" : "post", 41 "payload" : formData, 42 "headers" : {"Authorization" : "Bearer "+ strToken} 43 44 }; 45 46 UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); 47} 48

試したこと

各種サイトを参考にして作成しましたが、うまくいきません。
初心者のため、考えながらほぼコピペで作成しております。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

var attachments = myMessages[i][j].getAttachments(); //添付ファイルを取得のところなのですが、getAttachments()はGMailAttachmentの配列が返されるので、それはLineには送れないです(LineにはっていうかGMailを処理するgoogle app scriptでしか扱えない形式ですので、そのままだと他のメールとしても転送もできないです)。

第一に画像一つ(しかLineには送れなさそうなので)であることを選別する必要があります。
第二にそれをgetAs('image/png')としてBlobデータに変換する必要があります。

概念的に示すと

javascript

1var attachments = myMessages[i][j].getAttachments(); 2var attachment = undefined; 3for(var i = 0; i < attachments.length; i++) { 4 if(attachments[i].getContentType() === 'image/png') { attachment = attachments[i].getAs('image/png'); break;} 5}

という感じでしょうか。概念的っていうのは動くことを保証しないし、検証もしないという意味です。

投稿2018/11/16 05:33

編集2018/11/16 05:39
papinianus

総合スコア12705

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

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

yuu_dec

2018/11/16 05:47

回答ありがとうございます。 処理を行うアドレスに届くメールの添付画像は必ず一つになっています。 ご指摘の行の次の行に var blob = attachments.getAs('image/jpeg'); を加えましたが、 TypeError: オブジェクト GmailAttachment で関数 getAs が見つかりません。 となってしまいます。 Blobデータへの変換方法が間違っているのでしょうか。
papinianus

2018/11/16 05:51

回答にも書いていますが、getAttachments()はGMailAttachmentの*配列*を返します。概念コードに書いたようにattachmentsの複数形を単数形のattachmentにしなければgetAsは使えません。 > 処理を行うアドレスに届くメールの添付画像は必ず一つになっています。 あなたがgoogleの開発にたのみこんで1ファイルの添付画像のときだけの専用命令を作ってもらわない限り、「1ファイルの画像」であることはプログラム上わかりません。それをコードで書くとforなりで繰り返し処理をして、画像の最初の一個を明示的に取得するコードを作り上げる必要があります。
yuu_dec

2018/11/16 06:00 編集

ご丁寧な回答ありがとうございました。 無事動作致しました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問