Python发送邮件和处理pdf文件

python其强大的库,可以让我们处理很多事情,它能帮我们发送邮件,处理pdf等,让我们的生活更简单便捷。

 

文章目录

一、邮件的发送

1.连接SMTP服务器

2.登录到 SMTP 服务器

3.发送电子邮件

3.1普通文本文件

3.2 发送带附件的邮件

二、处理pdf文件

1.从pdf中提取文本

2.拷贝页面

3.将多个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()
a1ec897dc60944599c84f41e6eef2673.png

实现效果

 


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('邮件发送成功')
7728e875a1b14c21a427256bfdaeddad.png

实现效果

 


二、处理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()

看到这里如果觉得有用,就点个赞吧!!44a01685daa84c24b86163fa95ea7eca.png

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLGululu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值