Python3實現自動傳送MySql查詢併傳送郵件

Gffxhu發表於2019-11-02

主要是公司運營需求就是查詢相關資料的情況給他們定時傳送,由於研發團隊沒有開發相關的功能,只要由我們運維組的來寫指令碼給他們匯出資料併傳送給他們。

1、這裡我只是把Oracle替換成了Mysql,如果需要Oracle相關的庫,請自行百度。

2、xlwt主要是為了將查詢的結果放入excle中。

3、傳送郵件選擇的ssl,465(阿里雲把25埠給封了好像)

4、指令碼的實現邏輯很簡單,文中主要的東西已經替換,我麼有統一寫在前面,最主要是別人要的急就沒注意規範,需要費一下眼神看一下。。。

import datetime
import xlwt
import pymysql
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


def sql():
    table = '資料庫的表'    # 我這裡就是簡單的查一張表
    # 開啟資料庫連線
    db = pymysql.connect("伺服器ip", "資料庫使用者", "資料庫密碼", "資料庫名")
    # 使用 cursor() 方法建立一個遊標物件 cursor
    cursor = db.cursor()
    # 使用 execute()  方法執行 SQL 查詢
    cursor.execute("SELECT * FROM {table};".format(table=table))
    # 使用 fetchone() 方法獲取單條資料.
    data = cursor.fetchall()
    # 關閉資料庫連線
    db.close()
    return data, table


def writ_to_excel(data, database):
    book = xlwt.Workbook(encoding='utf-8')
    sheet = book.add_sheet(database, cell_overwrite_ok=True)
    # i為索引,j為內容
    for i, j in enumerate(data):
        # m為j裡面內容的索引,n為j裡單獨的每個內容
        for m, n in enumerate(j):
            sheet.write(i, m, n)
    url = r'C:\Users\cj\Desktop\{}.xls'.format(database)
    book.save(url)
    return url


def send_eamil(url, table):
    # 第三方 SMTP 服務
    mail_host = "smtp.qq.com"  # 設定伺服器
    mail_user = "123456789@qq.com"  # 使用者名稱
    mail_pass = "45678jkjlsfds"  # 口令
    # 接收郵件,可設定為你的QQ郵箱或者其他郵箱
    receivers = ['dfadsafdsaf@qq.com']

    content = MIMEText(table)  # 郵件內容
    message = MIMEMultipart()
    message.attach(content)
    # message['From'] = Header("MySql查詢結果-附件", 'utf-8')
    # message['To'] = Header(receivers, 'utf-8')
    subject = "MySql查詢結果-附件-" + table + str(datetime.datetime.now())
    message['Subject'] = Header(subject, 'utf-8')
    xlsx = MIMEApplication(open(url, 'rb').read())
    xlsx["Content-Type"] = 'application/octet-stream'
    xlsx.add_header('Content-Disposition', 'attachment', filename=url.split('\\')[-1])
    message.attach(xlsx)
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)
        # smtpObj.connect(mail_host, 25)  # 25 為 SMTP 埠號
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(mail_user, receivers, message.as_string())
        print("郵件傳送成功")
    except Exception as e:
        print(e)


if __name__ == '__main__':
    data, table = sql()
    url = writ_to_excel(data, table)
    send_eamil(url, table)
複製程式碼

相關文章