by  dynamic

通过MATLAB发送邮件的意义在于,假如您编写了一个程序,希望客户对您的程序有一个反馈或者bug提交等互动交流!

另外假如在运行一个大型程序,我们希望将运行过程和结果发送到我们指定的邮箱,方便了解运行进展情况。

MATLAB自带有sendmail函数,可以用来发送电子邮件,但是sendmail只能发送不需要authentication的邮箱地址,但是互联网上公共邮箱几乎都需要authentication。

不用担心,由于Matlab支持smtp邮件,故163,qq,gmail都可以在MATLAB中利用Java的方式发送邮件。

MATLAB中的Demo中有详细介绍。但是不同的MATLAB版本会遇到不同的问题。另外这里有一篇论文,大家可以参考下

宽客网

在MATLAB中发送电子邮件.pdf

(206.8 KB, 下载次数: 0)

2014-3-19 01:24 上传

点击文件名下载附件

设定smtp服务器,然后使用sendmail发送邮件:



% 设置发送邮件的配置,我们用gmail举例

mail = 'my.email.address@gmail.com'; %gmail地址,qq或者163也可以的

password = 'matlabsky';  %邮箱密码



%下面是gmail的标准配置,其他邮箱,可以相应修改

setpref('Internet','E_mail',mail);

setpref('Internet','SMTP_Server','smtp.gmail.com');

setpref('Internet','SMTP_Username',mail);

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('收件人email','邮件标题','邮件内容!')

写成函数的形式(支持附件发送):



function MySendMail

a = rand(100);

DataPath = [matlabroot,filesep,'mydata.mat'];

save(DataPath,'a');

MailAddress = '我的邮箱地址';

password = '我的密码';  

setpref('Internet','E_mail',MailAddress);

setpref('Internet','SMTP_Server','smtp.gmail.com');

setpref('Internet','SMTP_Username',MailAddress);

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');

subject = 'MATLAB 发的测试邮件';

content = '你好,这份邮件是我用MATLAB发的,数据见附件';

sendmail('收件人地址',subject,content,DataPath);

如果在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再转为中文即可。
MATLAB, MATLAB技术, 电子邮件, sendsmtp

原文发布于宽客论坛,点击阅读原文

点赞(0)
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部