コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

Gめーるいぢり

いぢってみる

はい、おはようございます僕です。今日もGmailいじりをやっていこうと思います。なんでやるのかと言いますとね。そう、僕もここ最近メールチェックができるような人になったんですよ。そんなわけでして、メールの話がしたくてたまらないわけですね。ですので明日使えないGmailの話でもしようかと思います。

ということで明日使えないGmail知識
「HTMLメールをプレーンテキストに切り替えることできない」

Search results - Gmail Help

へーそうなんだ。

おしまい。




まあそういう話をしたくてブログ書いているわけでなくて久しぶりに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メール加工してなんやかんややったアプリ作れないかなぁ……。


おわり