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