发工资啦!教你用Python实现邮箱自动群发工资条
作者:Harris-H 发布时间:2023-10-12 19:11:17
标签:Python,自动群发,工资条
一、excel的内容
二、效果
三、需要用的库:
openpyxl
smptlib
email.mime.text
email.header
四、实现步骤
4.1 获取excel表的数据
wb = load_workbook('数据表.xlsx')
sheet = wb.active
for row in sheet:
for cell in row:
print(cell.value)
4.2 编写邮件内容
使用字符串拼接成html
for row in sheet:
tbody = '<tr>'
cnt += 1
if cnt == 1:
for cell in row:
thead += f'<th>{cell.value}</th>'
thead += '</thead>'
else:
for cell in row:
tbody += f'<td>{cell.value}</td>'
tbody += '</tr>'
name = row[0].value
mail = row[1].value
# 2.编写邮件内容
content = f'''
<h3>{name},你好</h3>
<p>请查收你在2025年 5月1日 - 5月31 日的工资</p>
<table border='1px solid black'>
{thead}
{tbody}
</table>
'''
4.3 发送邮件
# 发送邮件
class Test:
def ck_log(self):
pass
def send_email(self, econtent, ename, mail):
host = 'smtp.qq.com'
user = '你的邮箱'
password = '你的授权码'
receivers = [mail]
subject = '员工工资表'
msg = MIMEText(econtent, 'html', 'utf-8')
msg['From'] = Header('有限公司')
msg['To'] = Header(ename)
msg['Subject'] = Header(subject, 'utf-8')
try:
obj = smtplib.SMTP_SSL(host, 465)
obj.login(user, password)
obj.sendmail(user, receivers, msg.as_string())
print("邮件发送成功!")
except smtplib.SMTPException as e:
print("Error:无法发送邮件")
print(e)
五、所有代码
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.header import Header
'''
1.获取excel表的数据
2.编写邮件内容
3.发送邮件
'''
# 发送邮件
class Test:
def ck_log(self):
pass
def send_email(self, econtent, ename, mail):
host = 'smtp.qq.com'
user = '1479898695@qq.com'
password = 'bijoplffwqqlbaci'
receivers = [mail]
subject = '员工工资表'
msg = MIMEText(econtent, 'html', 'utf-8')
msg['From'] = Header('有限公司')
msg['To'] = Header(ename)
msg['Subject'] = Header(subject, 'utf-8')
try:
obj = smtplib.SMTP_SSL(host, 465)
obj.login(user, password)
obj.sendmail(user, receivers, msg.as_string())
print("邮件发送成功!")
except smtplib.SMTPException as e:
print("Error:无法发送邮件")
print(e)
if __name__ == '__main__':
wb = load_workbook('数据表.xlsx')
o = Test()
cnt = 0
sheet = wb.active
thead = '<thead>'
# 1.获取excel表的数据
for row in sheet:
tbody = '<tr>'
cnt += 1
if cnt == 1:
for cell in row:
thead += f'<th>{cell.value}</th>'
thead += '</thead>'
else:
for cell in row:
tbody += f'<td>{cell.value}</td>'
tbody += '</tr>'
name = row[0].value
mail = row[1].value
# 2.编写邮件内容
content = f'''
<h3>{name},你好</h3>
<p>请查收你在2025年 5月1日 - 5月31 日的工资</p>
<table border='1px solid black'>
{thead}
{tbody}
</table>
'''
# 3.发送邮件
if cnt == 3:
print('content:', content)
print(name, mail)
o.send_email(content, name, mail)
来源:https://blog.csdn.net/weixin_45750972/article/details/116525212
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 1. 语句块:{ }之间的部分即为BLOCK语句块。2. 条件语句:if ( expression ) BLOCK;if ( e
- 1、绘制简单曲线图思路:通过3个坐标点,绘制曲线import matplotlib.pyplot as plt plt.plot(
- 当数据文件过大时,由于计算机内存有限,需要对大文件进行分块读取:import pandas as pdf = open('E:/学习
- 如何修改数据库名(db_name)及实例名(Instance_name or Service_name) Nid是Oracle从9iR2开始
- 实现一个树形表格的时候有多种方法:比如把 ztree 的树形直接拼接成表格,或者用强大的 jqgrid 实现,今天介绍一个比较轻量级的实现:
- # -*- coding: utf-8 -*-# 测试各种排序算法# link:www.jb51.net# date:2013/2/2#选择
- --查看指定表的外键约束 select * from sysobjects where parent_obj in( select id f
- Python字典的基本用法创建字典:myDict1 = { '薛之谦':'我叫薛之谦', &nb
- 目录最终版本过程借鉴代码思考urllib.request和requestsBeautifulSoup优化处理总结代码复制可直接使用,记得pi
- 前言看文档不认真,开发也没有多注意,总是hack。忽悠忽悠就过去,但怎么说,歪门邪道还是不太好,现在就亡羊补牢,总结总结。数组索引使用下标更
- 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语
- blob对象介绍一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式 b
- 因为即将开始淘宝的项目,在前端方面必然要深入了解taobao ued规范,规范还是比较全的,只是对taobao.com的编码和字符集的选择有
- 大概在九九年做游戏网站的时候,就对文章的发布感到麻烦,不过那会儿玩ASP不精。只是将就用着。在遇到长文件 10000 字时网页就是一大片长了
- #!/usr/bin/env python class Foo(object): x=1 if __name__=='__main_
- 前言众所周知字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界&q
- 这里推荐使用OTK脚本安装Oracle,会大大提高安装Oracle的成功系数。DescriptionoraToolKit is the Sw
- 在没步入正轨之前,先给大家介绍JavaScript 特殊字符你可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符。插入特殊
- 网上async with和async for的中文资料比较少,我把PEP 492中的官方陈述翻译一下。异步上下文管理器”async with
- 需求:因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决