本周在做一个需求时,涉及到了邮件发送,遇到了很多坑,于是决定记录下来,方便后续回忆。
问题1 用SMTP服务器发送邮件的话,一般连接最好采用SSL模式进行连接
因为我刚开始是非ssl连接的,在本地测试并没有发现什么问题,邮件也能收到,但是部署到qa环境就嗝屁了,因为会有防火墙的限制,所以非ssl连接就显得格外的不安全,导致连接失败,邮件发送不出去。
问题2 SMTP发送采用SSL连接时 需要将【SMTP_STARTTLS】设置为False
改为ssl连接后又发现了一个报错
454, b'Command not permitted when TLS active'
这里查阅相关资料需要将SMTP_STARTTLS 给置为False
SMTP_STARTTLS = False
if smtp_starttls:
smtp.starttls(context=ssl_context)
问题3 发送邮件时中文出现 "????" 特殊字符问题排查
因为本地环境能正常显示中文字符,服务器部署后是不正常的。
- 初步怀疑是服务器不支持中文字符,尝试先打了 log 看了下是哪里出了问题,最终发现是从数据库查询那里就出现了问题。
- 猜测1 会不会和字段编码有关,于是我将name字段由utf-8改为了utf8mb4直觉告诉我肯定不行,因为这个编码我记得只会影响emoji表情,不出所料,测试结果失败;
- 猜测2 表的编码问题,同样的将表的编码格式由utf-8改为了utf8mb4不出所料,测试结果失败;
- 猜测3 连接方式有问题 给数据库连接方式加了参数charset=utf8mb4,可喜可贺,中文字符终于能正常显示了!
mysql://********************?charset=utf8mb4