您好,登錄后才能下訂單哦!
以下為使用python給指定路徑的csv表格中的聯(lián)系人群發(fā)帶附件的郵件(csv表格的第一列為聯(lián)系人姓名,第二列為聯(lián)系人郵箱賬號(hào))的代碼,詳情見(jiàn)注釋。
import time import csv #用于讀取收件人列表 import smtplib #用于發(fā)送郵件 from email.header import Header #Header用于構(gòu)造郵件頭 from email.mime.text import MIMEText #MIMEText用于構(gòu)造文本郵件 from email.mime.image import MIMEImage #MIMEImage用于構(gòu)造圖片郵件 from email.mime.multipart import MIMEMultipart #MIMEMultipart用于構(gòu)造復(fù)雜郵件(帶附件的郵件) #收件人信息創(chuàng)建 def receive_info(): # 可以是一個(gè)列表,支持多個(gè)郵件地址同時(shí)發(fā)送,測(cè)試改成自己的郵箱地址 to_addrs = [] #to = input('請(qǐng)輸入收件人郵箱:') with open('收件人郵箱.csv','r',encoding='utf-8') as f: reader = csv.reader(f) try: for row in reader: to_addrs.append(row[1]) print('收件人信息讀取完畢!') time.sleep(1) print('以下為收件人郵箱列表:\n',to_addrs) receivers = ','.join(to_addrs) except Exception as e: print('讀取收件人信息失敗!原因如下:') print(e) return to_addrs,receivers #發(fā)件人信息創(chuàng)建 def send_info(): print('開(kāi)始輸入發(fā)件人信息...') time.sleep(1) try: sender_mail = input('請(qǐng)輸入發(fā)件人郵箱:') sender_pass = input('請(qǐng)輸入發(fā)件人郵箱授權(quán)碼(不要加空格):')#同樣是亂打的 smtp_server = 'smtp.qq.com' #郵箱服務(wù)器 time.sleep(1) print('發(fā)件人信息錄入成功!') except Exception as e: print('發(fā)件人信息輸入失??!以下為失敗原因:') print(e) return sender_mail,sender_pass,smtp_server #構(gòu)造郵件 def mail_body(to): # 設(shè)置總的郵件體對(duì)象,對(duì)象類(lèi)型為mixed,可以構(gòu)造帶附件的復(fù)雜郵件 msg_root = MIMEMultipart('mixed') # 郵件添加的頭尾信息等 msg_root['From'] = Header(sender_mail) msg_root['To'] = Header(receivers) #Header的參數(shù)不能為列表 # 郵件的主題,顯示在接收郵件的預(yù)覽頁(yè)面 subject = 'python sendemail test successful' msg_root['subject'] = Header(subject, 'utf-8') #第一個(gè)參數(shù)為郵件主題,第二個(gè)參數(shù)為編碼方式 # 構(gòu)造正文文本內(nèi)容 text_info = 'hello world' text_sub = MIMEText(text_info, 'plain', 'utf-8') #第一個(gè)參數(shù)為文本內(nèi)容,第二個(gè)參數(shù)為格式(‘plain'為純文本,第三個(gè)參數(shù)為編碼方式) msg_root.attach(text_sub) # 構(gòu)造超文本附件 url = "https://blog.csdn.net/m0_45654959" html_info = """ <p>點(diǎn)擊以下鏈接,你會(huì)去向一個(gè)更大的世界</p> <p><a href="%s" rel="external nofollow" >click me</a></p> <p>i am very galsses for you</p> """% url html_sub = MIMEText(html_info, 'html', 'utf-8') #超文本郵件體 # 如果不加下邊這行代碼的話,上邊的文本是不會(huì)正常顯示的,會(huì)把超文本的內(nèi)容當(dāng)做文本顯示 html_sub["Content-Disposition"] = 'attachment; filename="csdn.html"' #將超文本郵件體作為附件 # 把構(gòu)造的內(nèi)容(超文本附件)寫(xiě)到郵件體中 msg_root.attach(html_sub) # 構(gòu)造圖片附件 image_file = open(r'D:\Anaconda\programm_my\little_programm\test.gif', 'rb').read() image = MIMEImage(image_file) #圖片郵件體 image.add_header('Content-ID', '<image1>') #將圖片在郵件中的目錄ID設(shè)為<image1>,只有一張圖片時(shí)此句可以省略 # 如果不加下邊這行代碼的話,會(huì)在收件方方面顯示亂碼的bin文件,下載之后也不能正常打開(kāi) image["Content-Disposition"] = 'attachment; filename="hua_ji.gif"' #把構(gòu)造的內(nèi)容(圖片附件)寫(xiě)入郵件體當(dāng)中 msg_root.attach(image) # 構(gòu)造文本附件(base64數(shù)據(jù)流) txt_file = open(r'D:\Anaconda\programm_my\little_programm\hello_word.txt', 'rb').read() txt = MIMEText(txt_file, 'base64', 'utf-8') txt["Content-Type"] = 'application/octet-stream' #Content-Type默認(rèn)為application/octet-stream,此句可以不加 #以下代碼可以重命名附件為hello_world.txt txt.add_header('Content-Disposition', 'attachment', filename='hello_world.txt') #把構(gòu)造的內(nèi)容(文本附件)寫(xiě)入郵件體當(dāng)中 msg_root.attach(txt) return msg_root #郵件發(fā)送函數(shù) def send_mail(): time.sleep(1) print('開(kāi)始發(fā)送郵件...') try: server =smtplib.SMTP_SSL(smtp_server)#QQ郵箱采用SSL方式加密;僅在python3.7中才需要給smtplib.SMPT_SSL()方法傳入發(fā)件人郵箱地址參數(shù) server.connect(smtp_server,465) server.login(sender_mail, sender_pass) server.sendmail(sender_mail, to_addrs, msg.as_string()) server.quit() print('恭喜你!郵件發(fā)送成功!') except Exception as e: print('郵件發(fā)送失?。∫韵聻槭≡颍?) print(e) #主函數(shù): def main(): send_mail() if __name__ == '__main__': #初始化收件人、發(fā)件人、郵件體數(shù)據(jù) to_addrs,receivers = receive_info() sender_mail,sender_pass,smtp_server = send_info() msg = mail_body(to_addrs) #調(diào)用主函數(shù),發(fā)送郵件 main()
總結(jié)
以上所述是小編給大家介紹的python給指定csv表格中的聯(lián)系人群發(fā)郵件,希望對(duì)大家有所幫助!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。