いぢってみる
はい、おはようございます僕です。今日もGmailいじりをやっていこうと思います。なんでやるのかと言いますとね。そう、僕もここ最近メールチェックができるような人になったんですよ。そんなわけでして、メールの話がしたくてたまらないわけですね。ですので明日使えないGmailの話でもしようかと思います。
ということで明日使えないGmail知識
「HTMLメールをプレーンテキストに切り替えることできない」
へーそうなんだ。
おしまい。
まあそういう話をしたくてブログ書いているわけでなくて久しぶりにGASやったとかそういう話をするのです。本当にやりたかったことはHTMLメールの中身ってGASだとどう見えるんだろうと気になったって話でした。
// ラベルの取得 var label = GmailApp.getUserLabelByName("取得したいラベル名"); // Gmail上では "label:階層A-階層B" のように表示されるが // GASで記述する際 "階層A/階層B" のようにスラッシュで囲む
関係ないけど久しぶりにGASいじっててここ詰まった。GASだとこう書くんですね……。
てなわけでしてHTMLメールはGAS上だとどういう感じに取得されるのか気になったので見て見ます。
function getBody() { var label = GmailApp.getUserLabelByName('ラベル名'); Logger.log(label.getName()); var threads = label.getThreads(0, 1); // 取得数 *1件取得のため下でループを回す必要性は特にないです for(var n in threads) { var msgs = threads[n].getMessages(); for (var msg in msgs) { // 本文取得 Logger.log(msgs[msg].getBody()); } } }
出力ログ
<html> <head> </head> <body> <!-- 中身 --> </body>
こんな感じに取得できるっぽいですね。ちゃんとHTMLで中身取れるんですね。よかった。
おわり
おまけ
そしたらHTMLメールの一部のタグの取得を試みます。GASはDOMParser
なんて高尚なもの使えないっぽいですね……。まあいいや。正規表現使って気合いでとってみます。幸いにもHTMLメールはWebの場合と異なりかなり制約があるのでなんとかなるでしょう(いい加減)。
var body = msgs[msg].getBody(); var match = body.match(/<a(?: .+?)?>.*?<\/a>/g); Logger.log(match[0]);
こんな感じで……。
出力
<a target="_blank" href="***">***</a>
こんなん取れた。ヨシ!
これでHTMLメール加工してなんやかんややったアプリ作れないかなぁ……。
おわり