一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python實現郵件發送功能

python實現郵件發送功能

2021-10-21 09:08小黑and小白 Python

這篇文章主要為大家詳細介紹了python實現郵件發送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

什么是POP3、SMTP和MAP?

POP3是Post Office Protocol 3的簡稱,即郵局協議的第三個版本,他是規定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的協議。它是因特網電子郵件的第一個離線協議的標準。POP3允許用戶從服務器上把郵件存儲到本地計算機上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協議的接受郵件服務器,用來接受電子郵件。

SMTP的全稱是Simple Mail Transfer Protocol,即簡單的郵件傳輸協議。它是一組用于從源地址到目的地的地址傳輸郵件的規范,通過它控制郵件的中轉方式。SMTP協議屬于TCP/IP協議簇,它幫助每臺計算機在發送或者中轉信件時找到下個目的地。SMTP服務器就是遵循SMTP協議的發送郵件服務器。

SMTP認證,簡單來說就是要求必須在提供了賬戶名和密碼之后才能登陸SMTP服務器。

IMAP全稱是Iternet Mail Access Protocol,即交互式郵件存取協議,它是跟POP3類似的郵件訪問標準協議之一。不同的是,開啟了IMAP后,你在電子郵件客戶端收取的郵件仍然保存在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件、標記郵件等,服務器上的郵件也會做相應的動作。無論從瀏覽器登陸還是客戶端登陸郵箱看到的郵件以及狀態都是一致的。

我們使用網易的163郵箱來發送郵件,所以我們需要先將163郵箱的POP3/SMTP/IMAP都給打開。

具體步驟是:設置->POP3/SMTP/IMAP->設置POP3/SMTP/IMAP,點擊復選框時郵箱會要求你設置授權碼,設置授權碼,然后一定要將授權碼給記住,后面會用到。郵箱設置好后我們就開始編寫代碼發送郵件。

首先引入我們需要導入的庫及包

?
1
2
3
4
5
6
import smtplib
import email
# MIME 多郵件擴充協議
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

然后設置郵箱的域名,端口,發送者郵箱,接收者郵箱

?
1
2
3
4
5
host = 'smtp.163.com' # 使用163郵箱
port = '465' # 163郵箱服務器的端口號
sender = '[email protected]' # 發送者的郵箱
password = 'xxxxxx' # 授權碼
receiver = 'xxxxxx' # 接收者的郵箱,可以為其他類型的郵箱,如果是多個接收者請傳入列表

接下來構建文本郵箱的主體

?
1
2
3
4
5
6
7
8
?body = 'xxx' # 你要發送的郵件的內容
subject = 'xxx' # 你要發送的郵件的標題
 
# plain表示郵件內容的類型,文本類型默認是plain。utf-8表示內容的編碼格式。
message = MIMEText(body, 'plain', 'utf-8')
message['From'] = sender # 發送者
message['To'] = receiver # 接收者
message['Subject'] = subject # 郵件標題

接下來我們獲取SMTP協議的證書,登陸我們的郵箱發送郵件

?
1
2
3
4
5
6
7
8
# 獲取SMTP協議證書
email_clint = smtplib.SMTP_SSL(host, port)
# 登陸郵箱,這里也是用授權碼登陸郵箱的
login_result = email_clint.login(sender, password)
# 發送郵件
email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string())
# 關閉郵件發送客戶端
email_client.close()

其實這里我們可以打印login_result,如果返回的狀態碼是235則證明郵件發送成功。

下面是發送文本郵件的全部代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import email
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
 
class SendEmail(object):
 def __init__(self):
 self.host = 'smtp.163.com'
 self.port = '465'
 self.sender = '[email protected]'
 self.password = 'xxxxxx'
 
 def send_email(self, receiver, subject='', body=''):
 message = MIMEText(body, 'plain', 'utf-8')
 message['From'] = self.sender
 message['To'] = receiver
 message['Subject'] = subject
 
 try:
  email_clint = smtplib.SMTP_SSL(self.host, self.port)
  print('獲取證書成功')
  login_result = email_clint.login(self.sender, self.password)
  print('開始登陸')
  if login_result[0] == 235:
  print('登陸成功')
  email_clint.sendmail(self.sender, receiver, message.as_string())
  print('郵件發送成功')
  else:
  print('登陸失敗')
 except Exception as e:
  print('發生錯誤', e)

下面介紹發送HTML格式內容的郵件以及向郵件內容中添加圖片。

其實發送HTML格式內容的郵件很簡單,只需將發送郵件的內容格式改為html就行了,像這樣

?
1
message = MIMEText('<h2 style="color">學習使我快樂</h2>', 'html', 'utf-8')

還有使用內嵌的方法向郵件內容中加入文本或者圖片

?
1
2
# related 表示使用內嵌資源的形式,將郵件發送給對方
message = MIMEMultipart('related')

然后向郵件中添加內容,如果把圖片嵌入到郵件正文中只需在HTML中通過引用src="cid:x"即可。x代表圖片的編號可以是數字也可是是字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ---------------發送文本-----------------
message_html = MIMEText('<h2 style="color:red;font-size:100px">學習使我快樂</h2><img src="cid:small">','html','utf-8')
# 將郵件內容 裝入到郵件信息當中去
message.attach(message_html)
# ---------------發送圖片-----------------
# rb 讀取二進制文件(圖片是二進制文件)
image_data = open('1.gif','rb')
# 設置讀取獲取的二進制數據
message_image = MIMEImage(image_data.read())
# 關閉剛才打開的文件
image_data.close()
message_image.add_header('Content-ID','small')
# 添加圖片文件到郵件信息當中去
message.attach(message_image)

然后構建郵件的主體,發送郵件即可

?
1
2
3
4
5
6
7
8
message['From'] = sender # 發送者
message['To'] = receiver # 接收者
message['Subject'] = subject # 郵件標題
?
email_clint = smtplib.SMTP_SSL(host, port)
login_result = email_clint.login(sender, password)
email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string())
email_client.close()

我們經常會向郵件中添加附件,下面介紹添加附件的方式

添加附件也是使用內嵌的方式添加的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 對二進制文件需要設置默認的編碼形式
# 對于MIMEText()來說 默認的編碼形式就是base64
# 如果對于二進制文件來說 沒有設置base64進行編碼 則附件的就會呈現亂碼
# --------------------添加圖片附件----------------------
message_image = MIMEText(open('1.gif','rb').read(),'base64','utf-8')
# 設置附件在郵件中的名字
message_image['Content-disposition'] = 'attachment;filename="happy.gif"'
message.attach(message_image)
 
# --------------------添加xlsx表格附件---------------
message_xlsx = MIMEText(open('table.xlsx','rb').read(),'base64','utf-8')
# 設置附件在郵件當中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test.xlsx"'
message.attach(message_xlsx)

然后發送郵件即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_38684419/article/details/81569019

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 暖暖视频免费观看视频中国.韩剧 | 男女一级特黄a大片 | 日本视频高清免费观看xxx | 国产xxxxxx久色视频在 | 赤坂丽女医bd无删减在线观看 | chinese456老人gay| 九九热精品免费观看 | 白丝爆动漫羞羞动漫软件 | 成人欧美一区二区三区黑人 | 国产999在线观看 | 国产nv精品你懂得 | 国产成人在线视频播放 | 亚洲国产自 | 亚洲男人的天堂视频 | 欧美一区二区三区在线观看免费 | 女教师被学生糟蹋三天 | 双性人bbww欧美双性 | 啪啪免费入口网站 | 国产ab| 800精品国产导航 | 亚洲国产精品成人午夜在线观看 | 亚洲高清一区二区三区四区 | 国产 国语对白 露脸正在播放 | 黑人与欧洲女子性大战 | 国产白白视频在线观看2 | 精品淑女少妇AV久久免费 | 女八把屁股扒开让男生添 | 亚州笫一色惰网站 | 日日摸夜夜爽色婷婷91 | 久久99影院| 青青青久热国产精品视频 | 亚洲第一福利网 | 日本老熟老太hd | 色姑娘久 | 日本色网址| 无码专区aaaaaa免费视频 | a v在线男人的天堂观看免费 | 亚洲欧美在线免费 | 国产精品成人免费观看 | 暴露狂婷婷医院暴露tx | 思久久 |