メールを飛ばすクラス
main.py
import datetime
import datetime as dt
from genericpath import isfile
from importlib.resources import path
from opcode import opname
import requests
from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formatdate
from email.mime.text import MIMEText # MIME 形式データ用
from email.utils import formatdate
import smtplib
import difflib
import os
# 元ファイル用 ディレクトリ
DIR_PATH = 'python/test/back_up/'
# 比較ファイル用 ディレクトリ
DIR_PATH_HIKAKU = 'python/test/back_up02/'
LOG_DIR = 'python/test/log/'
URL_ARR = []
#========================== ディレクトリ作成
def Check_Dir(path):
# ================== path の場所に ディレクトリ作成
d_path = path
try:
if(os.path.isdir(d_path)): # フォルダが存在していた場合
pass
else:
os.makedirs(d_path)
except FileExistsError:
print('関数名:Check_Dir ::: ディレクトリ作成エラー')
# ===================== メール送信 =====================
class Send_Mail():
def __init__(self, host, port, account, password, from_email, to_email):
self.host = host # ホスト
self.port = port # ポート
self.account = account # アカウント
self.password = password # パスワード
self.from_email = from_email # 送信元
self.to_email = to_email # 送信先
# 初期値がセットされているか、されていなかで処理を分ける
def Set_Smtp(self, host, port):
if self.host != None and self.port != None:
return smtplib.SMTP(self.host, self.port)
else:
return smtplib.SMTP(host, port)
def Set_Account(self, account, password):
if self.account != None and self.password != None:
Account[0] = self.account
Account[1] = self.password
return Account
else:
Account = []
Account[0] = account
Account[1] = password
return Account
def Mail_from_to(self, from_email, to_email):
if self.from_email != None and self.to_email != None:
From_To = []
From_To[0] = self.to_email
From_To[1] = self.from_email
return From_To
else:
From_To = []
From_To[0] = to_email
From_To[1] = from_email
return From_To
ef Send_Mail_To(self, file_name):
# MIMEの作成
subject = "テストメール3"
message = Send_Mail_Body()
msg = MIMEText(message, "html")
msg["Subject"] = subject
msg["To"] = self.to_email
msg["From"] = self.from_email
# メール送信処理
# server = smtplib.SMTP("smtp.gmail.com", ポート)
server = smtplib.SMTP(self.host, self.port)
# server = Send_obj.Set_Smtp(self.host, self.port)
server.starttls()
server.login(self.account, self.password)
server.send_message(msg)
server.quit()
# ====== メール送信
# server = smtplib.SMTP("SMTPサーバ", ポート番号)
# デバッガ
# server.set_debuglevel(True)
# === 送受信先
# ================ Function メール内容
def Send_Mail_Body(file_name):
# === ファイルが違った場合のエラーメッセージ
r_message = ''
r_message = '対象ファイル名:' + file_name
r_message += '「警告」メッセージ内容:ソースが違っています。'
return r_message
# =============== ログ閲覧時 見易さ調整用 Function
def Print_NamiNami():
print("=========================================================" + '\n' +
"=========================================================" + '\n' +
"=========================================================")
ファイルチェックする。結果HTML出力。ファイルが違ったらメール送信 &
main.py
# ==========================================================
# =============== ソース比較処理 ============================
# ==========================================================
class Diff_File():
def __init__(self, path_01, path_02, file_01, file_02):
self.path_01 = path_01 # 原本 ディレクトリ パス
self.path_02 = path_02 # 比較用 ディレクトリ パス
self.file_01 = file_01 # 原本 ファイル名
self.file_02 = file_02 # 比較用 ファイル名
# === 2つのファイルを、比較した結果を、HTMLとして出力
def Diff_HTML(self, output_dir_path, output_file_name):
file1_p = os.path.join(self.path_01, self.file_01) # 原本
file2_p = os.path.join(self.path_02, self.file_02) # 比較用
diff = difflib.HtmlDiff()
output_file = output_file_name # 出力用ファイル名
output_path = os.path.join(
output_dir_path, output_file) # output_dir_path = 出力用ディレクトリ パス
file1 = open(file1_p, 'r', encoding="utf-8_sig")
file2 = open(file2_p, 'r', encoding="utf-8_sig")
# ファイル書き込み
output_create = open(output_path, 'w', encoding="utf-8")
output_create.writelines(diff.make_file(file1, file2))
# === 2つのファイルを、比較した結果、ファイルに違いがあれば、メール送信
def Diff_FILE_SendMail(self):
file1_p = os.path.join(self.path_01, self.file_01) # 原本ファイル
file2_p = os.path.join(self.path_02, self.file_02) # 比較用ファイル
diff_file01 = open(file1_p, 'r', encoding="utf-8_sig")
diff_file02 = open(file2_p, 'r', encoding="utf-8_sig")
diff_02 = difflib.Differ()
output_diff02 = diff_02.compare(
diff_file01.readlines(), diff_file02.readlines())
# === diff_file01 , diff_file02 のファイルを比較
diff_Flg = True
for diff_data in output_diff02:
if diff_data[0:1] in ['+', '-']:
print('======××× 「警告」ソースに違いがあります ×××======')
if os.path.exists(r'D:\\Python_ソース比較_2022\\test_sorce_fire2022\\python\\test\\log\\diff_errro_log.txt'):
File_Append(LOG_DIR + 'diff_errro_log.txt',
diff_data + '\n')
diff_Flg = False
else:
File_Write(LOG_DIR + 'diff_errro_log.txt',
diff_data + '\n')
diff_Flg = False
else:
print('○○○○○○○○○○○「OK」ソース比較 OK です。一致しています。 ○○○○○○○○○○○')
# === メール送信処理
if diff_Flg:
pass
else:
# ====== ソースが合ってなかったら、メール送信
# === 送受信先
Send_obj = Send_Mail('ホスト', 'ポート', 'アカウント 夏目 智徹',
'パスワード', '送信元メールアドレス', '送信先メールアドレス')
Send_obj.Send_Mail_To(self.file_02)
diff_file01.close()
diff_file02.close()
# ======================= 作業 Start ======================
# === ディレクトリ作成
Check_Dir(DIR_PATH) # 原本 ディレクトリ
Check_Dir(DIR_PATH_HIKAKU) # 比較用 ディレクトリ
Check_Dir(LOG_DIR) # エラー時、log.txt 格納用 ディレクトリ
# ================== 比較用 オブジェクト生成
# === index.txt 比較
Diff_Obj_01 = Diff_File(
r'D:\\Python_ソース比較_2022\\test_sorce_fire2022\\python\\test\\back_up\\', r'D:\\Python_ソース比較_2022\\test_sorce_fire2022\\python\\test\\back_up02\\', 'index.txt', 'index.txt')
# HTML ファイル出力
Diff_Obj_01.Diff_HTML(
'D:\\Python_ソース比較_2022\\test_sorce_fire2022\python\\test\output\\', 'index.html')
# ファイル比較
Diff_Obj_01.Diff_FILE_SendMail()
# === login.txt 比較
Diff_Obj_02 = Diff_File(r'D:\\Python_ソース比較_2022\\test_sorce_fire2022\\python\\test\\back_up\\',
r'D:\\Python_ソース比較_2022\\test_sorce_fire2022\\python\\test\\back_up02\\', 'login.txt', 'login.txt')
# HTML ファイル出力
Diff_Obj_02.Diff_HTML(
'D:\\Python_ソース比較_2022\\test_sorce_fire2022\python\\test\output\\', 'login.html')
Diff_Obj_02.Diff_FILE_SendMail()