[小ネタ] Sumo LogicのScheduled Searchで日本語の件名のメールを送信したい

TL;DR: つ「MIME エンコード」
2021.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Sumo Logic の Scheduled Search は、日次や週次など定期的に、あるいは特定条件に合致したときに、自動的にログのクエリ結果を送信してくれる便利な機能です。

ただ、送信先をメールアドレスにしている場合、そのメールアドレスの標題(サブジェクト)に日本語が使えないのは、場合によっては不便なところもあるかと思います。

UI 上では入力できたように見えるんですが、実際に受信してみると「???」になっているという。。。1

これ自体は仕様として諦めざるを得ないん2ですが、ワークアラウンドとしてメールの標題に日本語を埋め込むことは可能です。
年季のはいったベテランエンジニアであれば、ピンとくるかたもいらっしゃるかもしれない、昔ながらの方法です。

ワークアラウンド:予め MIME エンコードしておく

「MIME エンコード」そのものの説明は後述するとして。
要は、標題に埋め込みたい日本語のメッセージを予め MIME 形式でエンコードしておき、その文字列を Scheduled Search の Subject にそのまま記載しておくという方法になります。

受信してみるとこのとおり、ちゃんと日本語が表示されていますね。

設定時点でエンコードしてしまうので、UI からみると、一般的な人類は内容を読み取ることができない状態です。メンテ性はおちるのですが、どうしても「メールのサブジェクトに日本語を埋め込みたい」という場合には御検討ください。

伝統的には日本語の標題は「ISO-2022-JP」でエンコードされていたのでこちらのほうが事故が少ないと思いますが、イマドキのモダンなメーラをお使いなら「UTF-8」でエンコードしても大丈夫かなと思います3

ちなみに「日本語」と言ってしまっていますが、当然他の言語や、ASCII 以外の文字を埋め込むことも仕様上可能です。4
ただし若干、受け取り側の環境・特にメーラ(MUA)の実装に依るところもありますので、ちゃんとデコードされるか・読み取れるかどうかは事前に検証するなど確認をお願いします。

そもそも: MIME とは

語り出すと長くなるので、詳細は参考資料を見て頂きたいのですが。。。そもそも「電子メール」という仕組み(特にヘッダ部)は、そもそも日本語などの多バイト文字圏のことなど考慮しないところから出発したものなんですね。5

ただインターネットの利用が英語圏のみならず世界中に広がった今日、そのままだと著しく不便なので、何らかのかたちで文字コードを変換して含めることにしましょう、と、そういう流れの中で決まったのが MIME (Multipurpose Internet Mail Extensions) というものだと、ざっくり理解して頂けると幸いです。

MIME エンコード方法

前述したとおり、MIME エンコード・デコード自体は、そこそこ昔からある手法です。
例えば、コマンドラインツール nkf で行う場合は下記の様になります。

# ISO-2202-JP
% printf "日本語テスト" | nkf -M -j
=?ISO-2022-JP?B?GyRCRnxLXDhsJUYlOSVIGyhC?=

# UTF8
% printf "日本語テスト" | nkf -M -w
=?UTF-8?B?5pel5pys6Kqe44OG44K544OI?=

ほかにも「mime エンコード ツール」等として検索すると、さまざまなツールや Web サイトが出てきます。お好みでそれらのサイトもご活用下さい。

まとめ

Sumo Logic のScheduled Searchの標題には、そのままでは日本語は含められませんが、MIMEエンコードすると含めることも可能になります、というお話でした。

前述した内容の繰り返しになりますが、設定する時点でエンコードしてしまうので、どうしてもメンテナンス性はおちます。なので基本は英語の標題をつけつつ、どうしてもというところで使うと良いかと思います。
また「Description (概要)」欄もありますので、そちらと併用してもいいですね。ご活用下さい。

参考

脚注


  1. UI そのものが英語以外に対応していないので、仕方ないところかと思います。一方で、ダッシュボードの Markdown など、いつの間にか多言語に対応された例もあります 
  2. 欲をいえば、正直なんとかして欲しいところではあります 
  3. 手元で確認した範囲で言えば、少なくともGmail環境では大丈夫でした 
  4. その場合はISO-2022-JPではなくてUTF-8にしましょう 
  5. 1980年代の話です。回線帯域もコンピュータの性能も、今からは考えられないほどミニマムな時代ですので、当時においては必要な判断だったと思います。