首先导入各模块: import smtplib from email.mime.text import MIMEText from email.header import Header
然后创建 MIMEText 对象: msg = MIMEText('Python3 邮件发送测试', 'plain', 'utf-8')
之后是设置三个头部信息:From、To、Subject。
最后创建 SMTP 对象后使用 SMTP.sendmail(sender, receivers, msg.as_string())方法发送。
问题就是: 发送邮件时使用了 msg.as_string()方法将 MIMEText 对象转化成字符串。但是 as_string()方法是 Message 类定义的方法,为什么这里 MIMEText 对象也可以使用该方法?我查询后并没有直接的继承关系。
有没有知道的大神,指教一下,万分感谢!
![]() | 1 Ctry OP 有没有人了解的,或者知道相关资料的?感谢告知! |
![]() | 2 cxh116 2018-01-23 16:17:06 +08:00 import email.mime.text import inspect print(inspect.getmro(email.mime.text.MIMEText)) (<class 'email.mime.text.MIMEText'>, <class 'email.mime.nonmultipart.MIMENonMultipart'>, <class 'email.mime.base.MIMEBase'>, <class 'email.message.Message'>, <class 'object'>) 其实直接翻源码最快. /usr/lib/python3.6/email |
![]() | 3 cxh116 2018-01-23 16:19:29 +08:00 用 inspect 模块分析, 没有直接继承,但有间接. 源码地址 https://github.com/python/cpython/blob/master/Lib/email/mime/text.py |
![]() | 4 keithszc 2018-01-23 16:23:57 +08:00 用 pycharm 查了一下,3 次继承就到了 Message 类 |
![]() | 5 Ctry OP @cxh116 感谢感谢!我知道了,原来是 mro 列表中有 Message 类。哎,自己不知道 inspect 模块相关用法,学习了。谢谢! |
![]() | 7 zhengxiaowai 2018-01-23 16:56:58 +08:00 smtplib 这种古董到老掉牙的库,接口及其难用,快放弃。 使用 yagmail 优美的发送邮件 |
![]() | 8 Ctry OP @zhengxiaowai 可以,我先把标准库了解了解,然后去学习第三方库。 |
9 weyou 2018-01-23 21:27:19 +08:00 via Android @zhengxiaowai 这个只能发 Gmail 吧 |
10 MyDaLin 2018-01-24 09:16:20 +08:00 我是来学习的 |