email自動寄發

更新 發佈閱讀 18 分鐘

1.  程式開發 (名稱:mail_ReadF.py)                                                                  

1.1  功能說明

本程式執行後,自動寄出email,寄出的內容可依照讀取的參數檔內容而決定,參數檔可依需要,事先設定好,當程式執行後即自動帶出,參數檔可任意設定,故可靈活彈性運用,寄出各種email的內容,

參數檔設定的項目共5項,即以0 1 2 3 4 代表5種不同的要項,

如下說明

      0,   Subject (信主旨)   主旨後面,追加記入程式執行的日時分

            1,  to_address (收信者) 可填入多個 id ,若無 以from_address表示

          2,  attachments (附件檔) 可傳送多個附件檔

            3,  from_address  (寄信者)  若無填入 none@hoxxx.com.tw

            4,  contents (信內文)   可用多行陳述信件內容

                             

       1.2  開發工具 : Python 3.8.3  [MSC v.1916 64 bit (AMD64)]。

 編輯工具 Spyder 4.1.4                                                              

       1.3   使用模組Module/套件 : import os , smtplib SMTP郵件傳輸協定                           SMTP伺服器 smtp=smtplib.SMTP_SSL('192.168.XX.XX', 465) #SSL

        其他SMTP服務:

          Gmail smtp.gmail.com 64.233.189.109                          

                      Yahoo  smtp.mail.yahoo.com   106.10.248.80                      

                      Hotmail smtp.live.com hkg-efz.ms-acdc.office.com 52.98.40.66                        Outlook smtp-mail.outlook.com

                 hkg-efz.ms-acdc.office.com [40.100.54.210]                      

                     非SMTP: 直接於OUTLOOK 開啟中自動寄信                                 

                                                                   

2.  實際運用:                                    

2,1 參數檔實際說明         

0,[Warning] DB export job was unsuccessful, to refer the lastest log file

1, XXXlin@xxx.com.tw, xxxlin@gmail.com

2, Dump_20230813.txt

3, ffff@xxx.com.tw

4, 課長 好

4,

4,  標題所示 export job 執行無成功,最新log file 參考如下:

4, 

4,    \\D$\Datapum\xxx\Export\Dump

4,       以上通知

 

2.2 執行後寄出內容

件名: [Warning] DB export job was unsuccessful, to refer the lastest log file-- sent 2023/08/13 14:49

寄件者: ffff@xxx.com.tw

寄給 XXXlin@xxx.com.tw, xxxlin@gmail.com

附件檔: Dump_20230813.txt

信件本文:

 課長 好

 

  標題所示 export job 執行無成功,最新log file 參考如下:

     \\D$\Datapum\xxx\Export\Dump

       以上通知

 2.3 自動執行Bat檔,本程式檔,參數檔,需存置於同一資料夾內                                                                 

3.  擴充運用:                                                                                              

       3.1 各部門各業務的定期報表,日報月報等,可利用本程式,設定自動排程,可以自動寄出給各擔當,於非上班時間仍可自動寄信,節省人力工時,減少耽誤延遲等現象發生                          

       3.2 可搭配各項業務自動排程,對每日或定期執行的程式,一旦執行失敗時,可及時寄出警告信,擔當可及時對應,避免事件擴大發生。

   例如DB backup失敗,

       電話通話時間異常,

       機器關機/重新開啟現象發生 

       …         

       3.3 定期eMail 寄出記錄檔,可供確認保存,當做稽查時,備查之憑證記錄,減少人員手工紀錄工時  

                   

4. 程式(mail_ReadF.py) 撰寫內容:

------------ Python coding ------------------         

# -*- coding: utf-8 -*-

"""

Created on xxx

@author: xxx

"""

import smtplib  

from email.mime.multipart import MIMEMultipart #email內容載體

from email.mime.text import MIMEText  #用於製作文字內文

from email.mime.base import MIMEBase  #用於承載附檔

from email import encoders            #用於附檔編碼

from datetime import datetime

#d=str(datetime.now().strftime('%y/%m/%d %H:%M:%S')) 

d=str(datetime.now().strftime('%Y/%m/%d  %H:%M')) 

smtp_user = 'xxx@xxx.com.tw'

smtp_password = 'xxxxxxx'

#設定寄件資訊

# Read external txt file for getting to_address and attchments --linct 

# f=open (R'D:\Users\xtmn094\.spyder-py3\linct\Subj_TO_Attach.txt','r',encoding='cp950')

f=open (R'mail_par.txt','r',encoding='cp950')

 

to_address  = []   # 當無 1 ,無to_address時,default = 空list

attachments = []   # 當無 2 ,無副檔時,default = 空list

from_address = ' '

contents = ' '     # 當無 4 , 無contents時 default = 空string  

 

while True:        # ----- 讀取參數檔  mail_par.txt

    s=f.readline().replace('\n', '')

    if not s:       # 讀到最後EOF 

        break

    else:

        s=s.split(',')

        s0=s[0]

        s =s[1: ]

        while (s0 == '0'):     # ----- 依據 參數 s0 值,做各項處理 

            Subject =','.join(s)    #  got S1_str string (list -> string)      

            Subject = Subject + d

            break

        while (s0 == '1'):       

            s1_str =','.join(s)

            s1_str=s1_str.strip()   # s1_str 前後之空白  str.strip()           

            if (len(s) < 1) or ( s1_str == '' ):

                print (s1_str,'### none to_address --> ERROR ###' )

                to_address = []

            else:

                to_address = s        # got to_address list

            break

        while (s0 == '2'):

            s1_str =','.join(s)

            s1_str=s1_str.strip()

            if (len(s) < 1) or ( s1_str == '' ):            

                attachments = []

            else:

                attachments = s[0: ]     # got attachments list , =s 亦可

            break     

        while (s0 == '3'):

            s1_str =','.join(s)

            s1_str=s1_str.strip()

            if (len(s) < 1) or (  s1_str == '' ):

                print (s1_str,'### none from_address --> ERROR ###' )

                from_address = ' '

            else:

                from_address = s[0]   # got from_address string              

            break

        while (s0 == '4'):

            s1_str =','.join(s)     # list -> string then got contents string         

            contents = contents + s1_str +'\n'

            break

f.close()

 

print ('0',Subject)   

print ('1',to_address)

print ('2',attachments)

print ('3',from_address)

 

contents = contents +'\n'   

if to_address == []:

    to_address = from_address.split()   # string from_a --> list

    contents = contents  + '### ERROR--> none to_address  ###' +'\n'

if from_address == ' ':

    from_address = 'none@honda-htw.com.tw'   # none from_address

    contents = contents  + '### ERROR--> none from_address  ###' +'\n'

# ------ 判斷附加檔 是否存在?   

while (attachments !=[]):   

    import os

    e_attach=[]

   

    for a_f in attachments:

        a_f=a_f.strip()              # a_f.strip()   前後之空白去除 

        if os.path.isfile(a_f) == True:

            e_attach.append(a_f)      # 新增a_f 至 e_attach  list            

        else:

            contents= contents +'### ERROR--> attachment not exist '+ a_f + '\n'

           

    attachments = e_attach          # 只取得存在的檔案

    break

#開始組合信件內容--to_address , attachments 為list, 其餘為string

mail = MIMEMultipart()

mail['From'] = from_address

mail['To'] = ', '.join(to_address)

mail['Subject'] = Subject

 

#將信件內文加到email中

mail.attach(MIMEText(contents))    

 

#將附加檔案們加到email中 若有2, 卻無附加檔 則attachment =[''] 便跳開

if attachments != []:

    for file in attachments:

        with open(file, 'rb') as fp:

             add_file = MIMEBase('application', "octet-stream")

             add_file.set_payload(fp.read())

        encoders.encode_base64(add_file)

        add_file.add_header('Content-Disposition', 'attachment', filename=file)

        mail.attach(add_file)

 

#設定smtp伺服器並寄發信件

smtp=smtplib.SMTP_SSL('192.168.xx.xx', 465) #SSL

smtp.ehlo()

smtp.login(smtp_user, smtp_password)

# 送信動作,並判斷 郵寄是否成功?

status=smtp.sendmail(from_address, to_address, mail.as_string())

if status=={}:

    print("郵件傳送成功!")

else:

    print("郵件傳送失敗!",status)

smtp.quit()

------------------ end of coding -------------------

#注意smtp伺服器以及mail user設定,必須為可運作之有效系統

smtp=smtplib.SMTP_SSL('192.168.xx.xx', 465)

smtp_user = 'xxx@xxx.com.tw'

smtp_password = 'xxxxxxx'

------------------ recorded by linct ----------------

留言
avatar-img
linct的沙龍
76會員
279內容數
樂趣體驗紀錄,沙龍房間有歌唱,生活,科技
linct的沙龍的其他內容
2025/03/31
比爾·蓋茲於1999年出版的《數位神經系統》一書,至今仍具有參考價值。本文探討該書的核心概念,如何在當今的科技環境下應用數位神經系統,並提出一些需要調整的部分。
Thumbnail
2025/03/31
比爾·蓋茲於1999年出版的《數位神經系統》一書,至今仍具有參考價值。本文探討該書的核心概念,如何在當今的科技環境下應用數位神經系統,並提出一些需要調整的部分。
Thumbnail
2025/01/26
此程式利用批次檔(bat)結合vbscript,自動篩選Windows事件紀錄,並產生Excel報表,方便管理人員統計與分析系統事件。
Thumbnail
2025/01/26
此程式利用批次檔(bat)結合vbscript,自動篩選Windows事件紀錄,並產生Excel報表,方便管理人員統計與分析系統事件。
Thumbnail
2025/01/20
此程式 可將 CSV 檔案資料轉換並更新至 Excel 檔案,減少檔案大小並方便傳輸。程式可自訂 CSV、Excel 檔案路徑及更新範圍,多種儲存格式與應用場景,如讀取 TXT 檔案、保留 Excel 巨集公式及設定排程自動執行等。
Thumbnail
2025/01/20
此程式 可將 CSV 檔案資料轉換並更新至 Excel 檔案,減少檔案大小並方便傳輸。程式可自訂 CSV、Excel 檔案路徑及更新範圍,多種儲存格式與應用場景,如讀取 TXT 檔案、保留 Excel 巨集公式及設定排程自動執行等。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在日常生活和工作中,我們經常需要發送電子郵件來進行溝通和分享資訊。本文將介紹如何使用Python的pywin32模組連接到Outlook,並通過程式來自動發送郵件。
Thumbnail
在日常生活和工作中,我們經常需要發送電子郵件來進行溝通和分享資訊。本文將介紹如何使用Python的pywin32模組連接到Outlook,並通過程式來自動發送郵件。
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
 程式開發,功能 :               本程式執行後,自動寄出email,寄出的內容可依照讀取的參數檔內容而決定
Thumbnail
 程式開發,功能 :               本程式執行後,自動寄出email,寄出的內容可依照讀取的參數檔內容而決定
Thumbnail
這邊分三個部分:新增、檢視和寄送郵件給留言者。 新增 底下是HTML的輸入內容的程式碼: <table border="1"> <tr> <td><font size="2">姓名:</font></td> <td><input type="text" size="30"
Thumbnail
這邊分三個部分:新增、檢視和寄送郵件給留言者。 新增 底下是HTML的輸入內容的程式碼: <table border="1"> <tr> <td><font size="2">姓名:</font></td> <td><input type="text" size="30"
Thumbnail
你/妳很常要重複註冊同一個產品嗎?也許這個方式會有幫助。
Thumbnail
你/妳很常要重複註冊同一個產品嗎?也許這個方式會有幫助。
Thumbnail
工作日常中 Gmail 信箱總伴隨著海量信件與附件往返,有時候附件收到後都要再逐一上傳到公司內部雲端資料夾,或手動儲存到個人的雲端硬碟,方便未來查找與協作。現在只要 Gmail 信箱的信件包含附檔,NoCode 幫你自動同步儲存至 Google 雲端硬碟資料夾建檔,再也不用手動儲存或擔心遺忘建檔啦!
Thumbnail
工作日常中 Gmail 信箱總伴隨著海量信件與附件往返,有時候附件收到後都要再逐一上傳到公司內部雲端資料夾,或手動儲存到個人的雲端硬碟,方便未來查找與協作。現在只要 Gmail 信箱的信件包含附檔,NoCode 幫你自動同步儲存至 Google 雲端硬碟資料夾建檔,再也不用手動儲存或擔心遺忘建檔啦!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News