1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

python3 ファイルチェックして、違いがあった場合はメールを飛ばす。

Last updated at Posted at 2022-11-14

メールを飛ばすクラス

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()

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?