學習一下我們利用python 傳送郵件的方法:
利用python 的smtplib 和來傳送乙份定時的郵件,能消除大部分的重複動作帶來的煩惱,實在是方便的很。
下面是乙個傳送郵件的方法,能傳送郵件給單個人,或者乙個組。具體方法在**裡有注釋,可以看**。
1、下面是乙個類來實現傳送郵件
#! /usr/bin/env python
# coding=utf-8
import smtplib
from email.mime.text import mimetext
from email.header import header
from smtplib import smtp_ssl
from email.mime.image import mimeimage
from email.mime.multipart import mimemultipart
from email.mime.text import mimetext
import re
import os
class send_email(object):
def __init__(self, host_server='smtp.qq.com', sender='這裡填傳送位址',
password='傳送位址的密碼', receiver=['接收郵件位址'], receiver_nick="收件人暱稱", *args, **kw):
self.host_server = host_server
self.sender = sender
self.password = password
self.receiver = receiver
self.receiver_nick = receiver_nick
def create_email(self, html, mail_title, reference=false, picture=false, *args, **kwargs):
"""這個方法用來傳送郵件,傳送的收件人和收件人在例項化物件的時候申明
:param reference: boolean 表示是否傳送附件,附件是乙個檔案
:param html:郵件預設是html格式,表示要傳送的html檔案,也就是郵件的主題部分
:param picture:[dict, path]在郵件中新增的的字典,key 為名字,value為,路徑是要求的名字和html中的id一致
:mail_title:在郵件中的郵件的主題
:return: 無
"""# 正文內容
msg = mimemultipart('related')
msg['subject'] = header(mail_title, 'utf-8')
msg['from'] = self.sender
msg['to'] = header(self.receiver_nick, "utf-8")
msgalternative = mimemultipart('alternative')
msg.attach(msgalternative)
# 郵件正文
mail_body = html
# 把html新增到郵件容器中
html = mimetext(mail_body, 'html', 'utf-8')
msgalternative.attach(html)
# 讀出傳進來的並轉成郵件格式
if picture:
if isinstance(picture, dict):
for k, v in picture.items():
msgimage = mimeimage(v)
msgimage.add_header("content-id", '')
msg.attach(msgimage)
# 輸入 包含檔名的 list
# 輸入 包含的資料夾, 需要檔名與html中檔案id一致
# 不符合要求的picture 路徑
elif exception:
print("輸入的的路徑有問題!請輸入物件和的名稱的字典,或者的資料夾,或者檔名的list")
# 郵件的正文完畢
# 開始新增附件 (附件只能新增乙個)
if reference:
if isinstance(reference, str):
with open(reference) as file:
refer = file.read()
att = mimetext(refer, 'base64', 'utf-8')
name = re.match(r'\\(.*)\.csv$', reference)
att["content-disposition"] = 'attachment; filename="' + name.group()
msg.attach(att)
if isinstance(reference, file):
refer = file.read()
name = re.match(r'\\(.*)\.csv$', refer)
att["content-disposition"] = 'attachment; filename="' + name.group()
msg.attach(att)
elif filenotfounderror:
print("請輸入正確格式的附件!!\n file 檔案 或者絕對路徑+檔名")
# 新增附件完成
# 傳送郵件
print('構造成功,傳送郵件')
host_server = self.host_server
sender = self.sender
password = self.password
receiver = self.receiver
smtp = smtp_ssl(host_server)
smtp.ehlo(host_server)
smtp.login(sender, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.close()
print('郵件已傳送')
2、下面是main
import sys
import os
import time
work_path = "/data"
os.chdir(work_path)
from send_email import send_email
# 這一部分是郵件的正文內容
html = """
測試郵件
all,
這是python傳送的郵件
test = send_email(receiver=["收件人位址"]) # 這是乙個list 可以輸入收件位址來接收郵件。
test.create_email(html=html, mail_title='test', reference=false, picture=picture)
吶,現在你只要試一試這段**,就可以傳送郵件了,改一下一些必須的設定。
html傳送郵件 Python傳送郵件(三十)
簡單郵件傳輸協議 smtp 是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它...
python 傳送郵件
coding utf 8 import smtplib from email.mime.text import mimetext from email.header import header 檔案形式的郵件 def email file mail host smtp.qq.com 郵箱伺服器 ma...
python 傳送郵件
smtp mail transfer protocol 即簡單郵件傳輸協議,它是一組用於由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。直接貼 coding utf 8 import smt...