通过Matlab发送邮件要注意的问题
背景:
有時候在實驗室,通過MATLAB做一個計算或者仿真,需要花比較長的時間,比如十幾個小時甚至幾天。我們希望MATLAB跑完后,我們能夠得到通知,或者能夠了解到結果。 這個時候,可以設置在MATLAB跑完后,給我們發(fā)個郵件,并且把一些計算結果當做附件給我們發(fā)過來。如果手機綁定了郵箱,我們就可以立刻知道跑完了,并且大致了解結果。
一個小Demo
我做了一個小的demo來實現(xiàn)以上的需求。這個demo在MATLAB 2018b上做的,郵件發(fā)送使用的網(wǎng)易126郵箱。
demo功能介紹
在Simulink中建立了一個簡單的模型(沒有什么實際意義,僅僅用于展示)代表我們要做仿真計算的任務。 當這個仿真運行完成后,向我的郵箱發(fā)送一封郵件,把仿真結果作為正文內(nèi)容發(fā)過來,附件為仿真結果的一張圖形。 假設我的郵件地址為 whoispo@126.com ,當然這是一個假的地址 ?
準備工作
為了發(fā)郵件,我們需要上我們的126郵箱,對其進行一定的設置,才能讓MATLAB把我們的郵件發(fā)送出去。雖然我只是以126為例,但是其他郵箱應該也有類似的設置方法。
在126郵箱中有一個【設置】選項
選擇其中的【POP3/SMTP/IMAP】
然后選中 【POP3/SMTP服務】和【IMAP/SMTP】服務
記住這里的smtp地址,待會會用到
然后開啟客戶端授權密碼,這個密碼可以設置成與郵箱的密碼不一樣,主要用于像這種代發(fā)代收的客戶端的,設置成不一樣更加安全。通過MATLAB發(fā)送郵件,其實可以認為MATLAB也是一個客戶端。
以上,就把郵箱的設置弄完了
Simulink模型
從一個正態(tài)分布生成器中產(chǎn)生數(shù)據(jù),將數(shù)據(jù)的最大、最小值導出到maxValue, minValue,并且所有數(shù)據(jù)導出到value, 時間序列導出到time。
仿真腳本
sim('simple_model');plot(time, value);rlt_str = sprintf('Max=%.2f\nMin=%.2f\n', maxValue, minValue); rlt_file = 'rlt.jpg'; saveas(gcf, rlt_file); mail_rlt('Simulation Result', rlt_str, rlt_file);其中的mail_rlt函數(shù)的代碼如下
function mail_rlt(mailtitle,mailcontent,attached_file)receiver='tutor@mail.tsinghua.edu.cn'; % 對方的郵件地址sender = 'whoispo@126.com'; % 本人郵箱地址password = '123456'; % 授權密碼非登錄密碼smtp_addr = 'smtp.126.com' %smtp服務器地址,可以從郵箱配置中查到% 服務器設置setpref('Internet','E_mail',sender);setpref('Internet','SMTP_Server',smtp_addr); setpref('Internet','SMTP_Username',sender);setpref('Internet','SMTP_Password',password);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');sendmail({sender, receiver},mailtitle,mailcontent, attached_file); %為了避免126將此郵件識別為垃圾郵件(報錯554 DT:SPM)發(fā)不出去fprintf('Send Successful\n'); end這里要注意的一個地方,就是在發(fā)送時要把自己的郵件地址也放到收件人列表中,這樣做可以避免網(wǎng)易郵箱把這封郵件誤認為是垃圾郵件,從而拒絕,發(fā)不出去。
總結
以上是生活随笔為你收集整理的通过Matlab发送邮件要注意的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下的乱码问题
- 下一篇: Python中使用多重继承