python 小白之群發郵件下篇

2021-10-09 23:05:48 字數 3323 閱讀 1663

2023年10月3日 大風大雨,一夜入冬了

試著對擴大你所接觸的人的視野,你將會發現同時也擴大了你自己對生命的展望

我記得老科說過一句話,其他任何人對我的期待再怎麼高,也高不過我對自己的期望(共勉)

昨天晚上和老媽聊了職業規劃,現實與無價的夢想

體制內不好進,但是也願意一試,各有優劣,就是昨天改bug時腦仁疼,不知道什麼時候是個頭,突然有的想法,我熱愛我的家鄉華中地區,但是我若選擇新疆或者境外,這種工作地點,父母同樣能陪伴和移居,那種毅然決然真的很感動

我是希望自己有進體制內的果敢,也有離開體制內的能力

我在忙忙著給30歲的自己準備禮物

接昨天未解決的問題

如果你的python版本是3.7,很可能發生這種報錯。因為python 3.7修改了ssl.py,導致smtplib.smtp_ssl也連帶產生了問題,

可使用下列**解決

# 改動這句**

server = smtplib.smtp_ssl()

# 在括號內加入host引數

server = smtplib.smtp_ssl(smtp_server)

加入host引數後,這個問題應該就迎刃而解了

如果你用的是qq以外的其他郵箱,也可能會出現一種報錯

比如利用我的企業郵箱的話,就會出現如下報錯資訊:smtplib.smtpexception: no suitable authentication method found搜尋後,

我們很快就會發現,解決方案是:在登入(login)之前呼叫starttls()方法就可以了。也就是在**中加入這樣一行:

server.starttls()
接下來,豐富一下郵件內容

郵件頭(header,沒錯它也叫header)是這一塊區域,包括主題、發件人、收件人等資訊:

from email.header import header

msg['from'] = header('from address')

msg['to'] = header('to adress')

當正文需要換行時

text= nice to meet you, and ,,,,,,,a long story

msg=(text,'plain','utf-8')

出於保護隱私的目的,我們可以把收發件人,和授權碼這些資訊用input()變成需要輸入的模式

例如

# 發信方的資訊:發信郵箱,qq郵箱授權碼)

password = input('請輸入郵箱授權碼:')

# 收信方郵箱

當你已經獲得完整傳送郵件的技能

接下來就要考慮**郵件啦

主要有三種**方式

設定乙個列表形式的變數

用while迴圈

呼叫csv模組

一,是將收件人信箱的變數設定成乙個可以裝多個內容的列表:

to_addrs = ['[email protected]','[email protected]']
需要注意的是,to_addrs變數也將作為引數被傳入header方法中:

msg['to'] = header(to_addrs)
直接執行程式的話會發生報錯

因為header接受的第乙個引數的資料型別必須要是字串或者位元組(bytes或者str),列表不能解碼

所以這裡將「to_addrs」變成乙個字串

msg['to']=header(",".join(to_addrs))
join()函式,它的功能是把字串合併

join()的用法是str.join(sequence),str代表在這些字串之中你要用什麼字串來連線,你可以用逗號,空格,下劃線等等。要將列表的元素合併,當然我們就直接使用逗號來連線了

to_addrs = ['[email protected]','[email protected]']

print(type(['[email protected]','[email protected]']))

print(type(",".join(to_addrs)))

第二種方法是採用詢問「是否繼續輸入郵箱位址」的方式,並用while迴圈來實現多個收件人的功能。

由於我們要儲存輸入的內容,供發郵件的時候使用。所以需要定義乙個空列表to_addrs,用來存放收件人郵箱位址。

輸入郵箱位址的時候,位址會被追加寫進列表。

因為迴圈次數不固定,所以我們選擇while迴圈來做。我的這段**是這樣的,加了乙個print()函式來確認結果:

to_addrs=

while true:

a=input('[email protected]')

b=input('是否繼續輸入,n退出,任意鍵繼續')

if b=='n':10

break

print(to_addrs)

第三種方法

將收件人郵箱寫入csv檔案,在發郵件時讀取csv檔案引入csv模組;

提供需要寫入csv檔案的資料,

建檔案並寫入。

import csv

data=[['zhenzhen','zhenzhen.qq.com'],['haohao','haohao.qq.com']]

with open('to_addrs.csv','w',newline=' ') as f:

writer=csv.writer(f)

for row in data:

writer.writerow(row)

第一行,引入模組。第四行是等待寫入csv檔案的資料。但是我們沒有這樣的檔案,所以還需要新建乙個to_addrs.csv檔案。

我們使用的是with語句新建檔案,這樣做的好處是:到達語句末尾時,會自動關閉檔案,不需要close()。緊接著,我們定義了乙個變數writer進行寫入,將剛才的檔案變數傳進來。之後就是進行資料寫入,寫入的方法是writerow()。

通過遍歷列表data將資料一行行寫到了to_addrs.csv檔案中。

with open('to_addrs.csv', 'r') as f:

reader = csv.reader(f)

for row in reader:

to_addrs=row[1]

啊~今日早更完,晚安

python 自動群發郵件

生活中我們經常傳送郵件,那麼我們能不能用python寫乙個自動傳送郵件的功能呢?答案是肯定的!開始實現功能之前我們需要開啟我們郵箱的 imap smtp功能,我們先了解一下什麼是imap smtp。smtp的全稱是 mail transfer protocol 即簡單郵件傳輸協議。它是一組用於從源位...

Python群發郵件 練習

我的python 學習筆記,練習題 在輸入乙個收件郵箱結束後,彈出輸入框詢問使用者是否需要繼續輸入郵箱,如果需要輸入收件郵箱,按其他按鍵繼續 如果不再需要輸入收件郵箱,那直接按n退出,開始傳送郵件。from email import encoders encoders 編碼器 from email....

用Python實現群發郵件

用python實現 郵件 要實現用python 郵件功能,需要用到 email 和 smtplib 這兩個模組.前者用來構建郵件內容 後者用來傳送郵件 匯入模組 import smtplib from email.mime.text import mimetext 定義變數 發件人資訊 發件郵箱,q...