(编辑:jimmy 日期: 2024/11/13 浏览:2)
作为课代表,经常要做的两件事是:帮忙发作业和帮忙收作业,而且很多时候是通过邮件来完成的,如果手动一封一封的收取和发送就很浪费时间——人生苦短,我用Python。
直接上代码,不想了解细节原理直接拉到最后,我封装成了两个函数,根据提示,输入参数,直接调用就行。亲测可行
不想看细节这部分可以直接跳过,但是运行的时候要把这一块也粘贴进去。
导入相关库 import smtplib,ssl from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import formatdate from email import encoders import poplib from email.parser import Parser from email.header import decode_header from email.utils import parseaddr from email.header import Header #解析消息头中的字符串,没有这个函数,print出来的会使乱码的头部信息。如'="unknown encoding: utf-8") if email_content_type =='': continue #如果内容为空,也跳过 print(email_content_type + ' ----- ' + content) # -------------------- 收取和发送邮件两个函数 -------------------------- def sent_email(from_addr,password, to_addrs,title,content,path=None): ''' from_addr:发件人邮箱 password:发件人密码(如果是QQ或者网易邮箱,这里写授权码) to_addrs:收件邮箱列表 title:邮件标题 content:邮件内容 path:如果需要发送附件,这里填写附件的路径 ''' smtp_server = 'smtp.'+ from_addr.split('@')[-1] # 发信服务器 msg = MIMEMultipart() # 创建一封空邮件 msg['From'] = Header(from_addr) # 添加邮件头信息 msg['Subject'] = Header(title) # 添加邮件标题 msg.attach(MIMEText(content,'plain','utf-8')) # 正文内容 if path != None: # 添加附件 part = MIMEBase('application', "octet-stream") part.set_payload(open(path, "rb").read()) # 读取附件 encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename=path.split('/')[-1]) msg.attach(part) # 把附件添加到邮件中 server = smtplib.SMTP_SSL(smtp_server) # 开启发信服务,这里使用的是加密传输 server.connect(smtp_server,465) # 登录发信邮箱 for to_addr in to_addrs: # 遍历发送给每个账号 msg['To'] = Header(to_addr) server.login(from_addr, password) # 发送邮件 server.sendmail(from_addr, to_addr, msg.as_string()) server.quit() # 关闭服务器 print('发送成功') def get_email(email,password,path): ''' email:邮箱地址 password:密码(如果是qq邮箱或者网易邮箱,这里填授权码) path:附件保留的位置 ''' server=poplib.POP3_SSL('pop.'+email.split('@')[-1]) #修改对应的邮箱服务器 server.user(email) server.pass_(password) resp, mails, octets = server.list() #登录的过程 index = len(mails) #邮件的总数 resp, lines, octets = server.retr(index) #读取最近一封邮件 msg_content = b'\r\n'.join(lines).decode('utf-8','ignore') msg = Parser().parsestr(msg_content) #server.dele(index) 删除邮件 get_header(msg) # 显示邮件信息,包括发件人,收件人,标题 get_file(path,msg) # 保留附件 get_content(msg) # 显示文件内容 server.quit() print('收取成功')
直接看这里!
1、发送邮件函数:sent_email(from_addr, password, to_addrs, title, content, path=None)
按顺序输入括号中的参数
from_addr:发件人邮箱
password:发件人密码(如果是QQ或者网易邮箱,这里写授权码)
to_addrs:收件邮箱列表
title:邮件标题
content:邮件正文内容
path:如果需要发送附件,这里填写附件的路径,如果没有,则直接忽略
from_addr = '20182*****@mail.scut.edu.cn' # 打个码,这里输入你自己的邮箱就行 password = 'scut_827*****' # 输入你的密码(如果是qq或者网易邮箱,这里要输入授权码) to_addrs = ['lly****@163.com', '12375947@qq.com'] # 这里就写需要发送的邮箱 title = '这是一封测试邮件' # 邮件标题 content = '随便写点东西' # 正文内容 path = 'C:/Users/要发的文件.xlsx' # 如果你想要发送一封带附件的邮件,那么这里就填写你的附件路径 sent_email(from_addr, password, to_addrs, title, content, path) # 发送邮件
2、收取邮件函数:get_email(email, password, path)
email:邮箱地址
password:密码(如果是qq邮箱或者网易邮箱,这里填授权码)
path:附件保留的位置
email = '1234567@163.com' # 填写你的邮箱账号(你要收取邮件的那个邮箱) password = 'LXSHS*****' # 填写你的邮箱密码(如果是qq或者网易邮箱,这里要输入授权 path = 'C:/Users/Desktop/' # 如果对方的邮件有附件,那么附件将下载到这里地方 get_email(email,password,path)