Python實現自動傳送郵件功能

2021-09-24 13:18:46 字數 3671 閱讀 4305

簡單郵件傳輸協議(smtp)是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。

smtp通訊的基本流程可以概括為以下幾點:

1.連線smtp伺服器

2.登陸使用者名稱和密碼

3.傳送指定郵件內容

4.退出smtp連線

一、傳送純文字格式郵件

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from smtplib import smtp

from email.mime.text import mimetext

from email.header import header

#構造純文字郵件內容

msg = mimetext('hello,send by python.....','plain','utf-8')

#傳送者郵箱

sender = '***xx@***xx.com.cn'

#傳送者的登陸使用者名稱和密碼

user = '***xx@***x.com.cn'

password = '******'

#傳送者郵箱的smtp伺服器位址

smtpserver = '***x'

#接收者的郵箱位址

receiver = ['******@qq.com','******@outlook.com'] #receiver 可以是乙個list

smtp = smtplib.smtp() #例項化smtp物件

smtp.connect(smtpserver,25) #(預設)預設埠是25 也可以根據伺服器進行設定

smtp.login(user,password) #登陸smtp伺服器

smtp.sendmail(sender,receiver,msg.as_string()) #傳送郵件 ,這裡有三個引數

'''login()方法用來登入smtp伺服器,sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入乙個list,郵件正文

是乙個str,as_string()把mimetext物件變成str。

'''smtp.quit()

執行之後就會收到郵件:

但是仔細觀察會發現:

1.郵件沒有主題

2.看不到收件人的資訊

這是因為郵件主題、如何顯示發件人、收件人等資訊並不是通過smtp協議發給mta,而是包含在發給mta的文字中的,所以,我們必須把from、to和subject新增到mimetext中,才是一封完整的郵件:

msg = mimetext('hello,send by python.....','plain','utf-8')

msg['from'] = header('python測試','utf-8')

msg['to'] = header('管理員','utf-8')

subject = 'python smtp 測試郵件'

msg['subject'] = header(subject,'utf-8')

二、傳送html格式的郵件

msg = mimetext('你好!','html','utf-8') 

#傳送html格式郵件就只需要把對應的第二個引數改為html即可

三、傳送帶附件的郵件傳送帶附件的郵件,首先要建立mimemultipart()例項,然後構造附件,如果有多個附件,可依次構造,最後利用smtplib.smtp傳送

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from email.mime.text import mimetext

from email.mime.multipart import mimemultipart

from email.header import header

#傳送郵件伺服器

smtpserver = '***xx'

#傳送郵箱使用者名稱和密碼

user = '******'

password = '******'

#傳送郵箱

sender = '***xx'

#接受郵箱

receiver = '******x'

#建立乙個帶附件的例項

message = mimemultipart()

message['from'] = header('python 測試','utf-8')

message['to'] = header('測試','utf-8')

subject = 'python smtp郵件測試'

message['subject'] = header(subject,'utf-8')

#郵件正文內容

message.attach(mimetext('這是測試python傳送附件功能....','plain','utf-8'))

#構造附件1,傳送當前目錄下的test.txt檔案

att1 = mimetext(open('123.txt','rb').read(),'base64','utf-8')

#這裡的filename可以任意寫,寫什麼名字 郵件中就顯示什麼名字

att1['content-disposition'] = 'attachment;filename:"123.txt"'

message.attach(att1)

smtp = smtplib.smtp()

smtp.connect(smtpserver,25)

smtp.login(user,password)

smtp.sendmail(sender,receiver,message.as_string())

smtp.quit()

小結使用python的smtplib傳送郵件十分簡單,只要掌握了各種郵件型別的構造方法,正確設定好郵件頭,就可以順利發出。

構造乙個郵件物件就是乙個messag物件,如果構造乙個mimetext物件,就表示乙個文字郵件物件,如果構造乙個mimeimage物件,就表示乙個作為附件的,要把多個物件組合起來,就用mimemultipart物件,而mimebase可以表示任何物件。它們的繼承關係如下:

message

+- mimebase

+- mimemultipart

+- mimenonmultipart

+- mimemessage

+- mimetext

+- mimeimage

這種巢狀關係就可以構造出任意複雜的郵件。你可以通過email.mime文件檢視它們所在的包以及詳細的用法。

python 自動傳送郵件

測試環境 python3.4 發件伺服器 網易yeah 收件伺服器 移動139郵箱 注意 一定要在發件的郵箱裡面設定pop3 smtp imap為開啟狀態,要不然會報錯 535 error authentication failed 通過本程式,可以自動給自己的手機郵箱傳送郵件,在手機郵箱中把發件位...

Python自動傳送郵件

本文主要介紹如何使用python實現郵件的自動傳送。首先這個功能要求使用的模組是stmplib,email。smtp message transport protocol 簡單資訊傳輸協議,只能由於傳送郵件。下面是簡要的程式 usr bin python coding utf 8 import sm...

Python 自動傳送郵件

可直接複製進行呼叫 修改main裡對應引數即可 usr bin env python coding utf 8 time 2022 2 11 11 05 author file myemail.py version 1.0 function import datetime import smtpli...