Python读取excel表中的工资内容,实现工资群发邮件。
前言
目的:读取excel数据中的每个人工资情况,根据每个人的邮箱,实现群发邮件的功能。
参考:廖雪峰
一、准备工作(QQ邮箱为例)
1. Excel表中Sheet1的内容
2. 邮箱登录用户名 from_addr :发送邮件的邮箱
3. 登录密码 password:为授权码
发送者的邮箱主页,设置,账户,开户服务中IMAP/SMTP服务 开启,扫码生成授权码。
4. 服务器地址 smtp_server: smtp.qq.com
以QQ邮箱为例:帮助中心,客户端设置,SMTP服务器
5. excel路径 file_path:工资.xls 文件存储的路径
二、代码
import os
import xlrd
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def read_file(file_path):
file_list = []
work_book = xlrd.open_workbook(file_path)
sheet_data = work_book.sheet_by_name('Sheet1')
print('now is process :', sheet_data.name)
Nrows = sheet_data.nrows
for i in range(1, Nrows):
file_list.append(sheet_data.row_values(i))
return file_list
def send_gongzi(file_list, from_addr, password, smtp_server):
for i in range(len(file_list)):
person_info = file_list[i]
person_name, jixiao, gongzi, jiangjin,email_add, yanglao = str(person_info[0]), str(person_info[1]), str(person_info[2]), str(person_info[3]), str(person_info[4]), str(person_info[5])
msg = MIMEText('过年发工资' +'\n绩效:'+ jixiao +'\n工资:'+ gongzi + '\n奖金:'+ jiangjin+'\n养老:'+yanglao , 'plain', 'utf-8')
msg['From'] = _format_addr('bai <%s>' % from_addr)
msg['To'] = _format_addr(person_name + '<%s>' % email_add)
msg['Subject'] = Header('春节过节费发放通知', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.starttls() # 调用starttls()方法,就创建了安全连接
server.login(from_addr, password) # 登录邮箱服务器
server.sendmail(from_addr, [email_add], msg.as_string()) # 发送信息
server.quit()
print( " 姓名:", person_name, "已发送成功!")
if __name__ == '__main__':
from_addr = '********@qq.com' # 邮箱登录用户名
password = 'mhazrnwjormbah' # 登录密码
smtp_server='smtp.qq.com' # 服务器地址,默认端口号25
file_path = r'F:\9.14\emil\工资.xls'
file_list = read_file(file_path)
send_gongzi(file_list, from_addr, password, smtp_server)
结果
将excel表中的信息,依据每个人的邮箱进行群发。