MATLABで日本語メール送信

つい最近知ったのですが、MATLABからメールを送信できるんですね。

やりたいのは、たとえば時間のかかる燃費シミュレーションを走らせておいて、終了と同時に解析チームにメールを飛ばす、といった事です。(注:これは説明のための作り話です。ホントは、ぜんぜん違う用途に使ってます)

blog_2013_02_25_00

初心者による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 はラッパーに過ぎません。そんなに工数をかけることなく、似たようなコマンドを作ることはできます。

あとは時間さえあればと思うのですが・・・そこが一番の問題です。うーむ。