MATLABで日本語メール送信
つい最近知ったのですが、MATLABからメールを送信できるんですね。
やりたいのは、たとえば時間のかかる燃費シミュレーションを走らせておいて、終了と同時に解析チームにメールを飛ばす、といった事です。(注:これは説明のための作り話です。ホントは、ぜんぜん違う用途に使ってます)
初心者によるMATLABメモさまの記事を参考にしたり、MATLABコマンドウィンドウで「 doc sendmail 」と入力してヘルプを見たりした結果、たしかにMATLABからメールを送信できました。
ところが、日本語文字が化ける! 少なくとも、お客様が使われているメーラーでは文字化けしまくりでした。うーん、これはいけない。とういわけで、これをなんとかしてみました。
日本語でメールを送れるようにする
≪この変更は、R2010bで確認しました。他のバージョンでは適用できないかも分かりません≫
MATLABの、sendmail コマンドを使うと、メールを送信できます。この子を日本語対応してあげれば良い!というわけで、改造しちゃいました。
sendmailコマンドは、 MATLABの、 toolbox\matlab\iofun\sendmail.m に実体があります。これをゴニョゴニョしちゃいましょう。
(1)sendmail.m を、 sendmail2.m としてコピーする
どこでもいいので、適当なフォルダに sendmail.m を sendmail2.m としてコピーしちゃいましょう。勇気があるなら、sendmail.m を直接いじってもいいです。
(2)1行目の文字列 sendmail を、 sendmail2 に変える
ファイルを sendmail2.m としたので、関数名も sendmail2 に変えないといけません。関数名は1番上にあるので、これを sendmail2 に変えちゃいましょう。
(3) すべての ‘SJIS’ を、 ‘utf-8’ に変更する
sendmail2.m の中に3箇所あるので、これを ‘utf-8’ に書き換えちゃいましょう。
これで、日本語メールが送信できるようになります。ただし、30分くらいでやったクイックハックです。もっといい方法があるかも分かりません。
試行錯誤の道のり
私は、MATLABの、このコマンドが気に入らないなと思ったとき、まずはじめに次のコマンドを実行します。
>> edit sendmail.m
MATLABコマンドは、sendmail.m のように中身が公開されている事が多いです。その場合、edit コマンドでソースコードを開くことができます。あとはm-fileの中身を見ていけば、なんとなくここが怪しいという事が分かります。
今回着目したのは、sendmail.m の最終更新日が 2007/12/06 であることと、 ‘SJIS’ という文字列です。たしか、ちょっと前からMATLABの文字列保持形式が UTF-8 に変わったはずです。文字化けするのは、それに追従できていないのが原因ではないかと考えました。
まずは、オーソドックスに ‘SJIS’ を ‘iso-2022-jp’ に変えてみました。すると・・・だいたい文字化けしないのですが、本文の最後の最後で文字化けする!おしい!すごくおしい!
仕方が無いので ‘utf-8’ に変更してみたところ・・・ビンゴ!メール送信対象のお客様は、1種類のメーラーしか使っていません。そのメーラーで文字化けしない事を確認したので、クイックハック終了です。
所感
本当は、改造後のスクリプトをそのまま公開したいんですが、sendmail.m はマスワークスさんの著作物なので、ムリです。
なんとか公開しようとすると、1から似たようなものを作るしかありません。とは言え、メール送信機能はJavaがもっているもので、sendmail.m はラッパーに過ぎません。そんなに工数をかけることなく、似たようなコマンドを作ることはできます。
あとは時間さえあればと思うのですが・・・そこが一番の問題です。うーむ。