如何在MATLAB中使用sendmail函数指定抄送(CC)地址
如何在MATLAB的sendmail函数中指定抄送(CC)地址?
我之前用MATLAB发邮件的时候也碰到过这个问题——默认的sendmail调用确实没有直接的CC参数,但借助MATLAB和Java邮件API的集成,我们可以轻松实现抄送功能。下面结合你给出的基础代码,修改出带抄送的版本:
方法:通过邮件对象添加抄送(兼容绝大多数MATLAB版本)
这个方法的核心是先让sendmail创建邮件对象但不发送,然后给对象添加抄送收件人,最后手动触发发送。完整代码如下:
% 1. 准备邮件基础信息 body = '这是测试邮件的正文内容'; attachments = 'attachment.pdf'; primary_addr = 'main-recipient@example.com'; % 主收件人 cc_addrs = {'cc-person1@example.com', 'cc-person2@example.com'}; % 多个抄送地址用细胞数组存储 % 2. 配置SMTP服务器偏好(和你原来的代码一致) setpref('Internet', 'SMTP_Server', 'smtp.office365.com'); setpref('Internet', 'E_mail', 'your-account@domain.com'); setpref('Internet', 'SMTP_Username', 'your-account@domain.com'); setpref('Internet', 'SMTP_Password', 'your-app-specific-password'); % 注意:Office365现在推荐用「应用专用密码」,而非账号原密码(需开启两步验证) % 3. 设置SMTP连接属性(原代码不变) props = java.lang.System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.port', '587'); props.setProperty('mail.smtp.starttls.enable', 'true'); % 4. 创建邮件对象并添加抄送 % 使用dryrun=true参数,让sendmail只生成邮件对象,不直接发送 msg = sendmail(primary_addr, '测试邮件主题', body, attachments, 'dryrun', true); % 遍历抄送列表,逐个添加 for addr = cc_addrs msg.addRecipient(javax.mail.Message.RecipientType.CC, addr{1}); end % 最后发送配置好的邮件 msg.send;
关键细节说明
- 如果只有单个抄送地址,直接用字符串代替细胞数组即可,比如
cc_addrs = 'single-cc@example.com'; - 若使用Office365/Outlook的SMTP服务,必须开启账号的两步验证,然后生成应用专用密码填入
SMTP_Password,否则会被服务器拒绝 - 如果你用的是其他SMTP服务(比如QQ邮箱、Gmail),只需要修改对应的服务器地址、端口和验证方式即可
内容的提问来源于stack exchange,提问作者John Chris
相关产品推荐
相关产品推荐

