新聞中心
Python3 SMTP發(fā)送郵件
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的鄄城網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進行了簡單的封裝。
Python創(chuàng)建 SMTP 對象語法如下:
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說明:
- host: SMTP 服務(wù)器主機。 你可以指定主機的ip地址或者域名如:runoob.com,這個是可選參數(shù)。
- port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號,一般情況下SMTP端口號為25。
- local_hostname: 如果SMTP在你的本機上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP對象使用sendmail方法發(fā)送郵件,語法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
參數(shù)說明:
- from_addr: 郵件發(fā)送者地址。
- to_addrs: 字符串列表,郵件發(fā)送地址。
- msg: 發(fā)送消息
這里要注意一下第三個參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時候,要注意msg的格式。這個格式就是smtp協(xié)議中定義的格式。
實例
以下是一個使用Python發(fā)送郵件簡單的實例:
實例
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
text
import
MIMEText
from
email
.
header
import
Header
sender
=
'
[email protected]
'
receivers
=
[
'
[email protected]
'
]
# 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
# 三個參數(shù):第一個為文本內(nèi)容,第二個 plain 設(shè)置文本格式,第三個 utf-8 設(shè)置編碼
message
=
MIMEText
(
'
Python 郵件發(fā)送測試...
'
,
'
plain
'
,
'
utf-8
'
)
message
[
'
From
'
]
=
Header
(
"
菜鳥教程
"
,
'
utf-8
'
)
# 發(fā)送者
message
[
'
To
'
]
=
Header
(
"
測試
"
,
'
utf-8
'
)
# 接收者
subject
=
'
Python SMTP 郵件測試
'
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: 無法發(fā)送郵件
"
)
我們使用三個引號來設(shè)置郵件信息,標準郵件需要三個頭部信息: From, To, 和 Subject ,每個信息直接使用空行分割。
我們通過實例化 smtplib 模塊的 SMTP 對象 smtpObj 來連接到 SMTP 訪問,并使用 sendmail 方法來發(fā)送信息。
執(zhí)行以上程序,如果你本機安裝sendmail,就會輸出:
$ python3 test.py 郵件發(fā)送成功
查看我們的收件箱(一般在垃圾箱),就可以查看到郵件信息:
如果我們本機沒有 sendmail 訪問,也可以使用其他服務(wù)商的 SMTP 訪問(QQ、網(wǎng)易、Google等)。
實例
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
text
import
MIMEText
from
email
.
header
import
Header
# 第三方 SMTP 服務(wù)
mail_host
=
"
smtp.XXX.com
"
#設(shè)置服務(wù)器
mail_user
=
"
XXXX
"
#用戶名
mail_pass
=
"
XXXXXX
"
#口令
sender
=
'
[email protected]
'
receivers
=
[
'
[email protected]
'
]
# 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
message
=
MIMEText
(
'
Python 郵件發(fā)送測試...
'
,
'
plain
'
,
'
utf-8
'
)
message
[
'
From
'
]
=
Header
(
"
菜鳥教程
"
,
'
utf-8
'
)
message
[
'
To
'
]
=
Header
(
"
測試
"
,
'
utf-8
'
)
subject
=
'
Python SMTP 郵件測試
'
message
[
'
Subject
'
]
=
Header
(
subject
,
'
utf-8
'
)
try
:
smtpObj
=
smtplib
.
SMTP
(
)
smtpObj
.
connect
(
mail_host
,
25
)
# 25 為 SMTP 端口號
smtpObj
.
login
(
mail_user
,
mail_pass
)
smtpObj
.
sendmail
(
sender
,
receivers
,
message
.
as_string
(
)
)
print
(
"
郵件發(fā)送成功
"
)
except
smtplib
.
SMTPException
:
print
(
"
Error: 無法發(fā)送郵件
"
)
使用Python發(fā)送HTML格式的郵件
Python發(fā)送HTML格式的郵件與發(fā)送純文本消息的郵件不同之處就是將MIMEText中_subtype設(shè)置為html。具體代碼如下:
實例
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
text
import
MIMEText
from
email
.
header
import
Header
sender
=
'
[email protected]
'
receivers
=
[
'
[email protected]
'
]
# 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
mail_msg
=
"""
Python 郵件發(fā)送測試...
"""
message
=
MIMEText
(
mail_msg
,
'
html
'
,
'
utf-8
'
)
message
[
'
From
'
]
=
Header
(
"
菜鳥教程
"
,
'
utf-8
'
)
message
[
'
To
'
]
=
Header
(
"
測試
"
,
'
utf-8
'
)
subject
=
'
Python SMTP 郵件測試
'
message
[
'
Subject
'
]
=
Header
(
subject
,
'
utf-8
'
)
try
:
smtpObj
=
smtplib
.
SMTP
(
'
localhost
'
)
smtpObj
.
sendmail
(
sender
,
receivers
,
message
.
as_string
(
)
)
(
"
郵件發(fā)送成功
"
)
except
smtplib
.
SMTPException
:
(
"
Error: 無法發(fā)送郵件
"
)
執(zhí)行以上程序,如果你本機安裝sendmail,就會輸出:
$ python3 test.py 郵件發(fā)送成功
查看我們的收件箱(一般在垃圾箱),就可以查看到郵件信息:
Python 發(fā)送帶附件的郵件
發(fā)送帶附件的郵件,首先要創(chuàng)建MIMEMultipart()實例,然后構(gòu)造附件,如果有多個附件,可依次構(gòu)造,最后利用smtplib.smtp發(fā)送。
實例
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
text
import
MIMEText
from
email
.
mime
.
multipart
import
MIMEMultipart
from
email
.
header
import
Header
sender
=
'
[email protected]
'
receivers
=
[
'
[email protected]
'
]
# 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
#創(chuàng)建一個帶附件的實例
message
=
MIMEMultipart
(
)
message
[
'
From
'
]
=
Header
(
"
菜鳥教程
"
,
'
utf-8
'
)
message
[
'
To
'
]
=
Header
(
"
測試
"
,
'
utf-8
'
)
subject
=
'
Python SMTP 郵件測試
'
message
[
'
Subject
'
]
=
Header
(
subject
,
'
utf-8
'
)
#郵件正文內(nèi)容
message
.
attach
(
MIMEText
(
'
這是菜鳥教程Python 郵件發(fā)送測試……
'
,
'
plain
'
,
'
utf-8
'
)
)
# 構(gòu)造附件1,傳送當(dāng)前目錄下的 test.txt 文件
att1
=
MIMEText
(
open
(
'
test.txt
'
,
'
rb
'
)
.
read
(
)
,
'
base64
'
,
'
utf-8
'
)
att1
[
"
Content-Type
"
]
=
'
application/octet-stream
'
# 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字
att1
[
"
Content-Disposition
"
]
=
'
attachment; filename="test.txt"
'
message
.
attach
(
att1
)
# 構(gòu)造附件2,傳送當(dāng)前目錄下的 runoob.txt 文件
att2
=
MIMEText
(
open
(
'
runoob.txt
'
,
'
rb
'
)
.
read
(
)
,
'
base64
'
,
'
utf-8
'
)
att2
[
"
Content-Type
"
]
=
'
application/octet-stream
'
att2
[
"
Content-Disposition
"
]
=
'
attachment; filename="runoob.txt"
'
message
.
attach
(
att2
)
try
:
smtpObj
=
smtplib
.
SMTP
(
'
localhost
'
)
smtpObj
.
sendmail
(
sender
,
receivers
,
message
.
as_string
(
)
)
print
(
"
郵件發(fā)送成功
"
)
except
smtplib
.
SMTPException
:
print
(
"
Error: 無法發(fā)送郵件
"
)
$ python3 test.py 郵件發(fā)送成功
查看我們的收件箱(一般在垃圾箱),就可以查看到郵件信息:
在 HTML 文本中添加圖片
郵件的 HTML 文本中一般郵件服務(wù)商添加外鏈是無效的,正確添加圖片的實例如下所示:
實例
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
image
import
MIMEImage
from
email
.
mime
.
multipart
import
MIMEMultipart
from
email
.
mime
.
text
import
MIMEText
from
email
.
header
import
Header
sender
=
'
[email protected]
'
receivers
=
[
'
[email protected]
'
]
# 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
msgRoot
=
MIMEMultipart
(
'
related
'
)
msgRoot
[
'
From
'
]
=
Header
(
"
菜鳥教程
"
,
'
utf-8
'
)
msgRoot
[
'
To
'
]
=
Header
(
"
測試
"
,
'
utf-8
'
)
subject
=
'
Python SMTP 郵件測試
'
msgRoot
[
'
Subject
'
]
=
Header
(
subject
,
'
utf-8
'
)
msgAlternative
=
MIMEMultipart
(
'
alternative
'
)
msgRoot
.
attach
(
msgAlternative
)
mail_msg
=
"""
Python 郵件發(fā)送測試...
圖片演示:
"""
msgAlternative
.
attach
(
MIMEText
(
mail_msg
,
'
html
'
,
'
utf-8
'
)
)
# 指定圖片為當(dāng)前目錄
fp
=
open
(
'
test.png
'
,
'
rb
'
)
msgImage
=
MIMEImage
(
fp
.
read
(
)
)
fp
.
close
(
)
# 定義圖片 ID,在 HTML 文本中引用
msgImage
.
add_header
(
'
Content-ID
'
,
'
'
)
msgRoot
.
attach
(
msgImage
)
try
:
smtpObj
=
smtplib
.
SMTP
(
'
localhost
'
)
smtpObj
.
sendmail
(
sender
,
receivers
,
msgRoot
.
as_string
(
)
)
(
"
郵件發(fā)送成功
"
)
except
smtplib
.
SMTPException
:
(
"
Error: 無法發(fā)送郵件
"
)
$ python3 test.py 郵件發(fā)送成功
查看我們的收件箱(如果在垃圾箱可能需要移動到收件箱才可正常顯示),就可以查看到郵件信息:
使用第三方 SMTP 服務(wù)發(fā)送
這里使用了 QQ 郵箱(你也可以使用 163,Gmail等)的 SMTP 服務(wù),需要做以下配置:
QQ 郵箱通過生成授權(quán)碼來設(shè)置密碼:
QQ 郵箱 SMTP 服務(wù)器地址:smtp.qq.com,ssl 端口:465。
以下實例你需要修改:發(fā)件人郵箱(你的QQ郵箱),密碼,收件人郵箱(可發(fā)給自己)。
QQ SMTP
#!/usr/bin/python3
import
smtplib
from
email
.
mime
.
text
import
MIMEText
from
email
.
utils
import
formataddr
my_sender
=
'
[email protected]
'
# 發(fā)件人郵箱賬號
my_pass
=
'
xxxxxxxxxx
'
# 發(fā)件人郵箱密碼
my_user
=
'
[email protected]
'
# 收件人郵箱賬號,我這邊發(fā)送給自己
def
mail
(
)
:
ret
=
True
try
:
msg
=
MIMEText
(
'
填寫郵件內(nèi)容
'
,
'
plain
'
,
'
utf-8
'
)
msg
[
'
From
'
]
=
formataddr
(
[
"
FromRunoob
"
,
my_sender
]
)
# 括號里的對應(yīng)發(fā)件人郵箱昵稱、發(fā)件人郵箱賬號
msg
[
'
To
'
]
=
formataddr
(
[
"
FK
"
,
my_user
]
)
# 括號里的對應(yīng)收件人郵箱昵稱、收件人郵箱賬號
msg
[
'
Subject
'
]
=
"
菜鳥教程發(fā)送郵件測試
"
# 郵件的主題,也可以說是標題
server
=
smtplib
.
SMTP_SSL
(
"
smtp.qq.com
"
,
465
)
# 發(fā)件人郵箱中的SMTP服務(wù)器,端口是25
server
.
login
(
my_sender
,
my_pass
)
# 括號中對應(yīng)的是發(fā)件人郵箱賬號、郵箱密碼
server
.
sendmail
(
my_sender
,
[
my_user
,
]
,
msg
.
as_string
(
)
)
# 括號中對應(yīng)的是發(fā)件人郵箱賬號、收件人郵箱賬號、發(fā)送郵件
server
.
quit
(
)
# 關(guān)閉連接
except
Exception
:
# 如果 try 中的語句沒有執(zhí)行,則會執(zhí)行下面的 ret=False
ret
=
False
return
ret
ret
=
mail
(
)
if
ret
:
print
(
"
郵件發(fā)送成功
"
)
else
:
print
(
"
郵件發(fā)送失敗
"
)
$ python test.py 郵件發(fā)送成功
發(fā)送成功后,登陸收件人郵箱即可查看:
更多內(nèi)容請參閱:。
本文標題:Python3SMTP發(fā)送郵件
轉(zhuǎn)載來于:http://fisionsoft.com.cn/article/dphpiso.html


咨詢
建站咨詢
