怎么用python实现把excel内容读取到邮件正文,用html格式
使用相关的转换函数即可完成
用python的pymysql模块实现数据库查询数据,使用openpyxl模块导出数据到Excel中并邮件发送:https://blog.csdn.net/wangjun12214/article/details/105857976?ops_request_misc=&request_id=&biz_id=102&utm_term=python%E5%AE%9E%E7%8E%B0%E8%AF%BB%E5%8F%96%E6%95%B0%E6%8D%AE%E5%BA%93%E7%94%9F%E6%88%90Excel%E7%84%B6%E5%90%8E%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-3-105857976.nonecase&spm=1018.2226.3001.4450
如果你是想做成手动复制excel内容到邮件正文那种效果,可以试一下selenium 爬虫。可以模拟用户操作
用pandas 的to_html函数
import smtplib
from email.mime.text import MIMEText
import xlrd
rdec = xlrd.open_workbook(r'\test\youjian.xlsx')
sheet = rdec.sheet_by_name('sheet2')
#获取sheet的最大行数和列数
nrows = sheet.nrows#行
ncols = sheet.ncols #列
#假设邮件的正文内容在2行3列:
content = sheet.cell(2,3).value #获取2行3列的表格值
#设置服务器所需信息
#163邮箱服务器地址
mail_host = 'smtp.163.com'
#163用户名
mail_user = '159*****77'
#密码(qq邮箱为授权码)
mail_pass = '7******x'
#邮件发送方邮箱地址
sender = '159*****02@163.com'
#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['59*****02@qq.com']
#设置email信息
#邮件内容设置
#这个地方第二个参数比较关键,如果是纯文本的话,使用plain
message = MIMEText(content,'html','utf-8')
#邮件主题
message['Subject'] = 'title'
#发送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
#登录并发送邮件
try:
smtpObj = smtplib.SMTP()
#连接到服务器
smtpObj.connect(mail_host,25)
#登录到服务器
smtpObj.login(mail_user,mail_pass)
#发送
smtpObj.sendmail(
sender,receivers,message.as_string())
#退出
smtpObj.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e) #打印错误
写的比较粗,先用着看行不行,里面的文件和邮箱配置什么的需要都改一下哈。
希望可以帮助到你 :D
这样实现:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import xlrd
import datetime
#创建连接和登陆,smtp服务器地址,端口,发件人账号和密码,
con = smtplib.SMTP_SSL('smtp.163.com',465)
con.login('****@163.com','***password***')
#准备基础数据,主题、发件人、收件人
msg = MIMEMultipart()
#邮件主题
msg['Subject'] = Header('邮件主题test','utf-8').encode()
#发件人
msg['From'] = '*****@163.com <****@163.com>'
#收件人
msg['To'] = 'bbbb@qq.com'
#写邮件,读取excel文件内容作为邮件正文
def mailWrite():
#表格的标题和头
header = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>'
th = '<body text="#000000" ><table border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="180" align="left" ><tr bgcolor="#F79646" align="left" ><th>本地地址</th><th>PBU</th></tr>'
#打开文件
#filepath设置详细的文件地址
filepath = 'E:\报盘配置报表-20200512.xlsx'
book = xlrd.open_workbook(filepath)
sheet = book.sheet_by_index(0)
#获取行列的数目,并以此为范围遍历获取单元数据
#nrows 行数,ncols 列数
nrows = sheet.nrows - 1
ncols = sheet.ncols
body = ''
cellData = 1
for i in range(1,nrows+1):
td = ''
for j in range(ncols):
cellData = sheet.cell_value(i , j)
#读取单元格数据,赋给cellData变量供写入HTML表格中
tip = '<td>' + cellData + '</td>'
td = td + tip
tr = '<tr>' + td + '</tr>'
#tr = tr.encode('utf-8')
body = body + tr
tail = '</table></body></html>'
mailcontent = header+th+body+tail
#将excel文件的内容转换为html格式,后续在邮件中拼接
return mailcontent
#邮件正文内容
content = mailWrite()
cs = """
<p>今日报盘配置信息如下:</p>
"""
contents = cs + content
html = MIMEText(contents,'html','utf-8')
msg.attach(html)
#邮件附件
part = MIMEApplication(open('E:\报盘配置报表-20200512.xlsx', 'rb').read())
#filename=邮件附件中显示的文件的名称,可自定义
part.add_header('Content-Disposition', 'attachment', filename="excel报表-20220512.xlsx")
msg.attach(part)
#发送邮件
#sendmail(发件人,收件人,内容)
con.sendmail('*****@163.com','bbbb@qq.com',msg.as_string())
con.quit()
print('发送成功!')
1、读取excel里面的内容;
2、生成html格式;
3、设置html内容为邮件正文