Send Email Using MATLAB

Apr. 25, 2023

Github仓库1给出了一个使用MATLAB发送邮件的脚本,仓库的作者使用的是gmail邮箱发送,我这里将其修改为了使用163邮箱发送的形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mail = 'XXXX';    % Addresser
psswd = 'XXXX';   % Addresser
host = 'smtp.163.com';
port  = '25'; 
emailto = 'XXXX'; % Recipient
setpref('Internet','E_mail',mail);
setpref('Internet','SMTP_Server',host);
setpref('Internet','SMTP_Username',mail);
setpref('Internet','SMTP_Password',psswd);
props = java.lang.System.getProperties;
props.setProperty('mail.smtp.user',mail);
props.setProperty('mail.smtp.host',host);
props.setProperty('mail.smtp.port',port);
props.setProperty('mail.smtp.starttls.enable','true');
props.setProperty('mail.smtp.debug','true');
props.setProperty('mail.smtp.auth','true');
props.setProperty('mail.smtp.socketFactory.port',port);
props.setProperty('mail.smtp.socketFactory.class','javax.net.ssl.SSLSocketFactory');
props.setProperty('mail.smtp.socketFactory.fallback','false');
props.remove('mail.smtp.socketFactory.class');
sendmail(emailto,'Hello from MATLAB','Hello from MATLAB');

这一功需要使用邮件运营商(比如这里的163)提供的SMTP(Simple Mail Transfer Protocol)服务,而这个服务需要在发件人的邮箱中设置开启,163邮箱开启的方式可参考博客2,若没有开启SMTP服务MATLAB会报错3

1
2
3
Error using sendmail
Could not connect to SMTP host: smtp.163.com, port: 465,
response: -1

在开启了SMTP服务后,运营商会提供一个新的密码,需要将这个新的密码传递到psswd变量中,这是为了防止用户设置的真实密码以明文的方式暴露,并且只能使用这个密码,用户原本的密码是不行的,会报错:

1
2
Error using sendmail
Authentication failed.

163邮箱所使用的服务器地址(host)和端口号(post)分别是'smtp.163.com''25' (非SSL协议端口号)4,SSL协议端口号'465''994'是不行的:

1
2
3
Error using sendmail
Could not connect to SMTP host: smtp.163.com, port: 465,
response: -1
1
2
3
Error using sendmail
Could not connect to SMTP host: smtp.163.com, port: 994,
response: -1

除此之外,MATLAB的sendmail命令还支持发给多个收件人,并且还支持发送文件,可以参考官方文档5


Reference