折腾来折腾去

pikipity的blog

Matlab 小技巧:通过 Sendmail 来发送信息

翻译自 “Matlab Geeks”“Sending messages with sendmail”

当你运行一段很长的代码的时候,坐在电脑前面看着程序运行是一件非常痛苦的事情。我发现,有时候,如果我不知道这段很长的代码要运行多长时间,或是有错误返回的时候我就会这样做(我还是坐在电脑前面因为我喜欢看猫的 gif 动画和学校破旧的屏幕吧,谁知道呢……)。但是你不需要这样做。当你的电脑正在“突突”运行的时候,离开去做其他事情吧。通过一个很有用的命令 “sendmail”,你就可以通过一些简单的命令发送信息到你的邮箱或是手机上了。通过这篇博文,我会分享几个简单的我通常用来提醒自己程序运行结束或是有错误的 .m 文件。

首先,“sendmail” 需要4个参数:收件人联系信息、email的主题、email的信息和附件。例如,如果你想发送一个email到我们的邮箱 “support@matlabgeeks.com",这里展示了你应如何做:

>> sendmail('support@matlabgeeks.com','Hello',...
'Thanks for the awesome email information!');

不幸的是,“sendmail” 不是这么简单,这样仅仅会返回一个错误,除非你已经设置了你用来发送的 email 地址和你是用的 SMTP 服务器。

>> setpref('Internet','SMTP_Server','mail.__.com');
>> setpref('Internet','E_mail','myID@__.com');
% and/or 
>> setpref('Internet','SMTP_Username','myID@__.com');

并且,如果你的服务器需要,你还必须加入你的账户密码。把你的密码放入明文中会使安全性很脆弱,要小心。

>>setpref('Internet','SMTP_Password',password);

现在,你可以发送邮件了!或者,如果你想发送一条短信的话,可以通过修改 “sendmail” 中收件人的部分来实现这个。例如,如果你想发送一条信息到你的 verizon 手机上,你可以用下面的命令:

>> sendmail('55555555555@vtext.com','Hello',...
'What's going on tonight?');

信息可以发送到的手机号码的列表可以在 “Mr. Tweney’s page” 中找到。

“sendmail” 一个非常好的用处就是当你的程序运行完之后发送信息给你。我已经附加了一些描述如何做的文件到这篇博文上。正如你将会看到的,我已经封装了一个 try catch 循环在程序中,所以任何错误都会发送 email 给我。比如,尝试用 a=5;b=[2 3] 或者 b=2 来运行 function

function sample_script(a, b)
% sample error and completion file
% what time is it?
date_time = datestr(now);
% try to do some type of command
try C = [a; b];   
   % if it works, return the time it finished
   disp(C);
    e_mail('support@matlabgeeks.com','matlabgeeks','vlugade',PASSWD,...
    'Completed',['At : ',date_time]);
catch err
   % find the error type
   errStr = err.identifier;
e_mail('support@matlabgeeks.com','gmail','vlugade',PASSWD,...
    'Completed',{['At : ',date_time], ['With error : ', errStr]});
end

你也肯定注意到了,我使用 “e-mail” 这个 function 来发送我的信息。这个 “e-mail.m” 文件已经附加在了这里。总的来说,它和你可以在 “Mathworks” 上找到的非常像,但是可以更方便的修改成你要用的。参数和 “sendmail” 稍微有点不一样,它需要在 email 内容之前提供收件人地址、SMTP 地址、用户名和密码。我们已经尽可能多的提供了 gmail、yahoo 和 matlabgeeks 的设置,但是你的设置有可能不一样。需要注意的是,你不需要为了让 function 工作而用明文保存你的密码,而是最好以一个变量的形式传递它。

再次提供一次附件



Comments