用python发邮件、添加附件

咸晨
2023-12-01

python 发邮件

  1. 两个内置模块:smtplib 、email

  2. 需要了解附件以什么形式添加到邮件中(open方法、二进制、字节)

  3. 什么是授权码

  4. 能够看懂邮件发送过程中的发送编码(发送成功、发送失败、垃圾邮件等编码编号)

  5. 什么是smtp协议:

    # SMTP协议,简单邮件传输协议。它是用于从源地址到目标地址的邮件传输规范,通过SMTP协议
    # 控制邮件中转的方式。SMTP协议属于TCP/IP协议簇,它可以帮助每台计算机在发送或中转信件
    # 的时候找到下一个地址。SMTP服务器就是遵循SMTP协议发送邮件的服务器。其中涉及到SMTP认证,
    # 此认证可以使垃圾邮件的发送者没有机会散播垃圾邮件,增加SMTP认证的目的就是为了使用户避免
    # 收到垃圾邮件的骚扰。
    

python发邮件代码

import smtplib
sendAddress='xxxxxxxxx@qq.com'
passWord='xxxxxxxxxxxxxxx' #进入扣扣空间-设置-账户-开启服务(POP3/SMTP服务、IMAP/SMTP服务)-发送短信,获取授权码
# #常用邮箱服务器: 发送邮箱端口都是465
# 新浪邮箱:smtp.sina.com
# 搜狐邮箱:smtp.sohu.com
# 126邮箱:smtp.126.com
# 163邮箱:smtp.163.com
# qq邮箱:smtp.qq.com
server=smtplib.SMTP_SSL('smtp.qq.com',465)
loginResult=server.login(sendAddress,passWord)
print(loginResult)  #(235, b'Authentication successful')表示登录成功

from email.mime.text import MIMEText
#MTMEText不能被用来构造信息。但是MIMEText不能添加附件
#构建邮件正文
content="""
邮件正文内容
"""
#将正文添加到邮件消息中
#plain:子内容的类型
#utf-8为Unicode编码
msg=MIMEText(content,'plain','utf-8')
#构造邮件的发件人、收件人等信息
#发件人
msg['From']='<xxxxxxxxx@qq.com>'
#收件人
msg['To']='<xxxxxxxxxxx@qq.com>;<xxxxxxxxx@qq.com>'
#抄送人
msg['Cc']='xxx'
#邮件主题
msg['Subject']='主题'
#发送邮件
To=['xxxxxxxxx@qq.com','xxxxxxxxxxx@qq.com']
#server.sendmail(发件人,收件人,发送信息)
#发送的信息:字符串类型的邮件,msg.as_string()
server.sendmail(sendAddress,To,msg.as_string())
print('发送成功')

python发邮件添加附件

import smtplib
#1发送人账号
sendAddress='xxxxxxxxx@qq.com'
#2发送人授权码,等同于密码
passWord='xxxxxxxxxxxx' #进入扣扣空间-设置-账户-开启服务(pop3/SMTP服务)-发送短信,获取授权码
#3连接服务器,465端口就是发送邮件的端口
server=smtplib.SMTP_SSL('smtp.qq.com',465)
#4登录
LoginResult=server.Login(sendAddress,passWord)
#(235, b'Authentication successful')代表成功
#添加附件
from email.mime.text import MIMEText
#使用MIMEMUltipart添加附件
from email.mime.multipart import MIMEMultipart
msg=MIMEMultipart()
#构建发件人、收件人、邮件主题
msg['From']='<xxxxxxxxxx@qq.com>'
msg['To']=''
msg['subject']='主题'
content="""
尊敬的各位先生女士:
您好!
	感谢您乘坐本次列车,期待您下次体验。
"""
#添加正文
#将附件使用二进制读取,在使用MIMEText方法进行规范化
attachment_1=MIMEText(open('1.jpg','rb').read(),'base64','utf-8')
attachment_1['content-Type']='application/octet-stream'
attachment_1['content-Disposition']='attachment;filename="1.jpg"'
msg.attach(attachment_1)

attachment_2=MIMEText(open('2.jpg','rb').read(),'base64','utf-8')
attachment_2['content-Type']='application/octet-stream'
attachment_2['content-Disposition']='attachment;filename="2.jpg"'
msg.attach(attachment_2)
#1.jpg   2.jpg 为保存在项目里的图片

#发送邮件
To=['xxxxxxxxxx@qq.com']
server.sendmail(sendAddress,To,msg.as_string())
print('发送成功')

补充内容

#1 计算机中的数据以什么形式存在
# 二进制
#2 字节和二进制的关系
# 1字节=8位二进制数

#3 open方法
# # open(文件,模式,编码方式)
# 参数一:文件就是本地的一个文件,可以用open打开
# 参数二:模式:
# 按照文件打开方式r w a
# t(文本类型) b(字节类型)
# rt rb tr br wt wb
#万国码兼容中文

#(静夜思.txt文件存在当前操作的项目里的文件)

# 以文本只读模式打开
file=open('静夜思.txt','rt',encoding='utf-8')
#将文件中的内容读出
result=file.read()
print(result)
#关闭打开的文件
file.close()
# 再次打开文件
# 以字节只读模式打开文件
file1=open('静夜思.txt','rb')
result1=file1.read()
print(result1)
file1.close()


#邮件发送过程中添加的附件需要以二进制的形式进行发送
#即附件要以二进制形式读取,然后进行邮件构造,发送到收件方,再转换回原来的样子
 类似资料: