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

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

系統(tǒng) 2275 0

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

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

背景

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

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

腳本要解決的問題:

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

實(shí)現(xiàn)方法

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

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

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

代碼及解析

1. AutoSendEmailByBlogComments.py

負(fù)責(zé)抓取數(shù)據(jù),篩選出新郵件數(shù)據(jù),然后調(diào)度發(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

這個(gè)文件主要是通過MIME來Build郵件數(shù)據(jù),然后通過smtplib 發(fā)送

            
              
                # coding:utf-8
              
              
                # smtplib模塊負(fù)責(zé)連接服務(wù)器和發(fā)送郵件
              
              
                # MIMEText:定義郵件的文字?jǐn)?shù)據(jù)
              
              
                # MIMEImage:定義郵件的圖片數(shù)據(jù)
              
              
                # MIMEMultipart:負(fù)責(zé)將文字圖片音頻組裝在一起添加附件
              
              
                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ā)件人郵箱賬號(hào)
              
              
passwd 
              
                =
              
              
                ''
              
              
                #這里填的授權(quán)碼,注意不是郵箱密碼,這么Secret的數(shù)據(jù)當(dāng)然隱去啦
              
              
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ā)件人郵箱賬號(hào)
              
              
		msg
              
                [
              
              
                'To'
              
              
                ]
              
              
                =
              
               formataddr
              
                (
              
              
                [
              
              
                "BlogUser:"
              
              
                +
              
              receive
              
                ,
              
               receive
              
                ]
              
              
                )
              
              
                # 收件人郵箱昵稱、收件人郵箱賬號(hào)
              
              
		msg
              
                [
              
              
                'Subject'
              
              
                ]
              
              
                =
              
               sub

		
              
                #正文,html格式
              
              
		body 
              
                =
              
              
                """
		
                
                  資料密碼請(qǐng)查收,謝謝關(guān)注我的CSDN博客~    
                
                

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





Best Regards,

HowieXue(薛永浩)

send by script of Python3 ...

"""
#鏈接圖片,資料實(shí)際內(nèi)容通過圖片顯示,這樣做為了避免163 Server誤判為垃圾郵件,圖片上是相關(guān)資料的網(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服務(wù)器,端口是25 server . login ( sender , passwd ) # 發(fā)件人郵箱賬號(hào)、郵箱密碼 server . sendmail ( sender , receive , msg . as_string ( ) ) # 發(fā)件人郵箱賬號(hào)、收件人郵箱賬號(hào)、發(fā)送郵件 server . quit ( ) return True except Exception as e : print ( e ) return False

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

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

備注:郵箱SMTP設(shè)置

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

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

其它好玩的Python腳本

Python實(shí)現(xiàn)自動(dòng)發(fā)送郵件 --自動(dòng)抓取博客/網(wǎng)站中留言的郵箱并發(fā)送相應(yīng)郵件
Python自動(dòng)生成代碼 - 通過tkinter圖形化操作并生成代碼框架
Python解析CSV數(shù)據(jù) - 通過Pandas解析邏輯分析儀導(dǎo)出的CSV數(shù)據(jù)


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 旬阳县| 石嘴山市| 榆树市| 泾源县| 大同县| 海阳市| 诏安县| 茶陵县| 夏邑县| 郎溪县| 灯塔市| 宁夏| 乾安县| 太保市| 银川市| 楚雄市| 长兴县| 北川| 如皋市| 云南省| 柏乡县| 石首市| 仁布县| 晋州市| 东丰县| 黄平县| 南投市| 镇远县| 洛南县| 翁源县| 正安县| 崇左市| 江津市| 浠水县| 开封县| 南京市| 自贡市| 江陵县| 高陵县| 朝阳县| 兖州市|