Python通過smtplib發送郵件(2020最新最全版)

smtplib 郵件自動發送

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。

python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。

準備需要發送郵件的郵箱賬號

如果是163郵箱只需要準備賬號和密碼;如果是QQ郵箱,需要準備賬號和授權碼(密碼不好用),可以去QQ郵箱官網的幫助中心去查看授權碼的獲取方式。

發送郵件的基本步驟

  1. 登錄郵箱

    import smtplib
    1. 連接郵箱服務器
    連接對象 = smtplip.SMTP_SSL(服務器地址, 郵箱服務端口)		
    
    - 服務器地址:smtp.163.com(163郵箱)、smtp.qq.com(qq郵箱)
    - 郵箱服務端口:465或者25
    
    2. 登錄郵箱
    連接對象.login(郵箱賬號, 密碼)
    
    - 密碼:如果是163郵箱直接使用郵箱的登錄密碼,如果是qq郵箱就使用授權碼
    
  2. 準備數據

    數據指的需要發送的內容。郵件內容的構建需要涉及到另外一個庫email,它可以用來構建郵件主題以及各種形式的郵件內容(包括文字內容、圖片內容、html內容、附件)等,這兒先簡單說一個郵件主題和文本內容,其他形式的內容在後面郵件內容部分詳細講解。

    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    
    1. 創建郵件對象
    郵件對象 = MIMEMultipart()
    
    2. 設置郵件主題
    主題對象 = Header(郵件標題, 編碼方式).encode()
    郵件對象['Subject'] = 主題對象
    
    3.設置郵件發送者
    郵件對象['From'] = '用戶名 <用戶名>'
    
    4.設置郵件接受者
    郵件對象['To']	=	'收件人1;收件人2;收件人3...'
    
    5. 添加文字內容
    文字內容對象 = MIMEText(內容, 類型, 編碼方式)
    - 內容:就是文字字符串
    - 類型:plain(簡單的文字內容)、html(超文本)
    郵件對象.attach(文字對象)
    
  3. 發送郵件

    連接對象.sendmail(發件人, 收件人, 郵件對象.as_string())
    連接對象.quit()
    

示例如下:

"""__author__=餘婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# 1. 連接郵箱服務器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登錄郵箱
con.login('[email protected]', 'XXXXX')

# 2. 準備數據
# 創建郵件對象
msg = MIMEMultipart()

# 設置郵件主題
subject = Header('找回密碼', 'utf-8').encode()
msg['Subject'] = subject

# 設置郵件發送者
msg['From'] = '[email protected] <[email protected]>'

# 設置郵件接受者
msg['To'] = '[email protected]'

# 添加文字內容
text = MIMEText('忘記密碼需要找回密碼', 'plain', 'utf-8')
msg.attach(text)

# 3.發送郵件
con.sendmail('[email protected]', '[email protected]', msg.as_string())
con.quit()

在這裏插入圖片描述

特殊內容的發送

1. HTML郵件的構建

HTML格式的郵件本質還是文本格式的郵件,所有文件的構建方式和普通文本文件的構建方式差不多:

from email.mime.text import MIMEText
html文本對象 = MIMEText(html內容字符串, 'html', 編碼方式)
郵件對象.attach(html文本對象)

實例如下:

"""__author__=餘婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# 1. 連接郵箱服務器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登錄郵箱
con.login('[email protected]', 'xxxxxx')

# 2. 準備數據
# 創建郵件對象
msg = MIMEMultipart()

# 設置郵件主題
subject = Header('找回密碼', 'utf-8').encode()
msg['Subject'] = subject

# 設置郵件發送者
msg['From'] = '[email protected] <[email protected]>'

# 設置郵件接受者
msg['To'] = '[email protected]'

# 添加html內容
content = """
<h2>我是正文中的標題</h2>
<p>郵件正文描述性文字1</p>
<p>郵件正文描述性文字2</p>
<img src='https://www.baidu.com/img/bd_logo1.png'>
<center>百度圖片</center>
<a href='https://www.baidu.com'>百度一下</a>
"""
html = MIMEText(content, 'html', 'utf-8')
msg.attach(html)

# 3.發送郵件
con.sendmail('[email protected]', '[email protected]', msg.as_string())
con.quit()

在這裏插入圖片描述

2.發送圖片

  1. 以附件的形式發送本地圖片
from email.mime.image import MIMEImage
圖片對象 = MIMEImage(圖片二進制數據)
圖片對象["Content-Disposition"] = 'attachment; filename="圖片名"'
郵件對象.attach(圖片對象)
- 圖片二進制數據:可以通過文件操作去讀取

示例如下:

"""__author__=餘婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header

# 1. 連接郵箱服務器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登錄郵箱
con.login('[email protected]', 'xxxxxx')

# 2. 準備數據
# 創建郵件對象
msg = MIMEMultipart()

# 設置郵件主題
subject = Header('圖片發送', 'utf-8').encode()
msg['Subject'] = subject

# 設置郵件發送者
msg['From'] = '[email protected] <[email protected]>'

# 設置郵件接受者
msg['To'] = '[email protected]'

# 添加圖片附件
image_data = open('files/image.jpg', 'rb').read()
image = MIMEImage(image_data)
image["Content-Disposition"] = 'attachment; filename="image.jpg"'	# 設置圖片標題
msg.attach(image)

# 3.發送郵件
con.sendmail('[email protected]', '[email protected]', msg.as_string())
con.quit()

在這裏插入圖片描述

  1. 以郵件內容的形式發送圖片

    如果想要叫本地圖片作爲郵件中的內容,需要將圖片以<img src='cid:圖片id'/>的形式關聯到html文本中

    from email.mime.image import MIMEImage
    圖片對象 = MIMEImage(圖片二進制數據)
    image.add_header('Content-ID', '<自定義圖片id>')
    郵件對象.attach(圖片對象)
    

    示例如下:

    """__author__=餘婷"""
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.header import Header
    from copy import deepcopy
    
    # 1. 連接郵箱服務器
    con = smtplib.SMTP_SSL('smtp.163.com', 465)
    
    # 2. 登錄郵箱
    con.login('[email protected]', 'xxxxxx')
    
    # 2. 準備數據
    # 創建郵件對象
    msg = MIMEMultipart()
    
    # 設置郵件主題
    subject = Header('圖片發送', 'utf-8').encode()
    msg['Subject'] = subject
    
    # 設置郵件發送者
    msg['From'] = '[email protected] <[email protected]>'
    
    # 設置郵件接受者
    msg['To'] = '[email protected]'
    
    # 添加文字內容
    content = """
    <h2>我是正文中的標題</h2>
    <p>郵件正文描述性文字1</p>
    <p>郵件正文描述性文字2</p>
    <img src='cid:image1'>
    <center>圖片顯示</center>
    <a href='https://www.baidu.com'>百度一下</a>
    """
    html = MIMEText(content, 'html', 'utf-8')
    msg.attach(html)
    
    # 添加圖片附件
    image_data = open('files/image.jpg', 'rb').read()
    image = MIMEImage(image_data)
    image.add_header('Content-ID', '<image1>')	
    msg.attach(image)
    
    # 3.發送郵件
    con.sendmail('[email protected]', '[email protected]', msg.as_string())
    con.quit()
    

在這裏插入圖片描述

3. 發送附件

from email.mime.text import MIMEText
文件對象 = MIMEText(文件二進制數據, 'base64', 編碼方式)
文件對象["Content-Disposition"] = 'attachment; filename="文件名"'
郵件對象.attach(文件對象)

示例如下:

"""__author__=餘婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
from email.mime.message import MIMEMessage
from copy import deepcopy

# 1. 連接郵箱服務器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登錄郵箱
con.login('[email protected]', 'xxxxxx')

# 2. 準備數據
# 創建郵件對象
msg = MIMEMultipart()

# 設置郵件主題
subject = Header('文件附件發送', 'utf-8').encode()
msg['Subject'] = subject

# 設置郵件發送者
msg['From'] = '[email protected] <[email protected]>'

# 設置郵件接受者
msg['To'] = '[email protected]'

# 添加文件附件
file1 = MIMEText(open('files/test.txt', 'rb').read(), 'base64', 'utf-8')
file1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(file1)

file2 = MIMEText(open('files/pyecharts的使用.pdf', 'rb').read(), 'base64', 'utf-8')
file2["Content-Disposition"] = 'attachment; filename="test.pdf"'
msg.attach(file2)


# 3.發送郵件
con.sendmail('[email protected]', '[email protected]', msg.as_string())
con.quit()

在這裏插入圖片描述

~~歡迎大家關注我的b站視頻,上面全是我自己錄的一些python好玩兒的模塊的授課視頻,其中包括這篇博客內容的授課視頻:https://space.bilibili.com/49719176

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章