新聞詳情
python教程—— SMTP發(fā)送郵件發(fā)表時(shí)間:2023-05-24 17:35 SMTP(Simple Mail Transfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來(lái)控制信件的中轉(zhuǎn)方式。 python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡(jiǎn)單的封裝。 Python創(chuàng)建 SMTP 對(duì)象語(yǔ)法如下: import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] ) 參數(shù)說(shuō)明: host: SMTP 服務(wù)器主機(jī)。 你可以指定主機(jī)的ip地址或者域名如:runoob.com,這個(gè)是可選參數(shù)。 port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號(hào),一般情況下SMTP端口號(hào)為25。 local_hostname: 如果SMTP在你的本機(jī)上,你只需要指定服務(wù)器地址為 localhost 即可。 Python SMTP對(duì)象使用sendmail方法發(fā)送郵件,語(yǔ)法如下: SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options] 參數(shù)說(shuō)明: from_addr: 郵件發(fā)送者地址。 to_addrs: 字符串列表,郵件發(fā)送地址。 msg: 發(fā)送消息 這里要注意一下第三個(gè)參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時(shí)候,要注意msg的格式。這個(gè)格式就是smtp協(xié)議中定義的格式。 實(shí)例 以下是一個(gè)使用Python發(fā)送郵件簡(jiǎn)單的實(shí)例: 實(shí)例 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Header sender = 'from@runoob.com' receivers = ['429240967@qq.com'] # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱 # 三個(gè)參數(shù):第一個(gè)為文本內(nèi)容,第二個(gè) plain 設(shè)置文本格式,第三個(gè) utf-8 設(shè)置編碼 message = MIMEText('Python 郵件發(fā)送測(cè)試...', 'plain', 'utf-8') message['From'] = Header("菜鳥教程", 'utf-8') # 發(fā)送者 message['To'] = Header("測(cè)試", 'utf-8') # 接收者 subject = 'Python SMTP 郵件測(cè)試' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print ("郵件發(fā)送成功") except smtplib.SMTPException: print ("Error: 無(wú)法發(fā)送郵件") 我們使用三個(gè)引號(hào)來(lái)設(shè)置郵件信息,標(biāo)準(zhǔn)郵件需要三個(gè)頭部信息: From, To, 和 Subject ,每個(gè)信息直接使用空行分割。 我們通過(guò)實(shí)例化 smtplib 模塊的 SMTP 對(duì)象 smtpObj 來(lái)連接到 SMTP 訪問,并使用 sendmail 方法來(lái)發(fā)送信息。 執(zhí)行以上程序,如果你本機(jī)安裝sendmail,就會(huì)輸出: $ python3 test.py 郵件發(fā)送成功 |