亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應

系統 2134 0

Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件

  • 背景
  • 腳本要解決的問題:
  • 實現方法
  • 代碼及解析
          • 1. AutoSendEmailByBlogComments.py
          • 2. FileOperation.py
          • 3. SendEmail.py
  • 備注:郵箱SMTP設置
    • 其它好玩的Python腳本

背景

在各大論壇、博客上,很多User通過留言郵箱獲取相關資料,但是留言人數過多了,對于博主來說一個一個發送相關郵件太繁瑣了,同時也經常不能及時發現新評論,效率太低。。。我是個懶人, 這當然也不能忍,所以想到通過Python腳本將上述流程自動化。

例如我有一篇博客:嵌入式學習中較好的練手項目和課題整理(附代碼資料、學習視頻和嵌入式學習規劃),里面會分享很多資料,小伙伴們通過留言郵箱來獲取資料,通過這個Python腳本自動化將資料發送到各小伙伴們的郵箱中,非常方便,我再也不必要每天刷博客新留言,再手動點開郵箱發送郵件啦。

腳本要解決的問題:

腳本需要自動找到評論區中留言的 新郵箱 留言內容,然后將相關資料整合成一封郵件,通過SMTP發送到對方郵箱。注意是新郵箱,之前發送過的腳本當然不能再給人家發一次啦。
通過Python腳本各類成型的庫函數,就可以簡單完美的解決這類問題:

實現方法

實現方法大致就是:通過Python抓取我的Blog網頁中的評論數據,通過 正則表達式 篩選出網頁中的郵箱數據,并將發現的 新郵箱 寫入到文件中,然后將資料信息組成一封標準郵件,通過 SMTP 發送。

代碼目錄結構如下:
其中record.txt就是記錄所有新郵件的文件,
Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第1張圖片
最后將腳本打包成一個exe, 并通過Windows系統中的 TaskScheduler ,每天定時的調用該程序一次,那么,每天新留言的小伙伴,就能自動收到資料啦。

Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第2張圖片

代碼及解析

1. AutoSendEmailByBlogComments.py

負責抓取數據,篩選出新郵件數據,然后調度發送郵件。。。代碼如下:

            
              
                import
              
               time

              
                import
              
               urllib
              
                .
              
              request

              
                import
              
               re

              
                from
              
               SendEmail 
              
                import
              
               SendEmailtoAddr

              
                from
              
               FileOperation 
              
                import
              
               RecordEmail
              
                ,
              
               isNewEmail

HasNewEmail 
              
                =
              
              
                False
              
              
                def
              
              
                handleEmailAddr
              
              
                (
              
              EmailAddr
              
                )
              
              
                :
              
              
    isNew 
              
                =
              
               isNewEmail
              
                (
              
              EmailAddr
              
                )
              
              
                if
              
               isNew 
              
                ==
              
              
                True
              
              
                :
              
              
                print
              
              
                (
              
              
                'Get New Email addr:'
              
              
                +
              
               EmailAddr
              
                )
              
              
        isSuccess 
              
                =
              
               SendEmailtoAddr
              
                (
              
              EmailAddr
              
                )
              
              
                if
              
               isSuccess 
              
                ==
              
              
                True
              
              
                :
              
              
            RecordEmail
              
                (
              
              EmailAddr
              
                )
              
              
                global
              
               HasNewEmail
        	HasNewEmail 
              
                =
              
              
                True
              
              
                print
              
              
                (
              
              
                'Send email to '
              
              
                +
              
              EmailAddr
              
                +
              
              
                ': success!'
              
              
                )
              
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                'Send email to '
              
              
                +
              
              EmailAddr
              
                +
              
              
                ': Failed, Pls. retry...'
              
              
                )
              
              
                def
              
              
                SendEmailByBlogComments
              
              
                (
              
              url
              
                )
              
              
                :
              
              
    rsp 
              
                =
              
               urllib
              
                .
              
              request
              
                .
              
              urlopen
              
                (
              
              url
              
                )
              
              
    html 
              
                =
              
               rsp
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                "utf-8"
              
              
                )
              
              
                #以列表的形式返回所有匹配郵箱格式的子串
              
              
    emailList 
              
                =
              
               re
              
                .
              
              findall
              
                (
              
              
                "\w+@\w+\.\w+"
              
              
                ,
              
               html
              
                )
              
              
                print
              
              
                (
              
              
                'Get Email list from CSDN: '
              
              
                )
              
              
                print
              
              
                (
              
              emailList
              
                )
              
              
                for
              
               emailFromBlog 
              
                in
              
               emailList
              
                :
              
              
        handleEmailAddr
              
                (
              
              emailFromBlog
              
                )
              
              
                #我的博客網址
              
              
url 
              
                =
              
              
                "https://blog.csdn.net/howiexue/article/details/76696316#comments"
              
              


SendEmailByBlogComments
              
                (
              
              url
              
                )
              
              
                if
              
               HasNewEmail 
              
                ==
              
              
                False
              
              
                :
              
              
                print
              
              
                (
              
              
                "No New email found, do nothing... this window will close after 10s"
              
              
                )
              
              
                else
              
              
                :
              
              
                print
              
              
                (
              
              
                "Done! this window will close after 10s"
              
              
                )
              
              

time
              
                .
              
              sleep
              
                (
              
              
                10
              
              
                )
              
            
          
2. FileOperation.py

主要是做一些文件類的操作,RecordEmail() 寫入郵箱數據到record.txt、isNewEmail() 讀取record.txt判斷是否是新的郵箱。

            
              
                def
              
              
                RecordEmail
              
              
                (
              
              EmailAddr
              
                )
              
              
                :
              
              
    fileName
              
                =
              
              
                'record.txt'
              
              
                with
              
              
                open
              
              
                (
              
              fileName
              
                ,
              
              
                'a'
              
              
                )
              
              
                as
              
               record
              
                :
              
              
        record
              
                .
              
              write
              
                (
              
              EmailAddr
              
                +
              
              
                "\n"
              
              
                )
              
              
                def
              
              
                isNewEmail
              
              
                (
              
              EmailAddr
              
                )
              
              
                :
              
              
    fileName 
              
                =
              
              
                'record.txt'
              
              
                with
              
              
                open
              
              
                (
              
              fileName
              
                )
              
              
                as
              
               record
              
                :
              
              
        lines 
              
                =
              
               record
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              splitlines
              
                (
              
              
                )
              
              
                #print(lines)
              
              
                if
              
               EmailAddr 
              
                in
              
               lines
              
                :
              
              
                return
              
              
                False
              
              
                else
              
              
                :
              
              
                return
              
              
                True
              
            
          
3. SendEmail.py

這個文件主要是通過MIME來Build郵件數據,然后通過smtplib 發送

            
              
                # coding:utf-8
              
              
                # smtplib模塊負責連接服務器和發送郵件
              
              
                # MIMEText:定義郵件的文字數據
              
              
                # MIMEImage:定義郵件的圖片數據
              
              
                # MIMEMultipart:負責將文字圖片音頻組裝在一起添加附件
              
              
                import
              
               smtplib  
              
                # 加載smtplib模塊
              
              
                from
              
               email
              
                .
              
              mime
              
                .
              
              text 
              
                import
              
               MIMEText

              
                from
              
               email
              
                .
              
              utils 
              
                import
              
               formataddr

              
                from
              
               email
              
                .
              
              mime
              
                .
              
              application 
              
                import
              
               MIMEApplication

              
                from
              
               email
              
                .
              
              mime
              
                .
              
              image 
              
                import
              
               MIMEImage

              
                from
              
               email
              
                .
              
              mime
              
                .
              
              multipart 
              
                import
              
               MIMEMultipart

sender 
              
                =
              
              
                'howiexue@163.com'
              
              
                # 我的郵箱,即發件人郵箱賬號
              
              
passwd 
              
                =
              
              
                ''
              
              
                #這里填的授權碼,注意不是郵箱密碼,這么Secret的數據當然隱去啦
              
              
mailserver 
              
                =
              
              
                'smtp.163.com'
              
              
port 
              
                =
              
              
                '25'
              
              
sub 
              
                =
              
              
                'CSDN資料密碼 By HowieXue'
              
              
                #用于郵箱的subject
              
              
                def
              
              
                SendEmailtoAddr
              
              
                (
              
              receive
              
                )
              
              
                :
              
              
                try
              
              
                :
              
              
		msg 
              
                =
              
               MIMEMultipart
              
                (
              
              
                'related'
              
              
                )
              
              
		msg
              
                [
              
              
                'From'
              
              
                ]
              
              
                =
              
               formataddr
              
                (
              
              
                [
              
              
                "Howie"
              
              
                ,
              
               sender
              
                ]
              
              
                )
              
              
                # 發件人郵箱昵稱、發件人郵箱賬號
              
              
		msg
              
                [
              
              
                'To'
              
              
                ]
              
              
                =
              
               formataddr
              
                (
              
              
                [
              
              
                "BlogUser:"
              
              
                +
              
              receive
              
                ,
              
               receive
              
                ]
              
              
                )
              
              
                # 收件人郵箱昵稱、收件人郵箱賬號
              
              
		msg
              
                [
              
              
                'Subject'
              
              
                ]
              
              
                =
              
               sub

		
              
                #正文,html格式
              
              
		body 
              
                =
              
              
                """
		
                
                  資料密碼請查收,謝謝關注我的CSDN博客~    
                
                

博文地址:https://blog.csdn.net/HowieXue/article/details/76696316





Best Regards,

HowieXue(薛永浩)

send by script of Python3 ...

"""
#鏈接圖片,資料實際內容通過圖片顯示,這樣做為了避免163 Server誤判為垃圾郵件,圖片上是相關資料的網盤地址和密碼 text = MIMEText ( body , 'html' , 'utf-8' ) f = open ( r 'C:\**\password.png' , 'rb' ) #所插入的圖片 pic = MIMEImage ( f . read ( ) ) f . close ( ) pic . add_header ( 'Content-ID' , ' ' ) msg . attach ( text ) msg . attach ( pic ) rew = open ( r 'C:\**\reward.png' , 'rb' ) rewPic = MIMEImage ( rew . read ( ) ) rew . close ( ) rewPic . add_header ( 'Content-ID' , ' ' ) msg . attach ( rewPic ) server = smtplib . SMTP ( mailserver , port ) # 發件人郵箱中的SMTP服務器,端口是25 server . login ( sender , passwd ) # 發件人郵箱賬號、郵箱密碼 server . sendmail ( sender , receive , msg . as_string ( ) ) # 發件人郵箱賬號、收件人郵箱賬號、發送郵件 server . quit ( ) return True except Exception as e : print ( e ) return False

Record.txt內容是這樣的:
Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第3張圖片

發送的郵件是這樣的:
Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第4張圖片

備注:郵箱SMTP設置

要開啟郵箱的SMTP服務,才能通過第三方Client發送郵件,一般郵箱默認是關閉該服務的,需要打開,并設置授權碼。
針對·163郵箱,通過設置中修改:
Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第5張圖片

Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第6張圖片
同時開啟并設置客戶端授權碼(在腳本中連接郵箱用):
Python實現自動發送郵件 -- 自動抓取博客/網站中留言的郵箱并發送相應郵件_第7張圖片

其它好玩的Python腳本

Python實現自動發送郵件 --自動抓取博客/網站中留言的郵箱并發送相應郵件
Python自動生成代碼 - 通過tkinter圖形化操作并生成代碼框架
Python解析CSV數據 - 通過Pandas解析邏輯分析儀導出的CSV數據


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产一级影院 | 亚洲精品国产第一区二区尤物 | 黄色片网站在线观看 | 国产精品久久久久久久久久久搜索 | 激情奇米网 | 四虎影视在线免费观看 | 日韩欧美二区在线观看 | 欧美一级片免费在线观看 | 国产亚洲精品一区999 | 久久婷婷丁香七月色综合 | 一级毛片免费视频观看 | 日韩免费在线 | 97福利视频在线观看 | 四虎影院一级片 | 午夜性福 | 欧美日韩国产高清精卡 | 欧美日韩精品一区二区三区 | 国产精品天天影视久久综合网 | 亚洲黄色免费在线观看 | 久久综合五月天 | 亚洲综合网站 | 久久久久久麻豆 | 日韩精品福利视频一区二区三区 | 在线精品欧美 | 欧洲一级毛片免费 | 看个毛片 | 日本免费黄色小视频 | 波多野结衣一区二区 三区 波多野结衣一区二区三区 波多野结衣一区二区三区高清在线 | 最新日本中文字幕 | 天天干天天添 | 四虎国产精品免费久久影院 | 色视频在线 | 亚洲综合精品一二三区在线 | 青久草视频 | 国产香蕉一区二区在线观看 | 丁香婷婷网 | 日本一级片免费观看 | 幻女bbwxxxxyounu | 欧美日韩日本国产 | 免费的爱爱视频 | 最新国产在线视频 |