问题背景
前几天,女朋友公司要求她周末加班发送宣传推广邮件给高校老师,而我才知晓之前她们发送邮件全靠手动…目前待发名单至少有三千人,而现在才发了一百多封,我的心情如下
为了能够不加班周末去放风筝,于是我决定亲自动手。但是毕竟我不是搞Web开发的,应该从哪下手呢?答案是:面向百度编程。
实现过程
组装轮子——MATLAB如何发送一封图文并茂的邮件?
1.发送一封普通的邮件
MathWorks 在官方文档里提供了sendmail函数用于向指定的地址列表发送电子邮件
需要设置的参数如下:
发件人邮箱地址、发件人邮箱授权码(注意不是密码,而是邮箱用于登录第三方邮件客户端的专用密码)、SMTP服务器地址、收件人邮箱、主题、内容、附件
详细请见:https://ww2.mathworks.cn/help/matlab/ref/sendmail.html?searchHighlight=sendmail&s_tid=srchtitle_sendmail_1(MathWorks官方文档)
https://blog.csdn.net/eswai/article/details/53454987(使用例程)
2.发送html格式的邮件
mathworks官方给出的sendmail函数虽然能够实现自动发送邮件,但有个致命的缺点是,它只能支持普通文本,并不能发送html格式,因此排版、字号、颜色等参数统统都不能实现。距离我们的目标还有一段距离。
经过互联网的大海捞针,终于找到这样一篇帖子,有位老哥提出来可以修改sendmail的库函数实现发送html邮件。(https://undocumentedmatlab.com/articles/sending-html-emails-from-matlab)翻译过来主要有两点:
1.HTML 格式需要调用消息对象的 setContent() 方法,而不是 setText()
2. 我们需要指定为消息编码的一部分’text/html’
当然,为了避免重复造轮子,我们选择直接白嫖(狗头)
3.如何写html?
那么问题又来了,虽然我们知道可以通过html格式发送一封排版整齐,图文并茂的邮件,可是对于小白来说,要想通过html书写邮件并不是一件容易的事情。但是我们可以换个思路,将文本内容转换为html。
直接检索文本转html,会发现有许多在线工具,支持txt,docx等格式。
打开转换好的xxx.html文件后,按Ctrl+U进入网页后台,就可以看到文本对应的html代码了。
4.发送图片
那么问题又来了,假如我们的邮件中带有图片内容,又不想通过附件的方式发送,而是嵌入到邮件中,通过文本转换的方式能够生成图片的html代码吗?答案是可以的,但是生成的代码是图片的链接,在发送邮件之后,邮件系统往往会屏蔽掉图片链接,从而图片无法显示。针对此问题,一般可以通过“CID内嵌图像”方式完成。
CID 的工作原理是将图像附加到要发送的电子邮件中,然后使用引用该图像的标准 HTML图像标记,以便在用户打开该图像时最终将其嵌入到电子邮件中。
但是由于该方法同样涉及到需要改动sendmail库函数及其调用的java类软件包,因此对图像命名cid标签指向附件的方式较为复杂,CSDN中有大部分帖子是用python实现,未曾找到matlab方法。就在题主快要山穷水尽之时,又找到了这样一篇文章,里面提出可以将图片以base64编码的html代码进行邮件发送。
(https://sendgrid.com/blog/embedding-images-emails-facts/)
base64是一个字符集,图片在html中可以通过base64编码为字符串,而不用通过http请求。但是这样做的缺点是图片越大,base64的字符串就会越长,导致发送的html代码越长,对网络带宽要求也更高。
python和java中自带了将文件转码为base64的库函数,但由于一开始选错了路,所以就只能硬着头皮走到黑了。
于是,我又找到了图片转base64编码工具,手动解码,自此大功告成。