在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用Python批量定制化發送郵件

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 11:32 ? 次閱讀

現實生活中,如果只是發郵件給自己,像上一篇文章那樣簡陋的格式是可以接受的,但若要針對每個人進行郵件的定制化,群發給公司客戶、內部員工、親戚朋友,則需更加高級的郵件發送方式。

我們可以通過HTML制作一封精美的元旦祝福郵件,但是郵件的內容——比如姓名、祝福語等應該怎樣動態渲染呢?答案是jinja2.

jinja2 是一個Python 的模板引擎,使用jinja2,我們能夠在郵件HTML中設定占位符,在Python發送郵件的時候,將指定文本渲染到該占位符中,實現動態渲染的目的。

舉一個jinja2的簡單例子:

from jinja2 import Template

name = 'Peter'
age = 34

tm = Template("My name is {{ name }} and I am {{ age }}")
msg = tm.render(name=name, age=age)

print(msg)

使用 {{}} 圈起來的是占位符,稱之為模板字符串。模板字符串呈現兩個變量:名稱和年齡,在這個例子中,硬編碼了name和age的值傳入模板,得到輸出:

My name is Peter and I am 34

在本篇文章中,我將教大家如何通過Html及Python+jinja2給你的親朋好友們定制元旦祝福郵件。

1.準備

開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,請訪問這篇文章:超詳細Python安裝指南 進行安裝。

如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

此外,推薦大家用VSCode編輯器,因為它有許多許多的優點:Python 編程的最好搭檔—VSCode 詳細指南

準備輸入命令安裝依賴,如果你沒有VSCode編輯器,Windows環境下打開 Cmd (開始-運行-CMD),蘋果系統環境下請打開 Terminal (command+空格輸入Terminal),如果你用的是VSCode編輯器或Pycharm,可以直接在下方的Terminal中輸入命令:

pip install jinja2
pip install yagmail

2.編寫HTML

將需要發送的郵件模板的HTML編寫好。并將占位符變量提前寫入HTML中。由于我的HTML文件過大,這里就不完全展示了,只展示幾個關鍵變量。

為簡化教程的復雜度,并盡可能覆蓋到知識點,這里我們使用4個變量:

1.LOGO圖片(讓你更好地理解圖片是如何渲染到HTMl里并發郵件)
2.背景圖片
3.祝福對象
4.祝福語言

首先,是圖片變量的配置:

< tr >
    < td valign="left" width="50%" class="logo sub-gd" style="padding-left:0;" >
        < h1 >
            < img src="data:image/png;base64, {{pythondict_img}}" >
        < /h1 >
    < /td >
< /tr >

由于我們需要發送html形的郵件,因此像代碼這樣將圖片轉碼為base64再發送是最方便的。

其中,base64部分用jinja2語法 {{}} 包起來,中間就是變量名,一會render渲染的時候就會將base64渲染進來。

背景圖片的配置比較特殊,使用 base64 渲染的話QQ郵箱會自動過濾為#號,因此必須使用url的形式:

< td valign="middle"style="background-image: url({{backgroud}});" >

其次是祝福對象和祝福語言的配置:

< h2 >
    {{name}}
    < br >
    祝您2021年元旦快樂
< /h2 >
< p >
    {{bless}}.
< /p >

使用 {{}} 包裹變量,name是祝福的對象,bless是祝福語。這里簡化了代碼,還有許多樣式要配置詳細的大家可以看源代碼中的 index_detail.html .

對了,我們源代碼里包括兩份html,一份是 index_detail.html 是未經過壓縮的源代碼,還有一份是 index.html,是被壓縮過的源代碼。

為什么要壓縮HTML呢?因為郵箱客戶端在解析HTML的時候,有可能會將換行符解析成
,因此壓縮HTML不保留任何空格和換行符是最保險的做法。

詳細的HTML代碼,大家可以看源代碼中的 index_detail.html .

3.Python代碼

發送郵件的方法,我們在 人人都能懂的 Python 自動發送郵件教程 中已經詳細地講過了:

class Mail:
    """
    郵件相關類
    """

    def log(self, content):
        now_time = time.strftime(
            "%Y-%m-%d %H:%M:%S", time.localtime()
        )
        print(f'{now_time}: {content}')

    def sendmail(self, html, title, receivers):
        """
        發送郵件
        Arguments:
            html {str} -- 郵件正文(html)
            title {str} -- 郵件標題
            receivers {list} -- 郵件接收者,數組
        """

        yag = yagmail.SMTP(
            host='您的郵箱SMTPHOST', user='您的郵箱',
            password='您的郵箱密碼', smtp_ssl=True
        )

        yag.send(receivers, title, html)
        self.log("郵件發送成功")

此外,為了渲染圖片,需要將圖片轉化為base64,這個方法是這樣的:

def get_image_base64(path):
    """
    獲得圖片的base64編碼

    Args:
        path (str): 圖片路徑

    Returns:
        str: base64編碼
    """
    import base64
    f = open(path, "rb")
    base64_data = base64.b64encode(f.read())
    f.close()
    return base64_data.decode("utf-8")

當然,最重要的地方是下面這段代碼,需要針對每個人定制祝福語,我們可以采用字典的數據結構來保存數據:

bless_info = {
    "admin@pythondict.com": {
        "pythondict_img": get_image_base64("./images/pythondict.png"),
        "name": "實用寶典",
        "background": "https://背景圖片.jpg",
        "bless": "愿所有的幸運與您不期而遇..",
        "title": "祝寶典哥明年粉絲破十萬"
    },
    "test@qq.com": {
        "pythondict_img": get_image_base64("./images/pythondict.png"),
        "name": "老王",
        "background": "https://背景圖片.jpg",
        "bless": "祝您女兒明年考研順順利利,全家幸福安康..",
        "title": "老王,祝您元旦快樂!"
    },
}

可以看到 bless_info 字典里的每個key是發送對象的郵箱,而這些 key 對應的value 中就有需要渲染到郵件的變量: pythondict_img , name , **background **及 祝福語 bless . 最后一個變量title,是用于指定郵件標題的。

這樣,渲染+發送郵件做起來就方便多了:

tm = Template(open('./index.html', encoding="utf-8").read())
for mail in bless_info:
    msg = tm.render(bless_info[mail])
    Mail().sendmail(html=msg, title=bless_info[mail]["title"], receivers=[mail])

Mail().sendmail():是我們的發送郵件函數,應該不必多說。

bless_info[mail]:是需要渲染的變量,這里面的變量少了可不行,多了沒關系。

bless_info[mail]["title"]:就是剛剛在字典里指定的最后一個變量 title

由于 sendmail() 函數里的 receivers 是支持多人的,因此這里需要以數組的形式傳入函數。

不過這里還有一個有趣的改進,如果你需要用同一個模板郵件發送給同一家人,你可以這么做:

bless_info = {
    ...,
    "test1@qq.com,test2@qq.com,test3@qq.com": {
        "pythondict_img": get_image_base64("./images/pythondict.png"),
        "name": "老王一家",
        "background": "https://背景圖片.jpg",
        "bless": "祝王小女明年考研順順利利,老王全家幸福安康,吉祥如意..",
        "title": "老王一家,祝你們元旦快樂!"
    },
}

tm = Template(open('./index.html', encoding="utf-8").read())
for mail in bless_info:
    msg = tm.render(bless_info[mail])
    Mail().sendmail(html=msg, title=bless_info[mail]["title"], receivers=mail.split(","))

沒錯,只需要在key里將這一家人的郵箱用逗號分隔開,然后receivers里改為mail.split(","),你就能實現同一份郵件發給一家人的功能,是不是非常方便?

大家可以自己找喜歡的背景圖片,也可以用我在代碼里已給大家提供的圖片。想要去除LOGO的話,直接將pythondict_img設為空,或者設為你自己的卡片即可。

在源代碼目錄下運行代碼:

python mail.py

即可成功發送郵件,快打開編輯器試一下吧(記得先測試)!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 郵件
    +關注

    關注

    0

    文章

    32

    瀏覽量

    18808
  • HTML
    +關注

    關注

    0

    文章

    278

    瀏覽量

    35379
  • 字符串
    +關注

    關注

    1

    文章

    579

    瀏覽量

    20518
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84690
收藏 人收藏

    評論

    相關推薦

    Labview發送notes郵件

    請前輩點撥如何用labview發送notes郵件,公司用這個郵件系統,但是通過用例的方式是無法發出郵件的,求教
    發表于 07-21 09:43

    何用python中的serial向串口發送和接收數據?

    何用python中的serial向串口發送和接收數據?
    發表于 11-22 06:35

    何用Foxmail Server搭建郵件服務器

    何用Foxmail Server搭建郵件服務器 Foxmail Server(以下簡稱FMS)可以搭建出功能強大的郵件服務器。本文以FMS For Windows 2.0為例,從其設置、管理、收
    發表于 01-27 17:05 ?1349次閱讀

    C#教程之調用Outlook發送郵件

    C#教程之調用Outlook發送郵件,很好的C#資料,快來學習吧。
    發表于 04-20 15:27 ?4次下載

    如何向您選擇的某人發送電子郵件

    您可以通過單擊左側的“發送”選項卡來確認您的電子郵件是否已發送。它將顯示您發送的所有電子郵件。如果未顯示最近
    的頭像 發表于 12-13 16:35 ?5047次閱讀
    如何向您選擇的某人<b class='flag-5'>發送電子郵件</b>

    Python怎么批量生成PDF文檔

    這種模板套用的場景下,使用Python進行自動就尤為方便,用最短的時間辦最高效的事。 今天就給大家講講如何用Python自動套用模板批量
    的頭像 發表于 02-28 10:11 ?1138次閱讀
    <b class='flag-5'>Python</b>怎么<b class='flag-5'>批量</b>生成PDF文檔

    基于SpringBoot實現郵件發送

    本項目通過Springboot發送email郵件,包括普通文本郵件 、HTML內容板式郵件 、包含靜態資源郵件以及帶附件
    的頭像 發表于 02-28 14:58 ?1262次閱讀
    基于SpringBoot實現<b class='flag-5'>郵件</b><b class='flag-5'>發送</b>

    何用python郵件呢?

    先做一些準備,把郵件SMTP服務器、收發mail、郵件標題和正文準備好。
    的頭像 發表于 03-06 14:49 ?777次閱讀

    何用python發送接收郵件

    SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。
    的頭像 發表于 07-11 09:30 ?947次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>python</b><b class='flag-5'>發送</b>接收<b class='flag-5'>郵件</b>

    何用Python自動套用模板批量生成PDF文檔

    今天就給大家講講如何用Python自動套用模板批量生成的PDF文檔。 1.準備 開始之前,你要確保Python和pip已經成功安裝在電腦上噢,如果沒有,請訪問這篇文章: 超詳細
    的頭像 發表于 10-17 10:54 ?986次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>Python</b>自動套用模板<b class='flag-5'>批量</b>生成PDF文檔

    怎么用Python構建一個自動發送郵件的腳本

    ? 類似的應用場景還有很多,不僅僅是在股票策略提醒上,比如定時向某些人發送郵件;網站宕機了,實時發送郵件提醒;網站負載過高,發送
    的頭像 發表于 10-21 14:47 ?765次閱讀
    怎么用<b class='flag-5'>Python</b>構建一個自動<b class='flag-5'>發送</b><b class='flag-5'>郵件</b>的腳本

    何用Python自動套用模板批量生成PDF文檔

    日常辦公中,經常會使用PDF文檔,難免需要對PDF文檔進行編輯,有時候PDF文檔中的大部分內容都是一樣的,只是發送對象不同。 這種模板套用的場景下,使用Python進行自動就尤為方便,用最短的時間
    的頭像 發表于 10-31 10:56 ?1581次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>Python</b>自動套用模板<b class='flag-5'>批量</b>生成PDF文檔

    怎么用Python構建一個自動發送郵件的腳本

    呢? 類似的應用場景還有很多,不僅僅是在股票策略提醒上,比如定時向某些人發送郵件;網站宕機了,實時發送郵件提醒;網站負載過高,發送
    的頭像 發表于 10-31 16:36 ?553次閱讀
    怎么用<b class='flag-5'>Python</b>構建一個自動<b class='flag-5'>發送</b><b class='flag-5'>郵件</b>的腳本

    利用Python發送郵件的 3 種方式

    1. 前言 郵件,作為最正式規范的溝通方式,在日常辦公過程中經常被用到 我們都知道 Python內置了對 SMTP 的支持,可以發送純文本、富文本、HTML 等格式的郵件 本文將聊聊利
    的頭像 發表于 11-02 11:37 ?970次閱讀

    如何使用Python編寫腳本來自動發送郵件

    Python是一種非常流行的編程語言,可以用于多種用途,包括自動任務。其中一個常見的自動任務是自動發送郵件。在本文中,我們將介紹如何使用
    的頭像 發表于 12-07 11:36 ?1366次閱讀
    主站蜘蛛池模板: 亚洲视频福利| 国产午夜免费一区二区三区| yy4080午夜理论一级毛片| 乱肉情欲杂乱小说| 人人舔人人爱| 校园春色亚洲欧美| 一区二区不卡视频在线观看| 四虎影视4hu4虎成人| 国产成在线人视频免费视频| 国产理论片在线观看| 在线啪| 黄 色 片免费观看| 久久狠狠躁免费观看| 一级做a爱片久久毛片| 国产在线精彩视频二区| 精品免费福利视频| 亚洲综合色吧| 成年网站在线看| 久久男人视频| 日韩毛片高清免费| 天天综合在线视频| 亚洲免费在线观看视频| 欧美精品1| 久久免费国产| 又粗又硬又大久久久| 男人女人的免费视频网站| 色天使色婷婷丁香久久综合| 亚洲午夜久久影院| 日本aaaaa级片| 激情五月综合综合久久69| yyy6080韩国三级理论| 色批网站| 免费观看欧美一级高清| 亚洲qingse中文久久网| 亚洲理论视频| 成人国产三级在线播放| 丁香婷婷综合五月综合色啪| 国产性猛交xx乱| 美女教师一级毛片| 永久免费看的啪啪网站| 日本高清午夜色wwwσ|