《Email辦公自動化》第2篇 Python發送帶excel附件的郵件

場景描述:現實工作中,發送郵件時照抄別人的模板,會發現寫著寫著格式不統一了,即使格式一樣,會遇到辦公軟件不兼容,比如Outlook2013 同Foxmail兼容性不是很好。同時對于辦公郵件,每個公司通常會制定公司內部的標準格式。比如,主題格式、郵件正文格式、上傳附件內容等等。按照特定的格式編寫一封郵件,顯然浪費很多時間和精力。可以使用python發送辦公郵件。

技術要點

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。
Python的smtplib模塊提供了一種很方便的途徑發送電子郵件。它對SMTP協議進行了簡單的封裝。
Python創建 SMTP 對象語法如下:

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

參數說明:

  • host: SMTP 服務器主機。 你可以指定主機的ip地址或者域名如: runoob.com,這個是可選參數。
  • port: 如果你提供了 host 參數, 你需要指定 SMTP 服務使用的端口號,一般情況下 SMTP 端口號為25。
  • local_hostname: 如果 SMTP 在你的本機上,你只需要指定服務器地址為 localhost 即可。

Python SMTP 對象使用 sendmail 方法發送郵件,語法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

參數說明:

  • from_addr: 郵件發送者地址。
  • to_addrs: 字符串列表,郵件發送地址。
  • msg: 發送消息
    這里要注意一下第三個參數,msg 是字符串,表示郵件。我們知道郵件一般由標題,發信人,收件人,郵件內容,附件等構成,發送郵件的時候,要注意 msg 的格式。這個格式就是SMTP協議中定義的格式。

代碼參考

(1)導入相關模塊。我們發送附帶Excel類型附件的郵件,需要導入smtplib和email模塊,導入模塊的代碼如下:

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

(2)配置郵箱服務器信息。使用網易郵箱服務器,所以需要配置服務器主機名、用戶名和密碼等相關信息。讀者可根據自身需求,自行選擇郵箱服務器,并根據郵箱服務器要求填寫配置信息。代碼參考

# 配置郵箱服務器信息
mail_smtpserver = "mail.qq123.com"  # 設置服務器
mail_user = "zhang@qq123.com"  # 用戶名
mail_pass = "ws12345"  # 口令

# 配置發件人、收件人信息
sender = 'zhang@qq123.com'  # 發件人郵箱
to_receiver = ['zhang@yeah.net']  # 接收郵件,可設置為多個郵箱

(3)配置郵件信息,并發送郵件。在message_config()函數中設置發件人、收件人、主題以及附件信息,在send_email()函數中,登錄郵箱服務器并發送郵件。代碼如下:

def message_config():
    """
    配置郵件信息
    :return: 消息對象
    """
    # 第三方 SMTP 服務
    content = MIMEText('Yvon_早安陽光 簡書博客')
    message = MIMEMultipart() # 多個MIME對象
    message.attach(content)  # 添加內容
    message['From'] = sender # 發件人
    message['To'] = to_receiver  # 收件人
    message['Subject'] = Header('Yvon_早安陽光~簡書博客', 'utf-8') # 主題
    # 添加Excel類型附件
    file_name = 'Yvon_早安陽光_分享測試技術.xlsx' # 文件名
    file_path = os.path.join(file_name)        # 文件路徑
    xlsx = MIMEApplication(open(file_path, 'rb').read())  # 打開Excel,讀取Excel文件
    xlsx["Content-Type"] = 'application/octet-stream'     # 設置內容類型
    xlsx.add_header('Content-Disposition', 'attachment', filename=file_name) # 添加到header信息
    message.attach(xlsx)
    return message

def send_mail(message):
    """
    發送郵件
    :param message: 消息對象
    :return: None
    """
    try:
        smtpObj = smtplib.SMTP(mail_smtpserver)  # 使用SSL連接郵箱服務器
        smtpObj.login(mail_user, mail_pass)  # 登錄服務器
        smtpObj.sendmail(sender, to_receiver, message.as_string())  # 發送郵件
        print("郵件發送成功")
    except Exception as e:
        print(e)

if __name__ == "__main__":
    print("開始執行")
    message = message_config()  # 調用配置方法
    send_mail(message)  # 發送郵件
    print("執行結束")

郵件發送成功

郵件發送成功.jpg

完整代碼參考

# -*- coding: utf-8 -*-
"""
@Time : 2021/1/23 11:44
@Auth : Yvon_早安陽光
@File :PyemailHtml
"""
import smtplib,os
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 配置郵箱服務器信息
mail_smtpserver = "mail.qq123.com"  # 設置服務器
mail_user = "zhang@qq123.com"  # 用戶名
mail_pass = "ws12345"  # 口令
# 配置發件人、收件人信息
sender = 'zhang@qq123.com'  # 發件人郵箱
to_receiver = ['zhang@yeah.net']  # 接收郵件,可設置為多個郵箱

def message_config():
    """
    配置郵件信息
    :return: 消息對象
    """
    # 第三方 SMTP 服務
    content = MIMEText('Yvon_早安陽光 簡書博客')
    message = MIMEMultipart() # 多個MIME對象
    message.attach(content)  # 添加內容
    message['From'] = sender # 發件人
    message['To'] = to_receiver  # 收件人
    message['Subject'] = Header('Yvon_早安陽光~簡書博客', 'utf-8') # 主題
    # 添加Excel類型附件
    file_name = 'Yvon_早安陽光_分享測試技術.xlsx' # 文件名
    file_path = os.path.join(file_name)        # 文件路徑
    xlsx = MIMEApplication(open(file_path, 'rb').read())  # 打開Excel,讀取Excel文件
    xlsx["Content-Type"] = 'application/octet-stream'     # 設置內容類型
    xlsx.add_header('Content-Disposition', 'attachment', filename=file_name) # 添加到header信息
    message.attach(xlsx)
    return message

def send_mail(message):
    """
    發送郵件
    :param message: 消息對象
    :return: None
    """
    try:
        smtpObj = smtplib.SMTP(mail_smtpserver)  # 使用SSL連接郵箱服務器
        smtpObj.login(mail_user, mail_pass)  # 登錄服務器
        smtpObj.sendmail(sender, to_receiver, message.as_string())  # 發送郵件
        print("郵件發送成功")
    except Exception as e:
        print(e)

if __name__ == "__main__":
    print("開始執行")
    message = message_config()  # 調用配置方法
    send_mail(message)  # 發送郵件
    print("執行結束")
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容