簡體   English   中英

使用python發送時如何在電子郵件簽名中包含內嵌圖像?

[英]How to include inline images in e-mail signature when sent out with python?

如何發送帶有用於簽名的內嵌圖像的 python 電子郵件? 目前,我使用一個鏈接來顯示這樣的圖像:

<img border="0" src="https://website.com/logo.png" role="presentation" alt="logo mail icon" style="max-width: 300px; width: 300px; display: block;">

但是在 Outlook 中,圖像沒有加載,用戶需要點擊“顯示圖像”,這會破壞電子郵件,因為我將它用於商業目的(這是一個用於注冊的確認鏈接)。 有沒有辦法如何內聯顯示圖像並通過電子郵件而不是鏈接發送它們?

到目前為止我的代碼:

from email.message import EmailMessage
import smtplib, ssl
import email.utils
import html2text

with open(html_template, 'r') as f:
        html_string = f.read()

plain_text = html2text.html2text(html_string)

msg               = EmailMessage()
msg['Subject']    = subject
msg['From']       = mail_address
msg['To']         = email_receiver
msg['Date']       = email.utils.formatdate()
msg.add_header('Content-Type','text/html')
msg.add_header('Content-Disposition', 'attachment', filename=file_attachment)
msg.set_content(plain_text)
msg.add_alternative(html_string.format(name=surname), subtype='html')

files = [file_attachment]
for file in files:
    with open(file, 'rb') as f:
        file_data = f.read()
        file_name = f.name
    msg.add_attachment(file_data, maintype='application', subtype='octet-stream', filename=file_name)

with smtplib.SMTP(smtp, port) as smtp:
    smtp.ehlo()
    smtp.starttls(context=ssl.create_default_context())
    smtp.ehlo()
    smtp.login(mail_address, mail_password)

try:
    smtp.send_message(msg)
    smtp.quit()

except Exception as e:
    print('ERROR')

我找不到太多方法或解決方案。 我讀過有關將圖像編碼為 base64 的內容,但我有點困惑。

提前致謝!

要內聯顯示圖像,您必須在電子郵件本身中提供圖像數據。 您可以通過使用圖像數據的 base64 編碼字符串來實現。 這里有一個例子:

 <img alt="Website" width="16" height="16" style="border:none;" src="data:image/png;filename=web.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAABsAAAAbAFcG/0uAAABPElEQVQ4jaVT3U3DMBD+mgUSJqAbNEyQbkDYgL43Ejz7pUjkPZIHoBvUjNAJcDcoG7QTBH3mMzoikEC1dPL5/r+782wcR9jTdv09AFKD72cPYBu821rpV4C26+cAAoCF0Z91l0Z2oHnw7shHYZwjAN6PcnySLIo/S5ds5fMZQJlL0YNuOlaiONGV8sHsdv1MvC8AbhR9AHCNn8+7grD8NwCrQg17Dd7F4F1QRpZ8JbwH8ZRVtKEtfehbqNvB5EvlB+9OABKJP06aSZ+GEEZlOUnRmHctWe7HQuNEfhe/YP3zyQGG4N2SpPdGfBScpZoLYzfkMbKkdrI8ddv1eYSV+LlZLMhnPx0jMW/+M8a0ym3Xs9S8wjRigDsFS5AA7IwurXTwrs49YDksj0RsCUYeo3irIyXYF3+my74zgA9tApBUsNxB3wAAAABJRU5ErkJggg==" />

您可以使用在線轉換器來獲取您的 base64 字符串或直接在您的 Python 腳本中構建它:

import base64
encoded_string = base64.b64encode(open("image.png", "rb").read())

請記住,接收方郵件客戶端也可以阻止內嵌圖像,因此請始終提供適當的alt描述。

圖像必須是 base64 編碼,在將其實現到 html 標簽時,需要使用 .decode() 刪除 b' 前綴

import base64
encoded_string = base64.b64encode(open("image.png", "rb").read()).decode()

HTML代碼:

html = '''<img alt="Website" width="16" height="16" style="border:none;" src="data:image/png;filename=web.png;base64," />'''.format(logo=encoded_string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM