python通过邮件自动发送csv文件,并附上正文内容

该博客介绍了如何使用Python实现邮件自动化发送,包括设置SMTP服务器、创建MIMEText和MIMEApplication对象来添加正文和附件。目前邮件正文以纯文本形式呈现,后续计划改进为HTML格式以提升阅读体验。
摘要由CSDN通过智能技术生成

1、逻辑思路

        日常可能需要将一些报表作为附件,报表内容作为正文粘贴到邮件里进行发送。这部分可以通过python进行自动化来实现。代码如下(仅是发送邮件),附件是csv文件,正文目前采用文本形式,勉强可以读。后续下一步计划使用报表形式来进行邮件发送。

#-*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import time
import os,sys,multiprocessing

#---init Time---
begintime =  time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

#---receiver config------
muti_mail='**@163.com;**@qq.com'

#-----log file---------
pythonlog ='/home/zhangli/sms_mail.log'

#---send mail server config--------
sender = '**@qq.com'
smtpserver = 'smtp.qq.com'
username = '**@qq.com'
password = '**'
#发送的csv文件位置
filename = '/home/zhangli/sw_list.csv'
#title
title = '日常网络设备巡检'

def sendtxtmail(_subject,_mail_off,_fuc_mail,filename,_begintime):
    for mail_index in range(0, len(_fuc_mail.split(';'))):
        if _mail_off == 1:
            break
        _receiver =  _fuc_mail.split(';')[mail_index]
        if _receiver.find('null') == -1:
            try:
                msg = MIMEMultipart()
                msg['Subject'] =  _subject
                msg['to'] = _receiver
                msg['From'] = sender
                mail_content = open(filename,'r')
                mail_content=mail_content.read()
                print(mail_content)
                zhengwen = title +'\n'+ mail_content
                zhengwen = zhengwen.replace(',','    |    ')
                zhengwen_list = zhengwen.split('\n')
                print(zhengwen_list)
                result = "\r\n".join(zhengwen_list)
                msg.attach(MIMEText(result, _subtype='plain', _charset='utf-8'))
                part = MIMEApplication(mail_content)
                part.add_header('Content-Disposition', 'attachment', filename=filename)
                msg.attach(part)
                smtp = smtplib.SMTP(smtpserver, timeout=10)  # 连接smtp邮件服务器,端口默认是25
                smtp.login(username, password)
                smtp.sendmail(sender,_receiver, msg.as_string())
                smtp.close()
                sendtime =  time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
                os.system("echo "+sendtime+' '+_subject+' '+_receiver+" mail send successful >> "+pythonlog)
                print("mail send successful, the sendtime is %s" % sendtime)
                
            except Exception as err:
                print(err)
                #print(e[1])
                #os.system("echo "+_begintime+' '+_subject+' '+_receiver+" mail send fail ,Code: "+str(e[0])+' '+e[1].split()[0]+'- -! >>'+pythonlog)
    return 'mail func over'

def main():
    print ("begin to send email at %s" % begintime)
    sendtxtmail('test_subject',0,muti_mail,filename,begintime)
    return 'main func over'

main()

实现的效果如下:

2、后续计划

目前MIMEText是采用plain的文本类型,非html格式的。后续可以考虑使用html格式的。

要将CSV文件导入MySQL数据库,可以使用Python自带的csv和pandas库来读取CSV文件并将其转换为数据框,然后使用MySQL Connector库将数据框中的数据插入到MySQL数据库中。以下是详细的代码示例: 首先,需要安装必要的库和MySQL连接器: ```python !pip install pandas !pip install mysql-connector-python ``` 接下来,导入必要的库并连接到MySQL数据库: ```python import pandas as pd import mysql.connector # 连接到MySQL数据库 cnx = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) cursor = cnx.cursor() ``` 然后,使用pandas库读取CSV文件并将其转换为数据框: ```python # 读取CSV文件并转换为数据框 df = pd.read_csv("yourfile.csv") ``` 接下来,定义一个函数来将数据框中的数据插入到MySQL数据库中: ```python def insert_data_to_mysql(dataframe, table_name): """ 将数据框中的数据插入到MySQL数据库中 :param dataframe: 要插入的数据框 :param table_name: 要插入的表名 """ # 获取数据框中的列名和数据类型 columns = list(dataframe.columns) types = dataframe.dtypes # 构建CREATE TABLE语句 create_table = [] for column, dtype in zip(columns, types): if 'int' in str(dtype): create_table.append(f"{column} INT") elif 'float' in str(dtype): create_table.append(f"{column} FLOAT") else: create_table.append(f"{column} VARCHAR(255)") create_table = ', '.join(create_table) # 创建表 cursor.execute(f"CREATE TABLE IF NOT EXISTS {table_name} ({create_table})") # 插入数据 for row in dataframe.itertuples(index=False): values = ', '.join([str(i) if pd.notna(i) else 'NULL' for i in row]) cursor.execute(f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({values})") # 提交更改 cnx.commit() ``` 最后,使用上述函数将数据框中的数据插入到MySQL数据库中: ```python # 将数据插入到MySQL数据库中 insert_data_to_mysql(df, "yourtable") ``` 现在,你已经成功将CSV文件导入MySQL数据库了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值