Python中怎样发邮件
2023-06-06陈新龙
陈新龙
電子邮件是如何进行交互传输的?什么是电子邮件协议?
电子邮件协议中最常用的是SMTP和IMAP两种协议。SMTP一般用于发送邮件,是建立在FTP文件传输服务上的一种邮件服务,主要用于从源地址到目的地址传输邮件的规范,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。在起草电子邮件并发起发送命令或者中转邮件的时候,就会使用此协议。
IMAP(Internet邮件访问协议)一般用来收取邮件,是一个应用层的协议,是一种临时邮件访问协议,也被称为交互式邮件访问协议。IMAP不会用于发送邮件,主要用于管理邮件以及从服务器上检索电子邮件,获取邮件的信息。IMAP协议运行在TCP/IP协议之上,它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作(图1)。
我们采用编程的方式来更好理解邮件发送和接收的过程。
编程前的工作,在邮箱后台开启IMAP/SMTP和POP3/SMTP服务,找到用于连接到服务器的授权码。用授权码代替邮箱密码登录客户端,即使邮箱密码丢失,邮件也不会通过客户端泄露。
以网易邮箱为例,进入邮箱设置,进入POP3/SMTP/IMAP设置,开启IMAP/SMTP和POP3/SMTP服务,新增授权密码,记下授权码。
开始编程,导入stmplib和email模块。Python标准库的smtplib模块,用于实现按SMTP协议发送邮件。email模块用于按邮件格式构造内容。定义变量,如网易邮箱SMTP服务器地址:smtp.163.com,QQ邮箱SMTP服务器地址:smtp.qq.com(图2)。
指定发送端口号,使用SSL协议(安全套接字协议)情况下端口号465。还需我们自己的邮箱账号和授权码,确保我们可以通过该邮箱账号发送邮件,注意授权码不是密码,是在网站上申请的一串密钥。
发送邮件时会创建一个SMTP对象,SMTP协议是由源服务器到目的地服务器传送邮件的一组规则。我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器。然后通过SMTP_SSL方法连接上指定的服务器,login登录邮箱(username和password分别代表邮箱账号和申请的授权码),最后通过sendmail方法指定发件人、收件人、发送的邮件内容。as_string()是将发送的信息msg转化为字符串类型。若邮件发送成功后对应的收件邮箱中会出现邮件的信息即可查看。
这只是最基础的文本信息邮件,接下来你可以查阅相关资料,看看怎样发送携带附件的邮件。