MatlabからSendmail
実験にはMatlabを使うことがほとんどなんですが、ディスプレイのキャリブレーションなど、自動化しているが時間のかかる作業が終了したときに、それを通知して欲しい時があります。特にディスプレイのキャリブレーションは暗室で行っているので、途中で確認のために部屋を開けて、それまでの作業をだいなしにしたくない。
そんな時に便利なのが、MatlabのSendmailでメールを送る方法、だったのですが、ある時期からGmailのセキュリティが厳しくなり、メールがうまく送れなくなってしまいました。「安全性の低いアプリのアクセス」を許可しても、やっぱりダメ。困ってあちこち調べたら、何とか解決できたのでその方法の防備録。
作業の手順
メール送信用のGmailアカウントを作る。
普段使いしているアドレスではなく、専用のものを作った方が良いかと。このアドレスを仮にmy.labo@gmail.comとします。専用のアカウントmy.laboにログインした後で、アプリパスワードのページ
https://myaccount.google.com/apppasswords
にアクセスする。「アプリ固有のパスワードを新規作成するには、下にアプリ名を入力してください…」のアプリ名にMATLABと入力し、作成ボタンを押す。
16桁のパスワードが作成されるのでそれをコピーする。スペースで区切られているけれども、入力時にスペースは不要。あとは、以下のようなコードを実行。例は、ネットを探せば色々と出てきますが、パスワードの扱いがポイントです。
myaddress = 'my.labo@gmail.com';
mypassword = 'XXXXXXXXXXXXXXXX'; % ここに16桁のアプリパスワードを入れる。
server = 'smtp.gmail.com';
recipient = 'recipient@abc.com'; % 受信者のアドレス
setpref('Internet', 'E_mail', myaddress);
setpref('Internet', 'SMTP_Username', myaddress);
setpref('Internet', 'SMTP_Password', mypassword);
setpref('Internet', 'SMTP_Server', server);
props = java.lang.System.getProperties;
props.setProperty('mail.smtp.auth','true');
props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl.SSLSocketFactory');
props.setProperty('mail.smtp.socketFactory.port','465'); % SSL (465)
mySubject = 'Message from Matlab'; % メールのタイトル
message = 'This e-mail is a test.' % 送りたい内容
sendmail(recipient, mySubject, message);
お試しあれ!