日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python怎么发图文_用Python发一封图文并茂的邮件

發布時間:2024/7/19 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python怎么发图文_用Python发一封图文并茂的邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近使用了不少通訊工具的接口, 比如企業微信機器人,釘釘,微信公眾號的接口(未認證的訂閱公眾號),相對于郵件來說,它們的表現形式太弱。比如沒有更豐富的版本方式。當然了,并不是說表現形式越棒就是約好的通知手段,這個依個人情況而定,而我恰恰需要比較豐富的表現形式,最終還是回到了郵件,郵件真香!

而個人微信號的接口我沒有合適的微信號可以登錄,如果網頁版微信沒有被封的話,我想這個是表現形式與消息時效性結合的最好的方式。

環境

雖說就發郵件這么個小事,很容易兼容Python2, Python3, 但是大家還是擁抱Python3吧, 我這里沒有做python2的兼容寫法,所以需要python3以上。

郵件的格式

郵件的格式主要就兩種: plain和html

plain就像一個普通的文本, 沒有格式。

html就如其名, 是html的格式,相當于一個郵件就是一個靜態的網頁,這樣的話可玩性就很高了,你可以通過css控制表現形式.

注意: 這里的css雖然語法一樣,但,是否與瀏覽器渲染結果完全一致, 是不一定的。

那么可能有人要問了,我要發一個動態的網頁怎么辦? 發個鏈接呀

郵箱賬號

無論是QQ郵箱抑或網易郵箱都是沒有問題的,重要的是有一個可以通過smtp服務器發送郵件的賬戶名及密碼,這里大家百度吧。

發送郵件的代碼

因為發送郵件的代碼在下面每個步驟都是一樣的所以線貼出來

def send_email(msg, mail_to, smtp_host, smtp_username, smtp_password, subject, from_):

msg["Subject"] = Header(subject, "utf-8")

msg["From"] = Header(from_, "utf-8")

if not isinstance(mail_to, list):

mail_to = [mail_to]

msg["To"] = COMMASPACE.join(mail_to)

try:

print("準備連接smtp郵件服務器: %s" % smtp_host)

client = smtplib.SMTP(smtp_host)

print("連接成功")

# client = smtplib.SMTP("localhost")

# client.set_debuglevel(1)

# print(self.mail_user, self.mail_pass)

client.login(smtp_username, smtp_password)

print("登錄成功")

# print("=====>", self.mail_from, mail_to)

print("通過郵箱[%s]發送郵件給 %s" % (smtp_username, COMMASPACE.join(mail_to)))

client.sendmail(smtp_username, mail_to, msg.as_string())

print("發送成功...")

return True

except Exception:

print("發送郵件失敗")

finally:

client.quit()

如果遇到郵件發送的問題可以將client.set_debuglevel(1)的注釋取消,這樣會顯示足夠多的debug信息用于排查問題。

發送本地圖片

這里發送圖片的意思是指, 圖片內嵌在郵件中而不是以附件的形式出現。

效果如下:

代碼如下:

EMAIL_IMAGE_TEMPLATE = """

Page Title

這是一張圖片

"""

def create_image_eamil_contant(fp):

tpl = Template(EMAIL_IMAGE_TEMPLATE)

if not path.exists(fp):

sys.exit("要發送的本地圖片不存在")

msg = MIMEMultipart("related")

image_name = "demo"

with open(fp, "rb") as rf:

mime_image = MIMEImage(rf.read())

# 注意: 一定需要<>括號

mime_image.add_header("Content-ID", "" % image_name)

msg.attach(mime_image)

# 渲染郵件文本內容

text = tpl.render(image_name=image_name)

msg_alternative = MIMEMultipart("alternative")

msg_alternative.attach(MIMEText(text, "html", "utf-8"))

msg.attach(msg_alternative)

return msg

如果你使用過python的web框架,你對文本的渲染一定不陌生,因為大多數web框架都支持文本渲染,這里使用的jinja2.

發送程序生成的照片

其實這里跟上面沒什么區別的,唯一的區別就是是否保存在本地,既然能發送本地圖片,我就先保存到本地然后再按照上面的方式不久可以了么? 首先這個方法是沒有問題的,不過多了一次IO, 能在內存中解決的事為什么要放到本地呢?

這種情況主要是應對回去圖片的方式是從其他接口獲取到的,或者實時生成的時候。雖然很簡單,但覺得說說也挺有意思的。

這里的模擬方式是假設在網上獲取到了多張base64編碼的圖片,需要將其組合在一起,然后在不保存在本地情況下直接發送這張照片。

這個base64編碼的圖片已經保存在本地了,名字是demo_base64.txt

效果如下:

代碼如下:

EMAIL_ONLINE_IMAGE_TEMPLATE = """

Page Title

這是一張圖片

"""

def create_online_image_content():

from PIL import Image

tpl = Template(EMAIL_ONLINE_IMAGE_TEMPLATE)

fp = "demo_base64.txt"

if not path.exists(fp):

sys.exit("要發送的base64編碼的圖片不存在")

msg = MIMEMultipart("related")

image_name = "demo"

with open(fp, "rb") as rf:

base64_data = rf.read()

img_data = base64.b64decode(base64_data)

# 因為open方法需要一個file-like文件對象,而我們解碼后的對象類型是bytes類型

# bytes類型沒有文件對象的read, close方法,所以我們需要通過BytesIO對象包裝一下,它會返回一個file-like文件對象

img = Image.open(BytesIO(img_data))

img_width, img_height = img.size

repeat_times = 5

# compose images

ret_img = Image.new(img.mode, (img_width, img_height * repeat_times))

for index in range(repeat_times):

ret_img.paste(img, box=(0, index * img_height))

# 因為MIMEImage需要一個bytes對象,所以們需要獲取圖片編碼后的二進制數據而不是圖片的array數據

img_bytes = BytesIO()

# 如果不指定圖片格式,會因為沒有文件名而報錯

ret_img.save(img_bytes, "png")

mime_image = MIMEImage(img_bytes.getvalue())

# 注意: 一定需要<>括號

mime_image.add_header("Content-ID", "" % image_name)

msg.attach(mime_image)

# 渲染郵件文本內容

text = tpl.render(image_name=image_name)

msg_alternative = MIMEMultipart("alternative")

msg_alternative.attach(MIMEText(text, "html", "utf-8"))

msg.attach(msg_alternative)

return msg

這里很有意思一點是用BytesIO模擬file-like對象。這里需要安裝PIL哦

發送一個帶樣式的靜態網頁

前面的代碼已經足夠說明圖片怎么發了,這里通過一個寫了css樣式的表格進行演示

效果如下:

代碼如下:

EMAIL_TEMPLATE = """

table

{

border-collapse: collapse;

margin: 0 auto;

text-align: center;

}

table td, table th

{

border: 1px solid #cad9ea;

color: #666;

height: 30px;

}

table thead th

{

background-color: #CCE8EB;

width: 100px;

}

table tr:nth-child(odd)

{

background: #fff;

}

table tr:nth-child(even)

{

background: #F5FAFA;

}

一共有以下{{record_size}}條數據

{% for label in labels %}

{{label}}

{% endfor %}

{% for item in items %}

{% for value in item %}

{{value}}

{% endfor %}

{% endfor %}

"""

def create_html_content():

tpl = Template(EMAIL_TEMPLATE)

record_size = 10

label_size = 5

labels = ["label-%s" % i for i in range(label_size)]

items = []

for _ in range(record_size):

item = ["item-%s" % value_index for value_index in range(label_size)]

items.append(item)

text = tpl.render(record_size=record_size, items=items, labels=labels)

msg = MIMEText(text, "html", "utf-8")

return msg

源代碼地址

如果期待后續文章可以關注我的微信公眾號(又耳筆記),頭條號(又耳筆記),github.

后記

其實發送一個附件也是不錯的方式,比如發送一個生成的PDF, PDF是一個很棒的文件格式。但是PDF暫時沒用到,以后有機會再說吧。最后要注意的是,手機端的顯示效果跟電腦網頁版的顯示效果是不一樣的。

參考鏈接

總結

以上是生活随笔為你收集整理的python怎么发图文_用Python发一封图文并茂的邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本黄色高清 | 黄色尤物视频 | a视频网站| 国产主播在线看 | 国产成人一区在线观看 | 福利视频午夜 | 国产精品99久久久久久大便 | 色悠悠在线视频 | 日本久久精品视频 | 深爱开心激情 | 国产99久久久国产精品成人免费 | 538在线精品 | 久久久久久久国产精品毛片 | 国产精品久久久久野外 | 国产日本视频 | 伦理亚洲 | 成人激情视频在线观看 | 97插插插 | 日日操夜夜爽 | 四虎成人精品永久免费av九九 | av第一页 | 99精品欧美 | 天天看毛片 | 国产偷人爽久久久久久老妇app | 国产又粗又黄又爽又硬的视频 | 成人a视频在线观看 | 呦呦精品 | 国产内射一区二区 | 日日夜夜天天干 | 91精品国产自产在线观看 | 综合激情久久 | 中文字幕资源站 | 成人片在线视频 | 黑人操少妇 | 欧美日韩免费高清一区色橹橹 | 国产精品178页| 日韩精品免费看 | 美女裸片| 国产97免费视频 | 影音先锋男人天堂 | 亚洲中文一区二区三区 | 熟女俱乐部一区二区视频在线 | 亚欧日韩av | 成人青青草 | 亚洲永久网站 | 亚洲精品福利 | 四季av一区二区夜夜嗨 | 999这里只有精品 | 国产精品视频全国免费观看 | 麻豆短视频在线观看 | 亚洲第一页av | 日韩激情小视频 | 中文字幕日日 | 综合图区亚洲 | 娇妻之欲海泛舟无弹窗笔趣阁 | 青青草视频在线免费观看 | 精品国产视频一区二区三区 | 亚洲h| 国产污视频| 97毛片| 涩涩视频免费在线观看 | 无码人妻少妇色欲av一区二区 | 欧美老肥妇做.爰bbww视频 | 成人黄色性视频 | 国产在线欧美 | 午夜黄色网址 | 可以在线看的av | 欧美成人做爰大片免费看黄石 | 国产乱淫a∨片免费观看 | 男女羞羞动态图 | 国产伦精品一区二区三区在线观看 | 免费看国产曰批40分钟粉红裤头 | 国产91免费在线观看 | 欧美疯狂做受xxxxx高潮 | 精品久久在线观看 | 成人免费福利视频 | 成年人视频在线观看免费 | 欧美又粗又大xxxxbbbb疯狂 | 日本成人在线免费 | 免费麻豆 | 69精品人妻一区二区三区 | 国产av一区二区三区精品 | 国产aⅴ激情无码久久久无码 | 精品人妻一区二区乱码 | 日韩欧美一区二 | 福利国产在线 | 99r在线视频 | 免费看美女被靠到爽的视频 | 国产12页| 国产宾馆实践打屁股91 | 日本成人毛片 | 欧美区视频 | 欧美视频一区二区 | 黄色小视频免费观看 | 欧美操老女人 | 91色精品 | 亚洲欧美国产日韩精品 | 国产又大又粗又长 | 亚洲一本在线观看 |