きっかけ
Gmailからテキストパートを選択的に表示する機能が無くなってから久しい今日この頃ですが、マルチパートメールの送信テストでテキストパートの内容を目視確認をしなきゃいけない場面があります(日々、お客様に送っているメールの内容に問題がないか最終確認するアレです)。
Gmailの場合、自動的にHTMLパートが表示されてしまうため、テキストパートを表示しようと思ったら、
- メールのソースを表示する
- テキストパートをクリップボードにコピーする
- デコードツールでデコードする
- 内容確認
という手順を踏む必要があり、そこそこ負担になります。もちろん、古の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
のアクセス許可を与えている点です。
{
"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側でデコード処理までやってくれます。超楽チン。
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です。
実行してみる
Add-onをインストールしたGmail上でメールを選択すると、Add-onの画面上にテキストパートの内容が表示されます。
難点としては、以下のようなものがありますが、ある程度ざっくりと確認する目的であればとりあえず使い物にはなりそうです。
- Add-onの画面幅は固定らしく、テキストパートを閲覧するには正直ちょっと狭い
- 長いリンクなどが折り返されず、途中で切れてしまいうため、全内容が確認できない
Gmail 15周年おめでとうございます!