chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190328 - 使用Python发送邮件 - jingchu #42

Open qingfengmingjian opened 5 years ago

qingfengmingjian commented 5 years ago

Python中使用SMTP发送邮件

1.前置条件:用来发送邮件的邮箱要设置支持POP/SMTP服务

例如QQ个人邮箱设置:邮箱首页->设置->账户->POP/SMTP服务->开启服务->生成授权码(做密码使用)

需要导入的几个包

import smtplib  #smtp服务器的使用
from email.mime.text import MIMEText   #用户实例化邮件内容
from email.mime.multipart import MIMEMultipart  #用于实例化可以发送图片、附件的内容
from email.mime.image import MIMEImage #图片处理

2.设置SMTP服务器

mail_host = 'smtp.qq.com'#服务器地址
port = 25               #端口号
sender = '516183151@qqc.om'  #邮件发送者账号
password = 'oeyztwunuadwcbai' #登录密码,此处使用授权码
receiver = [ '1293454316@qq.com']#接收者邮箱可以使多人

3.编辑邮件的内容

content = '这是邮件的正文部分,使用的是文本格式,可以使用其他格式' #邮件正文
#构建一个MIMEText实例化,三个参数为邮件正文、格式、编码方式,palin是文本格式
message = MIMEText(content, 'palin', 'utf-8')
message['From'] = sender #从哪儿发送
message['To'] = receiver #接收者
message['Subject'] = '这是邮件的标题!'

4.发送邮件

try:
    smtpobj = smtplib.SMTP() #实例化一个smtp服务器对象
    smtpobj.connect(mail_host, port) #启用服务
            smtpobj.log(sender, password)#模拟登录
    smtpobj.sendmail(sender, reciver, message.as_string())#发送邮件(发、收、内容) 
    smtpobj.quit() #退出
    print('邮件发送成功,请登录邮箱查看!')
except smtplib.SMTPException:
    print('邮件发送失败!')

发送html格式的文件、添加附件、发送图片,只需要对邮件内容进行修改

1.发送html格式的文件,因为邮箱本身的一些标签样式设置,可能看到的显示结果会有差异

content = '''
<p><font size='30' color='red'>Python 邮件发送测试</font></p>
<h1>这是H1标签</h1>
<p><a href = 'https://www.baidu.com'>这是一个链接</a></p>
'''
message = MIMEText(content, 'html', 'utf-8')#设置内容为html格式
message['From'] = sender #从哪儿发送
message['To'] = receiver #接收者
message['Subject'] = '这是邮件的标题!'

2.发送附件

message = MIMEMultipart()#实例message
message['From'] = '从健哥哥这里发出' #从哪儿发送
message['To'] = '这里是接收人' #接收者
message['Subject'] = '这是邮件的标题!'
message.attach(MIMEText('这是Python 邮件发送测试……', 'plain', 'utf-8'))# 邮件正文内容

# 构造附件,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')#使用open方法,base64格式
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)

3.正文中发送图片

message = MIMEMultipart()#实例message
message['From'] = '从健哥哥这里发出' #从哪儿发送
message['To'] = '这里是接收人' #接收者
message['Subject'] = '这是邮件的标题!'
message.attach(MIMEText('这是Python 邮件发送测试……', 'plain', 'utf-8'))# 邮件正文内容
# 构造图片,传送当前目录下的 test.txt 文件
att2 = MIMEImage(open('test1.png', 'rb').read())
att2.add_header('Content-ID','<image1>')
message.attach(att2)

此次内容只讲了邮件的发送,对于实际场景中,定时发送邮件、特定条件促发邮件发送以及其他场景,需要大家根据各自的使用情况添加判定条件