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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

解決済

1回答

4030閲覧

GASを使ってhtmlメールをそのまま転送したい

RoyHargrove

総合スコア2

Google Apps Script

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

0グッド

0クリップ

投稿2020/04/30 09:19

前提・実現したいこと

定期的に送られてくるメールを、特定のメールアドレス宛に自動で転送したいと考えております。
Google Apps Scriptを利用して上記を達成できないか調査をしております。

発生している問題

テキストメッセージの転送については以下記事の内容を参考にして実現できました。
http://makimakimakino.hatenablog.com/entry/2019/07/27/133404

一方で、htmlメッセージをそのまま転送することができずに困っております。
コード内で var messageBody = messages[i][lastNum].getPlainBody(); とありますので、プレーンテキストしか取得できていないということは理解しているのですが、getPlainBodygetBodyにしたところでhtmlそのものが記載されてしまうので対処方法がわからず苦戦しております。

該当のソースコード

function mailForward() { var query = 'subject:"[GAS][MAIL][TEST]テストメール" newer_than:1d'; var threads = GmailApp.search(query, 0, 10); var messages = GmailApp.getMessagesForThreads(threads); var myMailAddress = 'sample@xxxx.com'; var forwardTo = 'sample@yyyy.com'; var forwardSubject = '[GAS][MAIL][TEST][FORWARD]テストメール'; var forwardBody =''; for(var i=0; i < messages.length; i++) { var lastNum = messages[i].length-1; //Logger.log('やり取り数:'+ lastNum); var lastSender = messages[i][lastNum].getFrom(); //Logger.log('最後の送信者:'+ lastSender); if(lastSender.indexOf(myMailAddress) == -1){ var messageId = messages[i][lastNum].getId(); var messageDate = messages[i][lastNum].getDate(); var messageSubject = messages[i][lastNum].getSubject(); var messageBody = messages[i][lastNum].getPlainBody(); forwardBody = forwardBody + 'メッセージID : ' + messageId + '\r\n' + '送信者 : ' + lastSender + '\r\n' + '送信日 : ' + messageDate + '\r\n' + '件名 : ' + messageSubject + '\r\n' + '内容 : \r\n' + messageBody + '\r\n' + '+++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\n'; } } //Logger.log(forwardBody); GmailApp.sendEmail(forwardTo, forwardSubject, forwardBody); }

何卒よろしくお願いいたします。

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

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

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

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

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

draq

2020/04/30 09:25

プログラミングの回答じゃないのでこちらに書きますが、この要件ならGmailのフィルタ機能だけでできませんか?
RoyHargrove

2020/04/30 09:47

ご指摘ありがとうございます。会社のG Suiteアカウントのため、管理者設定により自動転送設定がオフになっているようでして、フィルタ機能で転送設定ができない状態です。そのためGASでどうにかできればと考えております。よろしくお願いいたします。
draq

2020/04/30 09:54

それ情報漏えい対策では?勝手に転送していいんでしょうか。
RoyHargrove

2020/04/30 09:59

社内向けに転送するので、特に問題ないと考えております
guest

回答1

0

ベストアンサー

GmailApp.sendEmail の呼び出し時に、Advanced parameters を指定すると、HTMLメールも作成できるようです。

ただし、軽く試した限りだとインライン画像は GmailMessage.getRawContent で取得した文字列を解析して画像の BASE64 エンコードされたデータを取得して、Attachments パラメータにセットする必要がありそううでした。
(面倒なのでそこまで試してません。)

JavaScript

1function sendForward() { 2 const threads = GmailApp.search("subject:HTMLテストメール"); 3 console.log(`[sendForward] threads.length = ${threads.length}`); 4 5 threads.forEach((thread) => { 6 const messages = thread.getMessages(); 7 messages.forEach((message) => { 8 const subject = message.getSubject(); 9 const body = message.getBody(); 10 11 GmailApp.sendEmail( 12 "recipient@example.com", 13 "Fw: " + subject, 14 message.getPlainBody(), 15 { htmlBody: body } //ここでHTML Bodyを指定 16 ); 17 }); 18 }); 19}

投稿2020/04/30 13:03

draq

総合スコア2577

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

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

RoyHargrove

2020/04/30 13:47

> GmailApp.sendEmail の呼び出し時に、Advanced parameters を指定すると、HTMLメールも作成できる まさにこの方法で解決することできました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問