python給指定csv表格中的聯(lián)系人群發(fā)郵件(帶附件的郵件)
更新時間:2019年12月31日 13:23:04 作者:湯圓不是油條
這篇文章主要介紹了python給指定csv表格中的聯(lián)系人群發(fā)郵件,本文通過代碼講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
以下為使用python給指定路徑的csv表格中的聯(lián)系人群發(fā)帶附件的郵件(csv表格的第一列為聯(lián)系人姓名,第二列為聯(lián)系人郵箱賬號)的代碼,詳情見注釋。
import time
import csv #用于讀取收件人列表
import smtplib #用于發(fā)送郵件
from email.header import Header #Header用于構造郵件頭
from email.mime.text import MIMEText #MIMEText用于構造文本郵件
from email.mime.image import MIMEImage #MIMEImage用于構造圖片郵件
from email.mime.multipart import MIMEMultipart #MIMEMultipart用于構造復雜郵件(帶附件的郵件)
#收件人信息創(chuàng)建
def receive_info():
# 可以是一個列表,支持多個郵件地址同時發(fā)送,測試改成自己的郵箱地址
to_addrs = []
#to = input('請輸入收件人郵箱:')
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('開始輸入發(fā)件人信息...')
time.sleep(1)
try:
sender_mail = input('請輸入發(fā)件人郵箱:')
sender_pass = input('請輸入發(fā)件人郵箱授權碼(不要加空格):')#同樣是亂打的
smtp_server = 'smtp.qq.com' #郵箱服務器
time.sleep(1)
print('發(fā)件人信息錄入成功!')
except Exception as e:
print('發(fā)件人信息輸入失??!以下為失敗原因:')
print(e)
return sender_mail,sender_pass,smtp_server
#構造郵件
def mail_body(to):
# 設置總的郵件體對象,對象類型為mixed,可以構造帶附件的復雜郵件
msg_root = MIMEMultipart('mixed')
# 郵件添加的頭尾信息等
msg_root['From'] = Header(sender_mail)
msg_root['To'] = Header(receivers) #Header的參數(shù)不能為列表
# 郵件的主題,顯示在接收郵件的預覽頁面
subject = 'python sendemail test successful'
msg_root['subject'] = Header(subject, 'utf-8') #第一個參數(shù)為郵件主題,第二個參數(shù)為編碼方式
# 構造正文文本內容
text_info = 'hello world'
text_sub = MIMEText(text_info, 'plain', 'utf-8') #第一個參數(shù)為文本內容,第二個參數(shù)為格式(‘plain'為純文本,第三個參數(shù)為編碼方式)
msg_root.attach(text_sub)
# 構造超文本附件
url = "https://blog.csdn.net/m0_45654959"
html_info = """
<p>點擊以下鏈接,你會去向一個更大的世界</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') #超文本郵件體
# 如果不加下邊這行代碼的話,上邊的文本是不會正常顯示的,會把超文本的內容當做文本顯示
html_sub["Content-Disposition"] = 'attachment; filename="csdn.html"' #將超文本郵件體作為附件
# 把構造的內容(超文本附件)寫到郵件體中
msg_root.attach(html_sub)
# 構造圖片附件
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設為<image1>,只有一張圖片時此句可以省略
# 如果不加下邊這行代碼的話,會在收件方方面顯示亂碼的bin文件,下載之后也不能正常打開
image["Content-Disposition"] = 'attachment; filename="hua_ji.gif"'
#把構造的內容(圖片附件)寫入郵件體當中
msg_root.attach(image)
# 構造文本附件(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默認為application/octet-stream,此句可以不加
#以下代碼可以重命名附件為hello_world.txt
txt.add_header('Content-Disposition', 'attachment', filename='hello_world.txt')
#把構造的內容(文本附件)寫入郵件體當中
msg_root.attach(txt)
return msg_root
#郵件發(fā)送函數(shù)
def send_mail():
time.sleep(1)
print('開始發(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)
#調用主函數(shù),發(fā)送郵件
main()
總結
以上所述是小編給大家介紹的python給指定csv表格中的聯(lián)系人群發(fā)郵件,希望對大家有所幫助!
相關文章
python中實現(xiàn)精確的浮點數(shù)運算詳解
計算機智能處理可數(shù)集合的運算,但是全體實數(shù)是不可數(shù)的,所以計算機只能用一些奇怪的方法來擬合他,于是就產生了浮點數(shù)。下面這篇文章主要給大家介紹了關于python中實現(xiàn)精確浮點數(shù)運算的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2017-11-11
python中l(wèi)ogging模塊的一些簡單用法的使用
這篇文章主要介紹了python中l(wèi)ogging模塊的一些簡單用法的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-02-02
Python中使用Beautiful Soup庫的超詳細教程
這篇文章主要介紹了Python中使用Beautiful Soup庫的超詳細教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下2015-04-04
Django中的WebSocket實時通信的實現(xiàn)小結
在Django中,使用WebSocket可以實現(xiàn)實時通信,例如聊天應用、實時更新等,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-05-05

