【MATLAB】如何用MATLAB发邮件?(附“身份验证失败”/“Authentication failed”的解决方案)

这篇博客介绍了如何在MATLAB中使用Python代码发送邮件,包括解决身份验证失败的问题,以及如何保护包含敏感信息的代码。作者提供了MATLAB发送邮件的源代码,并详细解释了授权码的获取和使用。此外,还分享了如何通过MATLAB的protected-code功能保护代码隐私。
摘要由CSDN通过智能技术生成

近期由于需要做一些需要随时调整参数的MATLAB仿真,所有参数都仿真时间不允许,但单次仿真时间太长,坐等也不合适(杂事较多)。突发奇想,想看看能不能在程序结束时给自己发微信。结果没查到怎么发微信,倒查到了怎么发邮件。本来已有的CSDN博客已足够解决代码问题,但无奈遇到了大家大概率会遇到的“身份验证失败”问题,相关博客又没有解决方案,所以干脆一并整理至此,以便大家一步到位解决问题。

如果你需要用Python发邮件,可以参考链接如何用Python发邮件?

1. MATLAB源代码

下面是本人使用的代码,各位填好个人邮箱地址授权码服务器三处需要修改的信息后,可以直接使用。

function mail2me( subject, message, varargin )
% Function: Mail to myself.
MailAddress = 'xxx@163.com';                        %个人邮箱地址
password = 'yyy';                                   % 授权码

setpref('Internet', 'E_mail', MailAddress);
setpref('Internet', 'SMTP_Server', 'smtp.163.com'); % 服务器
setpref('Internet', 'SMTP_Username', MailAddress);
setpref('Internet', 'SMTP_Password', password);

props = java.lang.System.getProperties;
props.setProperty('mail.smtp.auth', 'true');

if nargin > 2 % 如果有附件
    sendmail( MailAddress, subject, message, varargin{1} );
else % 如果没有附件
    sendmail( MailAddress, subject, message );
end
end

上述函数的三个形参分别代表邮件主题邮件内容附件(可选)。使用时,可在自己的仿真程序末尾添上

mailTome('程序运行已结束','程序运行已结束,请尽快查看');

如果还有附件,可采用下面的代码

mailTome('程序已结束','程序运行已结束,请尽快查看', 'result.jpg'); % 单个文件的附件
mailTome('程序已结束','程序运行已结束,请尽快查看', {'result_1.jpg', 'result_2.csv'}); % 多个附件

注1:代码中的“授权码”直接填密码可能也对,但如果MATLAB提示“身份验证失败”了,请参考本博客第2项来解决。

注2:服务器与注册的邮箱网站对应。这里以网易163和126邮箱为例:

163邮箱的SMTP服务器: smtp.163.com
126邮箱的SMTP服务器: smtp.126.com
网易其他邮箱、QQ邮箱、gmail等据查也是可以的,各位可以百度相关邮箱的SMTP服务器(如搜索“163邮箱的SMTP服务器”,浏览信息即可找到),将代码中的“smtp.163.com”更换为相应的服务器即可。

注3:有兴趣了解大致原理的各位,可以参考sendmail函数的MATLAB官方中文文档。里面有sendmail函数使用方法的详细介绍,各位可以根据个人需求,按需定制。

2. 如何解决“身份验证失败”的问题

把password设置为邮箱密码后,在MATLAB中运行上述代码,可能会出现“身份验证失败”(或“Authentication failed”)的问题。这是因为邮箱网站官方出于对你邮箱的保护,避免一旦获取了你的邮箱和密码就可以滥用你的邮箱,所以增加的一道障碍,称为“授权码”。(可能不严谨,不过大家理解就好~)

想要解决,只需要搜索“xxx邮箱如何获取授权码”,找到相应解决方案即可。

这里以163邮箱为例,说一下我在过程中遇到的问题(搜索不一定找得到的部分)。

相信使用邮箱的各位都能在自己邮箱的设置界面找到POP3/SMTP/IMAP这一选项,找到“IMAP/SMTP服务”一项,选择开启。之后按照要求官方要求扫码以给制定账号发送短信,即可获得需要的授权码(官方给的一段乱码)。如果一切顺利,那么没问题;但我遇到的情况是,我的这项服务已经开启,还是不知道自己的授权码是什么。
这时,我的解决方案是:

  1. 选择关闭该项服务,然后再开启;
  2. 按照相应要求扫码、发短信,获取授权码。如果没有其他问题,直接把得到的授权码粘贴,赋值给password变量即可。

但如果你在手机上使用了“邮箱大师”,那么你很可能还会遇到下面的问题:之前可以用密码登录的邮箱就已经无法再用密码登录了。解决方案是原来需要输入密码的位置,现在需要输入你新获得的授权码。鉴于网易在给你授权码的时候,会提醒你“此授权码只显示一次”,建议各位保存好该授权码。如果确实忘记了,按步骤重新申请一个授权码也可以解决。

3. 如何保证授权码/密码的隐私性

因为各种原因,个人的代码可能会分享给其他人或被他人看到。而mail2me函数中存在个人邮箱地址及关键的授权码/密码。为避免关键信息的泄露,可以运行下面的代码

pcode mail2me 

此时,相应文件夹下除了“mail2me.m”文件外,还会生成一个“mail2me.p”文件。删除“mail2me.m”,直接使用“.p”后缀的文件即可。这是MATLAB自带的代码保护机制“protected-code”。似乎有人专门做了这个的破解,但难度极高,本人多方查找,仍未找到可以打开“,p”后缀函数的代码(说来话长)。因此,隐私保护能力个人认为绝对够用了。

记得保存好你的授权码哦。当你只有“.p”文件后,连你自己也看不到当时的授权码是什么了。如果再需要,据我所知只能重新申请了。😦

之所以能想到保护机制,得益于博客Matlab 程序结束后发送短信或者邮件,本文的主要代码也是参考该博客。另外,博客如何使用matlab发邮件 sendmail也提醒了我可以在MATLAB的官方文档中查找MATLAB的sendmail函数。标注在此,一并感谢。

整理不易,如果你觉得对你有用,请帮我点个赞吧 😃

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值