日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python實現(xiàn)自動發(fā)送郵件 -- 自動抓取博客/網(wǎng)站中留言的郵箱并發(fā)送相應

系統(tǒng) 2105 0

Python實現(xiàn)自動發(fā)送郵件 -- 自動抓取博客/網(wǎng)站中留言的郵箱并發(fā)送相應郵件

  • 背景
  • 腳本要解決的問題:
  • 實現(xiàn)方法
  • 代碼及解析
          • 1. AutoSendEmailByBlogComments.py
          • 2. FileOperation.py
          • 3. SendEmail.py
  • 備注:郵箱SMTP設置

背景

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

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

腳本要解決的問題:

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

實現(xiàn)方法

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

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

Python實現(xiàn)自動發(fā)送郵件 -- 自動抓取博客/網(wǎng)站中留言的郵箱并發(fā)送相應郵件_第2張圖片

代碼及解析

1. AutoSendEmailByBlogComments.py

負責抓取數(shù)據(jù),篩選出新郵件數(shù)據(jù),然后調度發(fā)送郵件。。。代碼如下:

            
              
                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
              
                )
              
              
                #我的博客網(wǎng)址
              
              
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() 寫入郵箱數(shù)據(jù)到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郵件數(shù)據(jù),然后通過smtplib 發(fā)送

            
              
                # coding:utf-8
              
              
                # smtplib模塊負責連接服務器和發(fā)送郵件
              
              
                # MIMEText:定義郵件的文字數(shù)據(jù)
              
              
                # MIMEImage:定義郵件的圖片數(shù)據(jù)
              
              
                # 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'
              
              
                # 我的郵箱,即發(fā)件人郵箱賬號
              
              
passwd 
              
                =
              
              
                ''
              
              
                #這里填的授權碼,注意不是郵箱密碼,這么Secret的數(shù)據(jù)當然隱去啦
              
              
mailserver 
              
                =
              
              
                'smtp.163.com'
              
              
port 
              
                =
              
              
                '25'
              
              
sub 
              
                =
              
              
                'CSDN資料密碼 By HowieXue'
              
              
                #用于郵箱的subject
              
              
                def
              
              
                SendEmailtoAddr
              
              
                (
              
              receive
              
                )
              
              
                :
              
              
                try
              
              
                :
              
              
		msg 
              
                =
              
               MIMEMultipart
              
                (
              
              
                'related'
              
              
                )
              
              
		msg
              
                [
              
              
                'From'
              
              
                ]
              
              
                =
              
               formataddr
              
                (
              
              
                [
              
              
                "Howie"
              
              
                ,
              
               sender
              
                ]
              
              
                )
              
              
                # 發(fā)件人郵箱昵稱、發(fā)件人郵箱賬號
              
              
		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誤判為垃圾郵件,圖片上是相關資料的網(wǎng)盤地址和密碼 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 ) # 發(fā)件人郵箱中的SMTP服務器,端口是25 server . login ( sender , passwd ) # 發(fā)件人郵箱賬號、郵箱密碼 server . sendmail ( sender , receive , msg . as_string ( ) ) # 發(fā)件人郵箱賬號、收件人郵箱賬號、發(fā)送郵件 server . quit ( ) return True except Exception as e : print ( e ) return False

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

發(fā)送的郵件是這樣的:
Python實現(xiàn)自動發(fā)送郵件 -- 自動抓取博客/網(wǎng)站中留言的郵箱并發(fā)送相應郵件_第4張圖片

備注:郵箱SMTP設置

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

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


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 海林市| 隆昌县| 崇仁县| 政和县| 澄城县| 贺兰县| 西城区| 四平市| 葫芦岛市| 盱眙县| 大港区| 亚东县| 黄梅县| 武清区| 大田县| 叶城县| 高青县| 威信县| 玉环县| 襄樊市| 环江| 齐齐哈尔市| 平阴县| 威远县| 弥勒县| 会东县| 岚皋县| 宽甸| 科技| 太保市| 三江| 营山县| 新蔡县| 青阳县| 顺平县| 西林县| 安丘市| 卢湾区| 当雄县| 林口县| 马关县|