MatlabからSendmail

実験にはMatlabを使うことがほとんどなんですが、ディスプレイのキャリブレーションなど、自動化しているが時間のかかる作業が終了したときに、それを通知して欲しい時があります。特にディスプレイのキャリブレーションは暗室で行っているので、途中で確認のために部屋を開けて、それまでの作業をだいなしにしたくない。

そんな時に便利なのが、MatlabのSendmailでメールを送る方法、だったのですが、ある時期からGmailのセキュリティが厳しくなり、メールがうまく送れなくなってしまいました。「安全性の低いアプリのアクセス」を許可しても、やっぱりダメ。困ってあちこち調べたら、何とか解決できたのでその方法の防備録。

作業の手順

  1. メール送信用のGmailアカウントを作る。
    普段使いしているアドレスではなく、専用のものを作った方が良いかと。このアドレスを仮にmy.labo@gmail.comとします。

  2. 専用のアカウントmy.laboにログインした後で、アプリパスワードのページ
    https://myaccount.google.com/apppasswords
    にアクセスする。

  3. 「アプリ固有のパスワードを新規作成するには、下にアプリ名を入力してください…」のアプリ名にMATLABと入力し、作成ボタンを押す。
    16桁のパスワードが作成されるのでそれをコピーする。スペースで区切られているけれども、入力時にスペースは不要。

  4. あとは、以下のようなコードを実行。例は、ネットを探せば色々と出てきますが、パスワードの扱いがポイントです。

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);

お試しあれ!


いいなと思ったら応援しよう!