最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)

 更新時(shí)間:2023年05月12日 09:18:28   作者:Bruce小鬼  
這篇文章主要為大家詳細(xì)介紹了Python圖畫調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.概述

這篇文章主要介紹python調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)。在第二篇文章中介紹封裝郵件服務(wù)工具類,該工具類將可以應(yīng)用到其他的項(xiàng)目中。

2.郵件模塊介紹

python內(nèi)置了發(fā)送郵件的模塊,因此不需要單獨(dú)安裝。

  • smtplib 模塊負(fù)責(zé)發(fā)送郵件
  • email 模塊負(fù)責(zé)格式化郵件內(nèi)容樣式

2.1. 建立連接類型

當(dāng)使用smtplib模塊建立發(fā)送郵件連接時(shí)可以分為非安全和安全連接兩種方式。

安全連接: 當(dāng)python使用smtplib模塊調(diào)用郵箱服務(wù)端發(fā)送郵件過(guò)程,傳輸層使用了SSL加密,避免了明文傳遞郵件內(nèi)容,通過(guò)攔截請(qǐng)求獲取郵件內(nèi)容和登錄賬號(hào)密碼。

非安全連接:郵箱服務(wù)端采用明文發(fā)送郵件,通過(guò)連接請(qǐng)求可以獲取郵件內(nèi)容和登錄賬號(hào)密碼。

3.發(fā)送郵件

使用python發(fā)送郵件之前,需要登錄郵箱開啟SMTP服務(wù)才可以發(fā)送郵件。每家的郵箱開啟入口不同,開啟方式搜索具體產(chǎn)品的郵箱。

3.1.發(fā)送非安全連接郵件

建立非安全連接郵箱服務(wù)端默認(rèn)使用25端口發(fā)送郵件。

import smtplib
from email.mime.text import MIMEText
#設(shè)置服務(wù)器所需信息
#郵箱服務(wù)器地址
mail_host = 'mail.******.com'
#郵箱登錄用戶名
mail_user = '******@qq.com'
#密碼(部分郵箱為授權(quán)碼)
mail_pass = '123456'
#郵件發(fā)送方郵箱地址
sender = '******@qq.com'
#郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
receivers = ['32321232@qq.com']
#設(shè)置email信息
#郵件內(nèi)容設(shè)置
message = MIMEText('content','plain','utf-8')
#郵件主題
message['Subject'] = 'title'
#發(fā)送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
#登錄并發(fā)送郵件
try:
   # 建立非安全連接smtplib.SMTP()
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host,25)
    #登錄到服務(wù)器
    smtpObj.login(mail_user,mail_pass)
    #發(fā)送
    smtpObj.sendmail(
        sender,receivers,message.as_string())
    #退出
    smtpObj.quit()
    print('success')
except smtplib.SMTPException as e:
    print('error',e) #打印錯(cuò)誤

3.2.發(fā)送安全連接郵件

建立非安全連接郵箱服務(wù)端默認(rèn)使用465端口發(fā)送郵件。

import smtplib
from email.mime.text import MIMEText
#設(shè)置服務(wù)器所需信息
#郵箱服務(wù)器地址
mail_host = 'mail.******.com'
#郵箱登錄用戶名
mail_user = '******@qq.com'
#密碼(部分郵箱為授權(quán)碼)
mail_pass = '123456'
#郵件發(fā)送方郵箱地址
sender = '******@qq.com'
#郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
receivers = ['32321232@qq.com']
#設(shè)置email信息
#郵件內(nèi)容設(shè)置
message = MIMEText('content','plain','utf-8')
#郵件主題
message['Subject'] = 'title'
#發(fā)送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
# 登錄并發(fā)送郵件
# 建立安全連接SMTP_SSL,注意端口號(hào)默認(rèn)使用465
with smtplib.SMTP_SSL(mail_host, timeout=10, port=465) as smtpObj:
    try:
        # 登錄到服務(wù)器
        smtpObj.login(mail_user, mail_pass)
        # 發(fā)送
        smtpObj.sendmail(
            sender, receivers, message.as_string())
        print('success')
    except Exception as e:
        print(e)

在使用安全連接發(fā)送郵件時(shí)可能會(huì)拋出下面的異常,這個(gè)異常的含義是Python端與郵箱服務(wù)端建立連接SSL版本號(hào)不對(duì)。

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:997)

這個(gè)異常出現(xiàn)的原因:

發(fā)送郵件的郵箱服務(wù)端沒(méi)有開啟SSL或者不支持,這種清空可以登錄郵箱服務(wù)端確認(rèn),如果不支持只能使用非安全建立連接。

端口號(hào)錯(cuò)誤造成,郵箱服務(wù)端模式使用465端口號(hào)連接SSL連接,如果python端設(shè)置的端口號(hào)與郵箱服務(wù)端端口號(hào)不一致建立連接也會(huì)報(bào)上面的異常。

4.設(shè)置郵件內(nèi)容格式

python內(nèi)置的email模塊負(fù)責(zé)設(shè)置郵件內(nèi)容格式,它包含三個(gè)模塊對(duì)應(yīng)郵件三種類型的格式。下面具體介紹他們的區(qū)別。

from email.mime.text import MIMEText    
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart    

4.1.郵件文本三種類型

1.MIMEText文本類型

發(fā)送普通的文本郵件內(nèi)容,MIMEText對(duì)象中有三個(gè)需要我們?cè)O(shè)置的參數(shù),一個(gè)是正文內(nèi)容,一個(gè)是正文內(nèi)容的類型,例如:”text/plain”和”text/html”,一個(gè)是正文內(nèi)容的編碼。

plain構(gòu)造普通文本

# 文本內(nèi)容
text_info = 'hello world '
# 構(gòu)造普通文本對(duì)象,包含三個(gè)參數(shù),郵件內(nèi)容,類型,編碼
text_sub = MIMEText(text_info,'plain', 'utf-8')  

完整代碼

import smtplib
from email.mime.text import MIMEText
# 創(chuàng)建郵件連接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 構(gòu)建郵件內(nèi)容模板
def email_content():
    # 郵件內(nèi)容設(shè)置
    text_info = 'hello world '
    message = MIMEText(text_info, 'plain', 'utf-8')
    # 郵件主題
    message['Subject'] = 'title'
    # 發(fā)送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 發(fā)送郵件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 設(shè)置服務(wù)器所需信息
    # 163郵箱服務(wù)器地址
    mail_host = 'smtp.163.com'
    # 163用戶名
    mail_user = '******@163.com'
    # 密碼(部分郵箱為授權(quán)碼)
    mail_pass = '******'
    # 郵件發(fā)送方郵箱地址
    sender_account = '******@163.com'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

構(gòu)造html文本

# 郵件內(nèi)容
url = "https://xxxxx.com"
html_info = """
    <p>點(diǎn)擊以下鏈接,查看郵件詳情</p>
    <p><a href="%s">click me</a></p>
    <p>i am very glasses for you</p>
    """ % url
# 構(gòu)建郵件類型html對(duì)象
html_sub = MIMEText(html_info, 'html', 'utf-8')  
# 如果不加下邊這行代碼的話,上邊的文本是不會(huì)正常顯示的,會(huì)把超文本的內(nèi)容當(dāng)做文本顯示
html_sub["Content-Disposition"] = 'attachment; filename="email.html"'

構(gòu)造base64數(shù)據(jù)流,用于發(fā)送文件的時(shí)候使用,構(gòu)造附件代碼

txt_file = open(r'D:\python_files\files\hello_world.txt', 'rb').read()
txt = MIMEText(txt_file, 'base64', 'utf-8')
txt["Content-Type"] = 'application/octet-stream'
# 命名發(fā)送的附件
txt.add_header('Content-Disposition', 'attachment', filename='hello_world.txt')

2.MIMEImage圖片類型

構(gòu)造圖片類型對(duì)象

image_file = open(r'D:\python_files\images\test.png', 'rb').read()
image = MIMEImage(image_file)
image.add_header('Content-ID', '<image1>')
# 命名發(fā)送的圖片
image["Content-Disposition"] = 'attachment; filename="red_people.png"'

完整代碼

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
# 創(chuàng)建郵件連接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 構(gòu)建郵件內(nèi)容模板
def email_content():
    # 郵件內(nèi)容設(shè)置
    image_file = open(r'./白玉堂.jpg', 'rb').read()
    message = MIMEImage(image_file)
    # 命名發(fā)送的圖片
    message["Content-Disposition"] = 'attachment; filename="red_people.png"'
    # 郵件主題
    message['Subject'] = 'title'
    # 發(fā)送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 發(fā)送郵件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 設(shè)置服務(wù)器所需信息
    # 163郵箱服務(wù)器地址
    mail_host = 'smtp.163.com'
    # 163用戶名
    mail_user = '******@163.com'
    # 密碼(部分郵箱為授權(quán)碼)
    mail_pass = '******'
    # 郵件發(fā)送方郵箱地址
    sender_account = '******@163.com'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

3.MIMEMultipart

對(duì)象創(chuàng)建的類型有三種,此模塊主要是通過(guò)attach方法把上邊構(gòu)造的內(nèi)容傳入到郵件的整體內(nèi)容中

郵件類型為”multipart/alternative”的郵件正文中包括純文本正文(text/plain)和超文本正文(text/html)。

郵件類型為”multipart/related”的郵件正文中包括圖片,聲音等內(nèi)嵌資源。

郵件類型為”multipart/mixed”的郵件包含附件,圖片,文本等都可以添加,所以發(fā)的內(nèi)容多的話一般是用這個(gè)的,選擇mixed類型,什么內(nèi)容都可以發(fā)。

MIMEMultipart使用方法

MIMEMultipart(‘mixed’).attach(MIMEText或者M(jìn)IMEImage對(duì)象),因?yàn)镸IMEMultipart對(duì)象代表郵件本身,把其他的構(gòu)造內(nèi)容添加到MIMEMultipart對(duì)象中就可以把文本,html,附件等一起發(fā)送。

構(gòu)造圖片類型內(nèi)容

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 創(chuàng)建郵件連接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 構(gòu)建郵件內(nèi)容模板
def email_content():
    # 郵件內(nèi)容設(shè)置
    image_file = open(r'./白玉堂.jpg', 'rb').read()
    # 創(chuàng)建MIMEImage類型對(duì)象
    mimei_image = MIMEImage(image_file)
    message = MIMEMultipart('mixed')
    # attach包裝MIMEImage對(duì)象
    message.attach(mimei_image)
    # 命名發(fā)送的圖片
    message["Content-Disposition"] = 'attachment; filename="red_people.png"'
    # 郵件主題
    message['Subject'] = 'title'
    # 發(fā)送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 發(fā)送郵件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 設(shè)置服務(wù)器所需信息
    # 163郵箱服務(wù)器地址
    mail_host = 'smtp.163.com'
    # 163用戶名
    mail_user = '******@163.com'
    # 密碼(部分郵箱為授權(quán)碼)
    mail_pass = '******'
    # 郵件發(fā)送方郵箱地址
    sender_account = '******@163.com'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

構(gòu)造普通類型發(fā)送附件郵件

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 創(chuàng)建郵件連接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 構(gòu)建郵件內(nèi)容模板
def email_content():
    # 郵件內(nèi)容設(shè)置
    text_file = open(r'./白玉堂.jpg', 'rb').read()
    # 創(chuàng)建MIMEImage類型對(duì)象
    mime_obj = MIMEText(text_file, 'base64', 'utf-8')
    # 命名發(fā)送的圖片
    mime_obj.add_header('Content-Disposition', 'attachment', filename='red_people.jpg')
    mime_obj.add_header('Content-Type', 'application/octet-stream')
    # 構(gòu)建mime對(duì)象
    message = MIMEMultipart('mixed')
    # attach包裝MIMEImage對(duì)象
    message.attach(mime_obj)
    # 郵件主題
    message['Subject'] = '測(cè)試郵件'
    # 發(fā)送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 發(fā)送郵件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 設(shè)置服務(wù)器所需信息
    # 163郵箱服務(wù)器地址
    mail_host = 'smtp.163.com'
    # 163用戶名
    mail_user = '******@163.com'
    # 密碼(部分郵箱為授權(quán)碼)
    mail_pass = '******'
    # 郵件發(fā)送方郵箱地址
    sender_account = '******@163.com'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

到此這篇關(guān)于Python調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)的文章就介紹到這了,更多相關(guān)Python發(fā)送郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python新手入門之單引號(hào)、雙引號(hào)與三引號(hào)的差異與應(yīng)用示例

    Python新手入門之單引號(hào)、雙引號(hào)與三引號(hào)的差異與應(yīng)用示例

    在Python當(dāng)中表達(dá)字符串既可以使用單引號(hào),也可以使用雙引號(hào),那兩者有什么區(qū)別嗎?下面這篇文章主要給大家介紹了關(guān)于Python新手入門之單引號(hào)、雙引號(hào)與三引號(hào)的差異與應(yīng)用示例,需要的朋友可以參考下
    2024-03-03
  • 使用Python將word中的圖片進(jìn)行導(dǎo)出功能

    使用Python將word中的圖片進(jìn)行導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了如何使用Python將word中的圖片進(jìn)行導(dǎo)出功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • python實(shí)現(xiàn)redis三種cas事務(wù)操作

    python實(shí)現(xiàn)redis三種cas事務(wù)操作

    本篇文章主要介紹了python實(shí)現(xiàn)redis三種cas事務(wù)操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Python卷積神經(jīng)網(wǎng)絡(luò)圖片分類框架詳解分析

    Python卷積神經(jīng)網(wǎng)絡(luò)圖片分類框架詳解分析

    在機(jī)器視覺(jué)領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)算法作為一種新興算法出現(xiàn),在圖像識(shí)別領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)能夠較好的實(shí)現(xiàn)圖像的分類效果,而且其位移和形變具有較高的容忍能力
    2021-11-11
  • Python實(shí)現(xiàn)將Word表格嵌入到Excel中

    Python實(shí)現(xiàn)將Word表格嵌入到Excel中

    把Word中的表格轉(zhuǎn)到Excel中,順便做一個(gè)調(diào)整。這個(gè)需求在實(shí)際工作中,很多人還是經(jīng)常碰到的!本文就將介紹如何利用Python實(shí)現(xiàn)這一功能,需要的朋友可以了解一下
    2021-12-12
  • Python2.7讀取PDF文件的方法示例

    Python2.7讀取PDF文件的方法示例

    這篇文章主要介紹了Python2.7讀取PDF文件的方法,結(jié)合實(shí)例形式分析了Python2.7基于PDFMiner模塊實(shí)現(xiàn)針對(duì)pdf文件的讀取功能相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • python中遍歷文件的3個(gè)方法

    python中遍歷文件的3個(gè)方法

    這篇文章主要介紹了python中遍歷文件的3個(gè)方法,本文分別使用os.path.walk()、os.walk()、os.listdir()來(lái)實(shí)現(xiàn),需要的朋友可以參考下
    2014-09-09
  • Python利用Scrapy框架爬取豆瓣電影示例

    Python利用Scrapy框架爬取豆瓣電影示例

    這篇文章主要介紹了Python利用Scrapy框架爬取豆瓣電影,結(jié)合實(shí)例形式分析了Python使用Scrapy框架爬取豆瓣電影信息的具體操作步驟、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • python的函數(shù)形參和返回值你了解嗎

    python的函數(shù)形參和返回值你了解嗎

    這篇文章主要為大家詳細(xì)介紹了python的函數(shù)形參和返回值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Pytorch mask-rcnn 實(shí)現(xiàn)細(xì)節(jié)分享

    Pytorch mask-rcnn 實(shí)現(xiàn)細(xì)節(jié)分享

    這篇文章主要介紹了Pytorch mask-rcnn 實(shí)現(xiàn)細(xì)節(jié)分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06

最新評(píng)論

渑池县| 台东县| 晋州市| 从化市| 兴山县| 建德市| 峨眉山市| 潜山县| 嵊州市| 伊宁市| 新竹市| 陈巴尔虎旗| 马公市| 台南县| 鄢陵县| 锦屏县| 柳河县| 增城市| 小金县| 石河子市| 淮安市| 仙桃市| 康乐县| 根河市| 河南省| 卢氏县| 永兴县| 扶绥县| 阳朔县| 南川市| 昌都县| 寻甸| 山东| 方山县| 和顺县| 兴隆县| 屏东市| 太白县| 沙湾县| 兴文县| 舞阳县|