背景: 自動發送郵件可以将正常化得需求自動化,解放雙手做更多有意義的事情
以下即為代碼:
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 3 12:22:58 2019
@author: wuxian
"""
import smtplib
import email.mime.multipart
import email.mime.text
import email.mime.base
import os.path
import xlwt
import time
import schedule
import sys
import os
with open(r'.\Desktop\PID.txt','a') as file:
file.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())+'\t')
file.write(str(sys.argv[0]).split('\\')[-1]+'\t')
file.write('PID:'+str(os.getpid())+'\t')
file.write('PPID:'+str(os.getppid())+'\n')
#open-'a':寫入打開,如果檔案存在則添加到尾部
# =============================================================================
#連接配接資料庫
# =============================================================================
import pymysql
def dbreadsql(v_sql):
conn = pymysql.connect(host=None, port=3306,
user='root', passwd='wx123456', db= 'testwuxian',
charset='utf8')
cur = conn.cursor()
cur.execute(v_sql)
rows = cur.fetchall()
cur.close()
conn.close()
return rows
sql0 = "select * from testwuxian.register_info"
#sql1 = "select * from testwuxian.register_detail"
sql2 = "select * from testwuxian.search_info"
sql3 = "select * from testwuxian.search_detail"
rows0 = dbreadsql(sql0)
#rows1 = dbreadsql(sql1)
rows2 = dbreadsql(sql2)
rows3 = dbreadsql(sql3)
# 生成excel檔案名
def mailsend(rows0,rows2,rows3):
v_file_name = 'COCOK生産庫資料.xls'
# 生成excel檔案
book = xlwt.Workbook()#
sheet1 = book.add_sheet('注冊人數', cell_overwrite_ok=True)
# sheet2 = book.add_sheet('注冊明細', cell_overwrite_ok=True)
sheet3 = book.add_sheet('關鍵字搜尋次數', cell_overwrite_ok=True)
sheet4 = book.add_sheet('關鍵字搜尋明細', cell_overwrite_ok=True)
#表頭标題
sheet1.write(0, 0, '注冊日期')
sheet1.write(0, 1, '注冊人數')
# sheet2.write(0, 0, '注冊日期')
# sheet2.write(0, 1, '手機号')
# sheet2.write(0, 2, '裝置型号')
# sheet2.write(0, 3, '神策辨別碼')
sheet3.write(0, 0, '搜尋日期')
sheet3.write(0, 1, '搜尋總次數')
sheet4.write(0, 0, '搜尋日期')
sheet4.write(0, 1, '搜尋關鍵字')
sheet4.write(0, 2, '搜尋次數')
# 每一列寫入excel檔案,不然資料會全在一個單元格中
for i in range(len(rows0)):
for j in range(2):
# print (rows[i][j])-
# print ("--------")
sheet1.write(i + 1, j, rows0[i][j])
# for i in range(len(rows1)):
# for j in range(4):
# # print (rows[i][j])-
# # print ("--------")
# sheet2.write(i + 1, j, rows1[i][j])
for i in range(len(rows2)):
for j in range(2):
# print (rows[i][j])-
# print ("--------")
sheet3.write(i + 1, j, rows2[i][j])
for i in range(len(rows3)):
for j in range(3):
# print (rows[i][j])-
# print ("--------")
sheet4.write(i + 1, j, rows3[i][j])
book.save("C:/Users/wuxian/Desktop/" + v_file_name)
# 郵件資訊
From = "發送者郵箱"
To = "收件人郵箱"
Cc = "抄送人郵箱"
file_name = v_file_name
server = smtplib.SMTP_SSL("smtp.aliyun.com",465)
server.login("郵箱", "密碼") # 僅smtp伺服器需要驗證時
# 構造MIMEMultipart對象做為根容器
main_msg = email.mime.multipart.MIMEMultipart()
# 構造MIMEText對象做為郵件顯示内容并附加到根容器
text_msg = email.mime.text.MIMEText("Hi All,\n \n 正文部分内容,請查收,謝謝。\n \n Best Wishes!")
main_msg.attach(text_msg)
# 構造MIMEBase對象做為檔案附件内容并附加到根容器
maintype,subtype = 'ershoufanglianjia','.xls'
# 讀入檔案内容并格式化
data = open("C:/Users/wuxian/Desktop/" + file_name, 'rb')
file_msg = email.mime.base.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read())
data.close()
email.encoders.encode_base64(file_msg)
# 設定附件頭
basename = os.path.basename("./Desktop/" + file_name)
file_msg.add_header('Content-Disposition',
# 附件如果有中文會出現亂碼問題,加入gbk
'attachment', filename=('gbk', '', basename))
main_msg.attach(file_msg)
# 設定根容器屬性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Cc'] = Cc
main_msg['Subject'] = "郵件主題"
main_msg['Date'] = email.utils.formatdate()
# 得到格式化後的完整文本
fullText = main_msg.as_string()
# 用smtp發送郵件
try:
server.sendmail(From, To.split(',') + Cc.split(','), fullText)
print("發送成功")
except Exception as e:
print("發送失敗")
print(str(e))
finally:
server.quit()
mailsend(rows0,rows2,rows3)
#若是需要定時發送則使用以下代碼:
#schedule.every().day.at('8:00').do(mailsend)
#while True:
# schedule.run_pending()
# time.sleep(60)