1. 程式人生 > >python腳本連續發送QQ郵件

python腳本連續發送QQ郵件

pass 占用內存 googl password 讀取 比較 pen gin toa

今天習得用python寫一個連續發送QQ郵件的腳本,經過測試,成功給國內外的服務器發送郵件,包括QQ郵箱、163郵箱、google郵箱,香港科技大學的郵箱和愛丁堡大學的郵箱。一下逐步解答相關技巧。

首先,執行如下操作,__init__ 標誌該文件夾是一個python程序包

$mkdir automail
$cd automail
$gedit qqmail
$touch __init__

打開 qqmail ,寫入如下代碼。

 1 #-*- coding: utf -8 -*-
 2 import sys, os, re, urllib, urlparse
 3 import smtplib
4 import traceback 5 from email.mime.text import MIMEText 6 from email.mime.multipart import MIMEMultipart 7 8 def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password): 9 ‘‘‘ 10 @subject:郵件主題 11 @msg:郵件內容 12 @toaddrs:收信人的郵箱地址 13 @fromaddr:發信人的郵箱地址 14 @smtpaddr:smtp服務地址,可以在郵箱看,比如163郵箱為smtp.163.com
15 @password:發信人的郵箱密碼 16 ‘‘‘ 17 mail_msg = MIMEMultipart() 18 if not isinstance(subject,unicode): 19 subject = unicode(subject, utf-8) 20 mail_msg[Subject] = subject 21 mail_msg[From] = fromaddr 22 mail_msg[To] = toaddrs 23 mail_msg.attach(MIMEText(msg,
plain, utf-8)) 24 #mail_msg.attach(MIMEText(msg, ‘html‘, ‘utf-8‘)) 25 try: 26 s = smtplib.SMTP() 27 s.connect(smtpaddr) #連接smtp服務器 28 s.login(fromaddr,password) #登錄郵箱 29 s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #發送郵件 30 print "mail sent to %s succeed!" % (toaddrs) 31 s.quit() 32 except Exception,e: 33 print "Error: unable to send email to %s!" % (toaddrs) 34 print traceback.format_exc() 35 36 if __name__ == __main__: 37 fromaddr = "[email protected]" 38 smtpaddr = "smtp.qq.com" 40 subject = "Robio2018" 41 password = "svwpwgunhrbpbjha" 42 file_object = open(letter) 43 msg = file_object.read() 44 file_object.close() 45 for toaddrs in open("namelist"): 46 prof = toaddrs 47 sendmail(subject,msg,prof,fromaddr,smtpaddr,password)

代碼解讀:

  • import email
    import smtplib

    SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純文本郵件HTML郵件以及帶附件的郵件。Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。

  • def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

    最核心的代碼就是該函數,正確填寫該函數的實參、設置郵箱允許第三方操作。

  • mail_msg.attach(MIMEText(msg, plain, utf-8))

    第23行,第一個參數是郵件正文內容;第二個參數 ‘plain‘ ,因為我們發送的是純文本的郵件;第三個參數保證多語言的兼容性。關於發送多種類型的郵件,可以參考廖雪峰老師的教程。

  • file_object = open(letter)
    msg = file_object.read()
    file_object.close()

    代碼42-44,打開與腳本處於同一個路徑中的letter文檔,讀取全部內容並存儲於一個大型的msg字符串中,及時關閉該文檔,不然會一直占用內存。如果每次都要手動關閉比較麻煩,python有一個with 關鍵字可以自動關閉文檔,請自行百度。

  • for toaddrs in open("namelist")

    第45行,使用一個for循環逐行從收件人郵箱列表中讀取收件人郵箱。

python腳本連續發送QQ郵件