下午學習MATLAB的時候,翻看Demo文檔,想查找些玩樂的代碼,比如說用MATLAB調用windows下面的應用程序和系統進程,比如要運行電腦中的電影或者歌曲,
用system如下:
system('E:\娱乐\电影\放牛班的春天 唱诗班男孩.rmvb')
程序運行開,MATLAB會佔用內存,一直busy,即要想關閉MATLAB首先要關閉所運行程序,結束之後返回ans=0,說明成功找到并運行。顯然這樣很浪費資源,因此采用winopen,如下:
winopen('E:\娱乐\电影\放牛班的春天 唱诗班男孩.rmvb'),這樣運行之後便與matlab無瓜葛。
進行批處理文件后,需要進行定時定點關機,使用system('shutdown.exe -s -t 3600');在一個小時后關機接著又不小心看到sendmail函數,當時就覺得挺好玩,用MATLAB的發smtp邮件,假如做個循環,那豈不是......
MATLAB中的Demo中有詳細介紹。但是不同的MATLAB版本會遇到不同的問題。
首先,設定设定smtp服务器:
setpref('Internet','SMTP_Server','smtp.email.com');%將email改為平時所用的郵箱,如gmail
setpref('Internet','E_mail','邮箱地址');
其次,在7.0以下的版本中sendmail的一些smtp语法跟不上当前的时代,需要修改语句:
在Matlab7.0版sendmail.m的140到150行左右:
sendSMTP(out, in, ['MAIL FROM: ' from], 1);改为:sendSMTP(out, in, ['MAIL FROM: '], 1);
sendSMTP(out, in, ['RCPT TO: ' to{i}], 1); 改为:sendSMTP(out, in, ['RCPT TO: '], 1);
sendSMTP(out, in, ['RCPT TO: ' to], 1);改为:sendSMTP(out, in, ['RCPT TO: '], 1);
在第210~220行附近:
sendSMTP(out, in, '.',1); 改为:sendSMTP(out, in, sprintf('\n.\n'), 1);
在7.0版本以上不需要修改即可用,輸入以下代碼:
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');
然而,現行的smtp服务器都需要身份验证,Matlab7.0版的sendmail.m不支持身份验证,向m文件中添加验证语句。
打开Matlab7.0版的sendmail.m 找到130多行的语句:
“sendSMTP(out, in, 'HELO mailman', 1);”,
在此行之后添加以下三行:
sendSMTP(out, in, 'auth login', 1);
sendSMTP(out, in, '加密的用户名', 1);
sendSMTP(out, in, '加密的密码', 1);
然後輸入:
setpref('Internet','SMTP_Server','smtp.email.com');
setpref('Internet', 'E_mail', '用戶名');
setpref('Internet', 'E_mail', '密碼');
最後,可以向別人發郵件了:
sendmail('收件人地址','邮件标题',{'邮件内容','內容','內容'},'附件地址')
注意,Matlab发送邮件是通过Java接口,速度比较慢,所以不推荐添加太大的附件,以免发送失败。並且MATLAB不支持發送中文信息,會出現亂碼,當然假如十分特別有這種想法的,可以先用函數double將中文轉化為數字矩陣保存,然後用setstr再轉為中文即可。