想法:公司财务给员工发工资条一人一人的发,做个简单的脚本实现通过脚本实现群发。
实现:对员工工资的 Excel表格进行遍历通过每个员工自己的邮箱号码,发送各自的工资信息
版本: Python 3.11
操作环境: windows 11
代码工具: pycharm-professional-2022.1.3
代码实现
from openpyxl import load_workbook
import smtplib
# 发送邮件需要下面的两条引入
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件头 (python 2.6 后作废)
from email.utils import formataddr
# 加载excel文件
wb = load_workbook("于的工资表.xlsx",data_only=True)
sheet = wb.active
# 登陆邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发送人邮箱中的SMTP服务器,端口事25
smtp_obj.login("发件人的邮箱", "临时密码") # 括号中对应的是发件人邮箱账号和密码
# smtp_obj.set_debuglevel(1) #显示调试信息
# 先循环一下这个表
count = 0
# table_col_names = [] #表头
table_col_html = '<thead>' # 生成一个
for row in sheet.iter_rows(min_row=1):
count += 1
if count == 1 :
for col in row:
# table_col_names.append(col.value)
table_col_html += f"<th>{col.value}</th>"
# print(table_col_names)
# break
table_col_html += "</thead>"
continue
else:
row_text = "<tr>" #开始一行
for cell in row:
#print(cell.value, end=",")
row_text += f"<td>{cell.value}</td>"
row_text += "</tr>" #结束一行
name = row[2]
staff_email = row[1].value
print(staff_email, name.value)
mail_body_context = f'''
<h3>{name.value},你好:</h3>
<p>请查收你2023年的工资条.....
<table border="1px solid black">
{table_col_html}
{row_text}
</table>
</p>
'''
# msg = MIMEText(mail_body_context, "html", "utf-8") # 构建邮件正文
#
# msg["Subject"] = Header("YU的工资信息", "utf-8") # 主题
# msg["From"] = Header("发件人的邮箱", "utf-8") # 发送人
# msg["To"] = Header("于员工", "utf-8") # 接收人
# 以上命令 Python2.6 前可以使用
msg = MIMEText(mail_body_context, "html", "utf-8")
msg['Subject'] = 'YU的工资信息'
msg['From'] = formataddr(['YU','发件人的邮箱'])
msg['To'] = '发件人的邮箱'
msg['Cc'] = '想要抄送的邮箱'
# 发送
smtp_obj.sendmail('发件人邮箱',[staff_email],msg.as_string())
print(f"成功发送到{staff_email}{name.value}")
注:
1.代码中的 Excel 文件与此脚本在同目录下
2.确保发件人的邮箱和密码都是正确的
3.代码中注释掉的部分中,有些是Python 2.6之后已无法使用的命令
代码中Excel格式如图
成果图(格式如图)
注注注注注注注注
以上代码是自学Python后编写,好多处很繁琐望得到更好的推荐和方法