数据小站
数据科学成长之路

python3发送邮件

python3收发邮件需要用到 smtplib/email 两个模块的

发送邮件,需要有一个SMTP对象,smtp对象通过 smtplib.SMTP() 。通过这个smtp对象后,通过连接服务器、登录、发送邮件三个步骤就可以实现邮件的发送。

而发送邮件的内容,需要遵守一定格式,这个格式由email模板控制。

smtp邮件对象的基本步骤:创建、连接、登录、发送

import smtplib
smtpObj = smtplib.SMTP()       #创建smtp对象 
smtpObj.connect(host,port)     #连接smtp代理服务器 ,如网易的smtp.163.com,端口默认25
smtpObj.login(user, passwd)    #登录获取授权,如网易邮箱的账号密码
smtpObj.sendmail(sender, receivers, text)  #邮件的发送者、接收者、邮件内容

在创建stmp对象时,需要确定stmp的代理服务器。例如网易163邮箱,它的邮件代理服务器地址为smtp.163.com,其他提供代理的地址需要去寻找,有了smtp代理服务器地址之后,通过.connect()就可以设置连接,服务器默认的端口都是25,如果所使用的端口不是25,就需要在.connect(host,port)用设置。

通过.connect()连接上代理服务器之后,就需要登录操作,通过login(用户名,密码)来获取服务器的授权,只有登录获取授权的smtp对象,才能发送邮件。

登录成功的stmp对象,就可以使用.sendmail()方法发送邮件,发送邮件的文本内容,需要有单独的对象制作,在下一步中描述。

一般情况,用户名、密码就是邮件的用户名和密码,这和使用的代理服务器有关。如网易163,需要单独开通 POP3/SMTP服务并获取授权码,有些服务器还需要认证等等

邮件的内容:创建邮件文本对象、设置主题/发送者/接收者/正文

from email.mime.text import MIMEText
text = '邮件的内容正文文本'      #邮件正文可以多种格式,支持html,附件,图片..
msg  = MIMEText(text, 'plain', 'utf-8')     #设置邮件文本对象
msg['Subject'] = '邮件主题'     #设置邮件主题
msg['From'] = '***@163.com'    #邮件的发送者,必填,且必须与stmp.sendmail()的发送者保持一致
msg['To'] = ' ***@163.com '    #邮件展示的接收者,非必填,与stmp.sendmail()的接收者可以不一致
设置完成后,这个msg可以作为邮件内容传入smtp.sendmail()中,在传入时需要以msg.as_string()转换为字符串形式传入

最简单的邮件发送示例:

import smtplib
from email.mime.text import MIMEText

if __name__ == "__main__":
    #第一步: smtp对象创建
    smtp_host = 'smtp.163.com'            #网易163smtp地址
    smtp_user = 'dtsccn@163.com'          #网易邮箱地址,作为登录用户
    smtp_passwd = '***'                   #授权码,不同smtp服务商不统一,有的直接是邮箱的密码,网易163需要单独申请
    smtp = smtplib.SMTP()
    smtp.connect(smtp_host,25)            #smtp的服务默认开通都是25端口,可以不用填写,但有些smpt服务商可能会更改端口
    smtp.login(smtp_user,smtp_passwd)     #登录,获取smtp发送邮件许可

    #第二步:邮件内容创建
    text = '这是一封测试邮件,请忽视'          #邮件正文
    msg = MIMEText(text)                   #创建邮件text对象,创建时需要将邮件正文作为参数初始化
    msg['Subject'] = '这是一封测试邮件'      #设置邮件主题
    msg['From'] = smtp_user                #邮件的发送方,与smtp创建时的登录用户邮箱地址一致
    msg['To'] = '测试邮件组'                #邮件展示的接收者

    #第三步:邮件发送
    to_list = ['452044211@qq.com','*****']   #邮件接收者的列表
    smtp.sendmail(smtp_user,to_list,msg.as_string())

不同smtp服务商提供smtp代理服务之间的差异:提供smtp代理服务的运营商有很多,如腾讯qq邮箱,网易163等。基于安全的考虑,不同服务商提供的代理服务,有些诧异。在参数设置时,就需要遵守使用服务器的协议。例如163邮箱,不能直接使用邮箱的用户名、密码作为smtp.login()时的用户名密码使用,需要进入网易163邮箱后,申请开通smtp服务并获得授权码,使用授权码作为秘密登录。有些需要ssl安全认证,需要改用SMTP_SSL 连接。

#smtp创建的第一种方式:创建、连接 分开
smtp = smtplib.SMTP()
smtp.connect(smtp_host,25)

#smtp创建的第二种方式: 创建连接 一步
smtp = smtplib.SMTP(smtp_host,25)

#smtp创建的第三种方式:需要ssl认证的代理服务时应用
smtp = smtplib.SMTP_SSL(smtp_host,25)

邮件正文的多样设置

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

邮件内容纯文本格式,可以用MIMEText对象。如果要有丰富的格式、图片、附件等,需要用MIMEMultipart这个类,图片需要用MIMEImage这个类。

赞(0) 打赏
未经允许不得转载:技术文档分享 » python3发送邮件

评论 抢沙发