Python实现发送文件带各种格式附件的QQ邮件

每周都要把打包好的文件发送给领导,搞来搞去嫌麻烦,查询网上各种资料后记录代码在此,参考资料:) 参考网址: https://www.freesion.com/article/83371338835/

1、基础知识:

python 发送邮件主要用到两个模块:
  • smtplib:
     发送邮件(连接邮箱服务器、登录邮箱、发送邮件)
    
  • email:
     构造邮件内容(发件人、收件人、主题、正文、附件等)
    
email 模块下有 mime 包,mime 包下常用的有三个模块:(text、image、multipart)

MIMETex:(纯文本、HTML页面)
    参数如下:
        _text:文本内容
        _subtype:文本类型:plain(默认)、html
        _chartset:文本编码:中文为’utf-8’

MIMEImage:(图片)

IMEMultipart:(组合,可包含文本和附件)
        ‘mixed’ :纯文本正文(text/plain)、超文本正文(text/html)、内嵌资源(图片,声音)、附件
        ‘related’ : 内嵌资源(图片,声音)
        ‘alternative’ : 纯文本正文(text/plain)、超文本正文(text/html

2、发送邮件:

(1)没有安装包的需要先安装:stmplib、email

pip install stmplib
pip install email

(2)导入包:

import smtplib
from email.header import Header
from email.utils import formataddr
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

(3)SMTP 服务器以及相关配置信息,以 QQ 邮箱为例:

开启POP3/STMP服务:设置 --> 账户 --> POP3/STMP服务 --> 开启

在 python 中设置 STMP 服务器信息

host = 'smtp.qq.com'  # 发件人邮箱的SMTP服务器
sender = 'x@qq.com'  # 发件人邮箱账号
password = 'password '  # 发件人邮箱密码(不是qq密码,通过设置--》账户--》开启--》授权码)
receivers = ['xx@qq.com']  # 接收人邮箱账号(可以多个,逗号隔开)

(4)创建邮件内容(包含:邮件内容、发件人、收件人、邮件主题)

只有邮件正文版:

# 简单邮件
msg = MIMEText('I love you nanW ~ ', 'plain', 'utf-8')  # 邮件正文的内容、设置文本格式:plain、设置编码格式:utf-8
msg['From'] = formataddr(['j', sender])  # 发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(['sir', ','.join(receivers)])  # 收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "每周照片到啦,自动发送,有疑问请联系发件人"  # 邮件主题

多形式组合版:

# 创建多形式组合邮件
msg = MIMEMultipart('mixed')
msg['From'] = formataddr(['j', sender])  # 发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(['sir', ','.join(receivers)])  # 收件人邮箱昵称、收件人邮箱账号

设置要发送的文件

# msg['To'] = ','.join(receivers)
msg['Subject'] = "每周照片到啦,自动发送,有疑问请联系发件人"  # 邮件主题

#
# ######## 添加附件 - txt
# att_txt = MIMEText(open(r'D:\学习\python\email_file\I.txt', 'rb').read(),'base64','utf-8')
# att_txt["Content-Type"] = 'application/octet-stream'
# att_txt["Content-Disposition"] = 'attachment; filename="I.txt"'
# msg.attach(att_txt)
#
# ######## 添加附件- 图片
# att_img2 = MIMEText(open(r'D:\学习\python\email_file\love.jpg', 'rb').read(), 'base64', 'utf-8')
# att_img2['Content-disposition'] = 'attachment;filename="love.jpg"'
# msg.attach(att_img2)# 添加图片文件到邮件-附件中去
#
# ######## 添加附件 - excel
# att_excel = MIMEText(open(r'D:\学习\python\email_file\Love.xlsx', 'rb').read(),'base64','utf-8')
# att_excel["Content-Type"] = 'application/octet-stream'
# att_excel["Content-Disposition"] = 'attachment; filename="Love.xlsx"'
# msg.attach(att_excel)

######## 添加附件 -rar,zip
att_zip = MIMEText(open(r'C:/Users/Desktop/每周照片.zip', 'rb').read(),'base64','utf-8')
att_zip["Content-Type"] = 'application/octet-stream'
# att_zip["Content-Disposition"] = 'attachment; filename="中1901.zip"' #Content-disposition:设置文件在浏览器打开还是下载
# 附件名称为中文时的写法
att_zip.add_header("Content-Disposition", "attachment", filename=("gbk", "", "每周照片.zip"))
msg.attach(att_zip)

(5)发送邮件

try:
    # 创建并登录SMTP服务器
    server = smtplib.SMTP_SSL(host, 465)  # 创建一个STMP对象,SSL加密(也可选择明文发送server = smtplib.SMTP(host, 25))
    server.login(sender, password)  # 登陆需要认证的SMTP服务器(发件人邮箱账号、密码)
    # 发送邮件
    server.sendmail(sender, receivers, msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件内容,as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str
    server.quit()   # 断开STMP服务器链接
    print ('邮件发送成功!')
except smtplib.SMTPException as e:
    print ('Error: 邮件发送失败!', e)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好,以下是用Python实现邮箱发送文件和接收文件的示例代码: 1. 发送文件 ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from email.header import Header def send_email(subject, content, from_addr, password, to_addr, file_path): # 邮件内容 message = MIMEMultipart() message['From'] = Header(from_addr, 'utf-8') message['To'] = Header(to_addr, 'utf-8') message['Subject'] = Header(subject, 'utf-8') message.attach(MIMEText(content, 'plain', 'utf-8')) # 附件内容 with open(file_path, 'rb') as f: mime = MIMEApplication(f.read()) mime.add_header('Content-Disposition', 'attachment', filename='file.txt') message.attach(mime) # 发送邮件 smtp = smtplib.SMTP('smtp.qq.com') smtp.login(from_addr, password) smtp.sendmail(from_addr, to_addr, message.as_string()) smtp.quit() ``` 使用示例: ```python send_email('测试邮件', '这是一封测试邮件附件文件', 'sender@qq.com', 'password', 'receiver@qq.com', 'file.txt') ``` 2. 接收文件 接收邮件需要使用IMAP协议,以下是使用Python的imaplib库实现接收邮件的示例代码: ```python import imaplib import email def receive_email(host, username, password): # 连接邮箱 imap = imaplib.IMAP4_SSL(host) imap.login(username, password) imap.select() # 搜索邮件 typ, data = imap.search(None, 'ALL') mail_ids = data[0].split() # 下载附件 for mail_id in mail_ids: typ, data = imap.fetch(mail_id, '(RFC822)') msg = email.message_from_bytes(data[0][1]) for part in msg.walk(): if part.get_content_maintype() == 'multipart': continue if part.get('Content-Disposition') is None: continue filename = part.get_filename() if filename: with open(filename, 'wb') as f: f.write(part.get_payload(decode=True)) # 关闭连接 imap.close() imap.logout() ``` 使用示例: ```python receive_email('imap.qq.com', 'username@qq.com', 'password') ``` 注意:在使用时需要先开启邮箱的IMAP服务,并且保证发送邮件和接收邮件的邮箱账号是同一个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值