python其强大的库,可以让我们处理很多事情,它能帮我们发送邮件,处理pdf等,让我们的生活更简单便捷。
文章目录
一、邮件的发送
简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。但是,你并不需要知道这些技术细节,因为 Python 的 smtplib 模块将它们简化成几个函数。
1.连接SMTP服务器
得到电子邮件提供商的域名和端口信息后,调用 smtplib.SMTP()创建一个 SMTP 对象,传入域名作为一个字符串参数,传入端口作为整数参数。
>>> smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
>>> type(smtpObj)
<class 'smtplib.SMTP'>
如果 smtplib.SMTP()调用不成功,你的 SMTP 服务器可能不支持 TLS 端口 587。在这种情况下,你需要利用 smtplib.SMTP_SSL()和 465 端口,来创建 SMTP 对象。
smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
2.登录到 SMTP 服务器
到 SMTP 服务器的加密连接建立后,可以调用 login()方法,用你的用户名(通常是你的电子邮件地址)和电子邮件密码(国内很多是用授权码,授权码在相应官网获得)登录。
smtpObj.login('my_email_address@gmail.com', 'MY_SECRET_PASSWORD')
3.发送电子邮件
3.1普通文本文件
import smtplib
from email.mime.text import MIMEText
if __name__ == '__main__':
# 发送邮箱服务器 及端口号 每个邮箱网站可去对应官网找
smt = smtplib.SMTP_SSL('smtp.163.com', 465)
smt.ehlo()
# 邮件正文文本
msg = MIMEText('This is test mail')
# 邮件标题
msg['Subject'] = 'Test mail'
# 发送邮箱
msg['From'] = 'fromEmail@main.com'
# 接收者邮箱
msg['To'] = 'ToEmail@main.com'
sender = 'fromEmail@main.com'
receiver = 'ToEmail@main.com'
# 登录邮箱服务器 邮箱账号 密码/授权码 授权码在对应官网获得
smt.login('fromEmail@main.com', 'password')
smt.sendmail(sender, receiver, msg.as_string())
print('邮件发送成功!!')
smt.quit()
实现效果
3.2 发送带附件的邮件
import smtplib
from os.path import basename
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 发送邮箱
sender = 'fromEmail@main.com'
# 接收者邮箱
receiver = 'toEmail@main.com'
msg = MIMEMultipart()
# 发送邮箱服务器 及端口号 每个邮箱网站可去对应官网找
smt = smtplib.SMTP_SSL('smtp.163.com', 465)
smt.ehlo()
# 邮件标题
msg['Subject'] = 'This is a test message'
# 发送者邮箱
msg['From'] = 'fromEmail@main.com'
# 接收者邮箱
msg['To'] = 'ToEmail@main.com'
# 附件文件
filename = 'words.txt'
with open(filename, 'r') as f:
part = MIMEApplication(f.read(), Name=basename(filename))
part['Content-Disposition'] = 'attachment; filename="{}"'.format(basename(filename))
msg.attach(part)
# 登录邮箱服务器 邮箱账号 密码/授权码
smt.login('fromEmail@main.com', 'password')
smt.sendmail(sender, receiver, msg.as_string())
print('邮件发送成功')
实现效果
二、处理pdf文件
PDF 表示 Portable Document Format,使用.pdf 文件扩展名。
用于处理PDF的模块是PyPDF2。要安装它,就从命令行运行pip install PyPDF2。这个模块名称是区分大小写的,
1.从pdf中提取文本
PyPDF2 没有办法从 PDF 文档中提取图像、图表或其他媒体,但它可以提取文本,并将文本返回为 Python 字符串。
#获得pdf页面文本 只有pdf是文本格式的时候才能获得 图片格式不能获得
import PyPDF2
pdfFile = open('demo.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
# 提取第几页的文本 获得一个page对象
page=pdfReader.getPage(0)
print(page.extractText(page))
2.拷贝页面
import PyPDF2
pdfFile = open('demo.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()
for i in range(pdfReader.numPages):
pageObj=pdfReader.getPage(i)
pdfWriter.addPage(pageObj)
pdfFile1 = open('demo1.pdf', 'wb')
pdfWriter.write(pdfFile1)
pdfFile1.close()
pdfFile.close()
3.将多个pdf文件 拆分并合并
import sys
import PyPDF2
if __name__ == '__main__':
totalNum = input('请输入需要拆分合并pdf文件的总数量:')
pdfWriter = PyPDF2.PdfFileWriter()
for i in range(0, int(totalNum)):
fileName = input('请输入文件地址:')
pdf = open(fileName, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdf)
print('-----请输入需要拆分的页数范围(多段请输入如: 1-2,8-9 )-----')
page_str = input()
page_list = page_str.split(',')
for j in page_list:
scope = j.split('-')
if scope[0].isdigit() or scope[1].isdigit():
page_start = int(scope[0])
page_end = int(scope[1])
if page_start > page_end:
print('错误!起始页数大于最终页数!')
sys.exit(0)
else:
for m in range(page_start, page_end + 1):
pageObj = pdfReader.getPage(m)
pdfWriter.addPage(pageObj)
else:
print('错误!页数输入非法')
sys.exit(0)
fileNa = input('数据已经缓存完毕,请输入需要保存的文件地址:')
inputfile = open(fileNa, 'wb')
pdfWriter.write(inputfile)
inputfile.close()
看到这里如果觉得有用,就点个赞吧!!