怎么用python实现把excel内容读取到邮件正文,用html格式

怎么用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内容为邮件正文