通过Matlab发送邮件要注意的问题

时间:2024-03-16 20:31:21

背景:

有时候在实验室,通过MATLAB做一个计算或者仿真,需要花比较长的时间,比如十几个小时甚至几天。我们希望MATLAB跑完后,我们能够得到通知,或者能够了解到结果。 这个时候,可以设置在MATLAB跑完后,给我们发个邮件,并且把一些计算结果当做附件给我们发过来。如果手机绑定了邮箱,我们就可以立刻知道跑完了,并且大致了解结果。

一个小Demo

我做了一个小的demo来实现以上的需求。这个demo在MATLAB 2018b上做的,邮件发送使用的网易126邮箱。

demo功能介绍

在Simulink中建立了一个简单的模型(没有什么实际意义,仅仅用于展示)代表我们要做仿真计算的任务。 当这个仿真运行完成后,向我的邮箱发送一封邮件,把仿真结果作为正文内容发过来,附件为仿真结果的一张图形。 假设我的邮件地址为 [email protected] ,当然这是一个假的地址 ????

准备工作

为了发邮件,我们需要上我们的126邮箱,对其进行一定的设置,才能让MATLAB把我们的邮件发送出去。虽然我只是以126为例,但是其他邮箱应该也有类似的设置方法。

  1. 开启SMTP服务
    在126邮箱中有一个【设置】选项
    通过Matlab发送邮件要注意的问题
    选择其中的【POP3/SMTP/IMAP】
    通过Matlab发送邮件要注意的问题
    然后选中 【POP3/SMTP服务】和【IMAP/SMTP】服务
    通过Matlab发送邮件要注意的问题通过Matlab发送邮件要注意的问题
    记住这里的smtp地址,待会会用到

然后开启客户端授权密码,这个密码可以设置成与邮箱的密码不一样,主要用于像这种代发代收的客户端的,设置成不一样更加安全。通过MATLAB发送邮件,其实可以认为MATLAB也是一个客户端。
通过Matlab发送邮件要注意的问题
通过Matlab发送邮件要注意的问题
以上,就把邮箱的设置弄完了

Simulink模型

从一个正态分布生成器中产生数据,将数据的最大、最小值导出到maxValue, minValue,并且所有数据导出到value, 时间序列导出到time。
通过Matlab发送邮件要注意的问题

仿真脚本

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函数的代码如下

function mail_rlt(mailtitle,mailcontent,attached_file)
	receiver='[email protected]';     % 对方的邮件地址
	sender = '[email protected]';    % 本人邮箱地址
	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)发不出去

	fprintf('Send Successful\n');
end

这里要注意的一个地方,就是在发送时要把自己的邮件地址也放到收件人列表中,这样做可以避免网易邮箱把这封邮件误认为是垃圾邮件,从而拒绝,发不出去。