LoginSignup
11
7

More than 5 years have passed since last update.

テキストパートを表示するGmail Add-onを作る

Posted at

きっかけ

Gmailからテキストパートを選択的に表示する機能が無くなってから久しい今日この頃ですが、マルチパートメールの送信テストでテキストパートの内容を目視確認をしなきゃいけない場面があります(日々、お客様に送っているメールの内容に問題がないか最終確認するアレです)。

Gmailの場合、自動的にHTMLパートが表示されてしまうため、テキストパートを表示しようと思ったら、

  1. メールのソースを表示する
  2. テキストパートをクリップボードにコピーする
  3. デコードツールでデコードする
  4. 内容確認

という手順を踏む必要があり、そこそこ負担になります。もちろん、古のBecky!某やThunderbird某のようなメーラを使えばテキストパートの内容は確認できるのですが、せっかくGmailをメインに使っているのであれば、テキストパートの確認もGmailで完結させたいところです。

そこで、Gmail上でテキストパートを表示するAdd-onを作ってみることにしました。

Gmail Add-onの基本

Gmail Add-onについては、公式情報を見ていただくのが良いかと思います。わずか4ステップでサンプルのAdd-onが作れます。今回作成するものも基本的にはこれをベースにしています。

実際のコード

作成するコードはマニフェストファイルと、Google App Scriptの実装2ファイルだけです。

appscript.json

まずは、マニフェストファイルから見ていきます。中身はいたって普通ですが、ポイントとしては、oauthScopesにメッセージの中身にアクセスするために https://www.googleapis.com/auth/gmail.addons.current.message.readonly のアクセス許可を与えている点です。

appscript.json
{
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
  ],
  "gmail": {
    "name": "text/plain",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
    "contextualTriggers": [{
      "unconditional": {
      },
      "onTriggerFunction": "buildAddOn"
    }],
    "primaryColor": "#4285F4",
    "secondaryColor": "#4285F4"
  }
}

Code.js

実はファイル名は何でもいいのですが、マニフェストファイルの onTriggerFunction で指定したエントリーポイントとなる関数を実装しています。ポイントとなるのはテキストパートの内容を取得している message.getPlainBody() の部分です。メールっていろいろな文字コードで送られてくるので、ISO-2022-JPとかUTF-8とかを自分でデコードしなきゃいけないのかと思いきや、全部Google App Script側でデコード処理までやってくれます。超楽チン。

Code.js
function buildAddOn(e) {
  // Activate temporary Gmail add-on scopes.
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);

  var messageId = e.messageMetadata.messageId;
  var message = GmailApp.getMessageById(messageId);

  // Section for text/plain part
  var section = CardService.newCardSection();
  var textPart = CardService.newTextParagraph()
    .setText(message.getPlainBody());
  section.addWidget(textPart);

  // Build the main card after adding the section.
  var card = CardService.newCardBuilder()
    .addSection(section)
    .build();

  return [card];
}

こんな感じのプロジェクトを作って先にご紹介した手順でデプロイをすればOKです。

text plain.png

実行してみる

Add-onをインストールしたGmail上でメールを選択すると、Add-onの画面上にテキストパートの内容が表示されます。
VERKLIGHETEN  CD などお知らせ   awwa500 gmail com   Gmail.png

難点としては、以下のようなものがありますが、ある程度ざっくりと確認する目的であればとりあえず使い物にはなりそうです。

  • Add-onの画面幅は固定らしく、テキストパートを閲覧するには正直ちょっと狭い
  • 長いリンクなどが折り返されず、途中で切れてしまいうため、全内容が確認できない

Gmail 15周年おめでとうございます!

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7