python代碼實現發郵件


代碼實現發郵件

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

這里以QQ郵箱為例,首先要拿到授權碼,這里登錄你的QQ郵箱,在設置中,選擇賬號選項,下拉到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務項,獲取授權碼。

以QQ郵箱為例,先把需要開啟的任務弄好!!!

需要發其他郵箱請看博客https://www.cnblogs.com/Neeo/articles/11199127.html

發送普通文本郵件

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服務
mail_host = "smtp.qq.com"  # 設置服務器
mail_user = "1206180814@qq.com"  # 用戶名
mail_pass = "dfpcglacrjbybafa"  # 獲取授權碼
sender = '1206180814@qq.com'  # 發件人賬號
receivers = ['1206180814@qq.com']  # 接收郵件,可設置為你的QQ郵箱或者其他郵箱
send_content = 'Python 郵件發送測試...'
message = MIMEText(send_content, 'plain', 'utf-8')  # 第一個參數為郵件內容,第二個設置文本格式,第三個設置編碼
message['From'] = Header("我是發件人", 'utf-8')  # 發件人
message['To'] = Header("我是收件人", 'utf-8')   # 收件人

subject = '郵件大標題'
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("郵件發送成功")
except smtplib.SMTPException:
    print("Error: 無法發送郵件")

運行結果如下:

發送HTML格式郵件

授權碼都不變,只需將MIMEText的第二個參數的文本類型改一下即可:

改成html格式,相當於發的郵件內容是html頁面的樣子,send_contet= html前端的代碼

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服務
mail_host = "smtp.qq.com"  # 設置服務器
mail_user = "1206180814@qq.com"  # 用戶名
mail_pass = "dfpcglacrjbybafa"  # 口令

sender = '1206180814@qq.com'
receivers = ['1206180814@qq.com']  # 接收郵件,可設置為你的QQ郵箱或者其他郵箱
send_content = """
<h1>天不生我李淳罡</h1>
<h1>劍道萬古如長夜</h1>
<p>小二上酒</p>
<img src="https://ss0.baidu.com/73t1bjeh1BF3odCf/it/u=858168512,2130327819&fm=85&s=2E4020DF1CD035FBDC9D940A0300F0F3">
<div>閱讀請&nbsp;<a href="https://www.37zw.net/0/761/">點我,點我</a></div>
"""
message = MIMEText(send_content, 'html', 'utf-8')  # 第一個參數為郵件內容
message['From'] = Header("我是發件人", 'utf-8')  # 發件人
message['To'] = Header("我是收件人", 'utf-8')  # 收件人

subject = '雪中悍刀行'
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("郵件發送成功")

except smtplib.SMTPException:
    print("Error: 無法發送郵件")

還有能發本地圖片的郵件,我就不列舉了,看博客https://www.cnblogs.com/Neeo/articles/11199127.html

發送帶各式類型附件的郵件

發送帶附件的郵件,首先要創建MIMEMultipart實例,然后在構建附件,如果有多個附件的話,可依次構建,最后利用smtplib.smtp發送:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

# 第三方 SMTP 服務
mail_host = "smtp.qq.com"  # 設置服務器
mail_user = "1206180814@qq.com"  # 用戶名
mail_pass = "dfpcglacrjbybafa"  # 口令

sender = '1206180814@qq.com'
receivers = ['1206180814@qq.com']  # 接收郵件,可設置為你的QQ郵箱或者其他郵箱
# 創建一個帶附件的實例
message = MIMEMultipart()
message['From'] = Header("我是發件人", 'utf-8')  # 發件人
message['To'] = Header("我是收件人", 'utf-8')   # 收件人

subject = 'Python發送帶附件的郵件示例'
message['Subject'] = Header(subject, 'utf-8')

# 郵件正文內容
send_content = 'hi man,你收到附件了嗎?'
content_obj = MIMEText(send_content, 'plain', 'utf-8')  # 第一個參數為郵件內容
message.attach(content_obj)

# 構造附件1,發送當前目錄下的 t1.txt 文件
att1 = MIMEText(open('t1.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 這里的filename可以任意寫,寫什么名字,郵件附件中顯示什么名字
att1["Content-Disposition"] = 'attachment; filename="t1.txt"'
message.attach(att1)

# 構造附件2,發送當前目錄下的 t2.py 文件
att2 = MIMEText(open('t2.py', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="t2.py"'
message.attach(att2)
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("郵件發送成功")

except smtplib.SMTPException:
    print("Error: 無法發送郵件")


如果要發送其他類型的,如果PDF、doc、xls、MP3格式的,我們都可以通過`MIMEApplication`來完成,`MIMEApplication`默認子類型是`application/octet-stream`,而`application/octet-stream`表明**這是個二進制文件,但願接收方知道怎么處理!!!**,然后客戶端收到這個聲明后會根據文件擴展名來猜測。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header

# 第三方 SMTP 服務

mail_host = "smtp.qq.com"  # 設置服務器
mail_user = "1206180814@qq.com"  # 用戶名
mail_pass = "dfpcglacrjbybafa"  # 口令

sender = '1206180814@qq.com'
receivers = ['1206180814@qq.com']  # 接收郵件,可設置為你的QQ郵箱或者其他郵箱

# 創建一個帶附件的實例

message = MIMEMultipart()
message['From'] = Header("我是發件人", 'utf-8')  # 發件人
message['To'] = Header("我是收件人", 'utf-8')   # 收件人

subject = 'Python發送帶附件的郵件示例'
message['Subject'] = Header(subject, 'utf-8')

# 郵件正文內容

send_content = 'hi man,你收到附件了嗎?'
content_obj = MIMEText(send_content, 'plain', 'utf-8')  # 第一個參數為郵件內容
message.attach(content_obj)

# 構造附件1,發送當前目錄下的 t1.txt 文件

part1 = MIMEApplication(open('t1.txt', 'rb').read())
part1.add_header('Content-Disposition', 'attachment', filename='t1.txt')
message.attach(part1)

# 構造附件2,發送當前目錄下的 bg.mp3 文件

part2 = MIMEApplication(open('bg.mp3', 'rb').read())
part2.add_header('Content-Disposition', 'attachment', filename='bg.mp3')
message.attach(part2)

# 構造附件3,發送當前目錄下的 t3.xls 文件

part3 = MIMEApplication(open('t3.xls', 'rb').read())
part3.add_header('Content-Disposition', 'attachment', filename='t3.xls')
message.attach(part3)

# 構造附件4,發送當前目錄下的 t4.doc 文件

part4 = MIMEApplication(open('t4.doc', 'rb').read())
part4.add_header('Content-Disposition', 'attachment', filename='t4.doc')
message.attach(part4)

# 構造附件5,發送當前目錄下的 t5.pdf 文件

part5 = MIMEApplication(open('t5.pdf', 'rb').read())
part5.add_header('Content-Disposition', 'attachment', filename='t5.pdf')
message.attach(part5)

# 構造附件6,發送當前目錄下的 img.jpg 文件

part6 = MIMEApplication(open('img.jpg', 'rb').read())
part6.add_header('Content-Disposition', 'attachment', filename='img.jpg')
message.attach(part6)

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("郵件發送成功")

except smtplib.SMTPException:
    print("Error: 無法發送郵件")

接收方改下擴展名就可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM