Python——email模块

一、发邮件的流程

1、使用电子邮件软件MUA:mail user agent --邮件用户代理,填写完成点击发送
2、点击发送的时候电子邮件软件发出去,到MTA:mail transfer agent–邮件传输代理,即email服务提供商,如网易等
3、MTA–邮箱传输代理会把邮箱投递到邮件的最终目的地MDA:mail delivery agent—邮箱投递服务
4、email到达MDA后就会放在某个服务器上,存在数据库里,收件人必须通过MUA从MDA中把邮箱放到自己电脑上

流程:发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA<-MUA<-收件人

二、smtplib的用法

2.1 使用步骤:

  • 创建SMTP的操作对象并连接smtp目标服务器,例如163、QQ等
  • 根据自己的账号登录目标服务器(自己的邮箱地址和邮箱授权码)
  • 调用对象中的方法,发送邮件到目标地址

2.2 常用SMTP地址

  • 浪邮箱:smtp.sina.com,搜狐邮箱:smtp.sohu.com,qq邮箱:smtp.qq.com
  • 网易126邮箱的相关服务器信息
邮件服务器 | 服务器地址 | 端口
POP3服务器 | pop.126.com | 110
SMTP服务器 | smtp.126.com | 25
IMAP服务器 | imap.126.com | 143

2.3 MIME模块

from email.mime.text import MIMEText #构造一个MIMEText,表示文本邮件对象
#MIMEText对象中有三个需要我们设置的参数,一个是正文内容,一个是正文内容的类型,例如:”text/plain”和”text/html”,一个是正文内容的编码。
from email.mime.image import MIMEImage #构造一个MIMEImage,表示附件的图片邮件对象
from email.mime.multipart import MIMEMultipart #构造一个MIMEMultipart,表示整个邮件
"""
multipart类型主要有三种子类型:mixed、alternative、related
1、(1) MIMEMultipart类型基本格式
● MIMEMultipart(‘mixed’)类型
如果一封邮件中含有附件,那邮件的中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下:
msg=MIMEMultipart(‘mixed’)

● MIMEMultipart(‘alternative’)类型
MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个
纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中
定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的
其它内容分成不同的段。基本格式如下:
msg=MIMEMultipart(‘alternative’)

● MIMEMultipart(‘related’)类型
MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。
比如我们在发送html格式的邮件内容时,可能使用图像作为 html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。
基本格式如下:
msg=MIMEMultipart(‘related’)
"""

"""
构造文本内容,同时支持plain、html格式
msg = MIMEMultipart('alternative')
msg.attach(MIMEText('hello', 'plain', 'utf-8'))
msg.attach(MIMEText('<html><body><h1>Hello</h1></body></html>', 'html', 'utf-8'))
"""

三、实操

'''
File Name:sendEmail-test.py
Creat File Time:2022/8/20 15:18
File Create By Author:@Wheat
'''
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication #发送附件
#配置邮箱及密码
form_mail = ''#发送人邮箱
form_mail_password = ''#需要从邮箱的设置-账号-开启POP3-SMPT服务来获取授权码
to_email = ''#接收人邮箱

#设置总的邮件对象,对象的类型为mixed
msg = MIMEMultipart('mixed')

#邮件的发送人及收件人信息
msg['From'] = form_mail
msg['to'] = to_email

#邮件的主题
msg['Subject'] = 'Test use Pyhton to send email '

#构造文本内容
text_info = 'hello world ,nice world'
text_sub = MIMEText(text_info,'plain','utf-8') #可分为plain(纯文本)格式和html格式
msg.attach(text_sub)

#构造超文本
url = "https://demom.liangyihui.net/"
html_info = """<p><a herf="%s">点击我~~打开新世界</a></p>""" % url
html_sub = MIMEText(html_info,'html',"utf-8")
#需加如下代码才可使thml_info文本的内容正常显示,会把超文本的内容当做文本显示
html_sub["Content_Disposition"] = 'attachment; filename="doctor.html"'
#把构造的内容写入邮件体
msg.attach(html_sub)

#构造图片
image_file = open(r'E:\Auto Program\Doctor_autotest\image.png','rb').read()
image = MIMEImage(image_file)
image.add_header('Content-ID','<image1>')
#如不加以下代码,会导致接收方方面显示乱码的bin文件,下载后也不可打开,这个地方可以对文件重命名
image["Content_Disposition"] = 'attachment; filename="image.png"'
msg.attach(image)

#构造附件
attachment_file = open(r'E:\Auto Program\Doctor_autotest\testExample.xmind','rb').read()
attachment = MIMEApplication(attachment_file)
attachment.add_header('Content-Disposition', 'attachment')
attachment["Content-Disposition"]='attachment; filename="testExample.xmind"'
msg.attach(attachment)

try:
	sever = smtplib.SMTP('smtp.qq.com')
	sever.docmd('wheat',form_mail)
	sever.starttls()
	sever.login(form_mail,form_mail_password)

	sever.sendmail(form_mail,to_email,msg.as_string())
	sever.quit()
	print("耶~~~发送成功")
except Exception as e:
	print("未发送成功")
	print(e)
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值