[解決済み] 画像を埋め込んだマルチパート html メールを送信する
2023-03-03 04:14:36
質問
Pythonのemailモジュールで遊んでいるのですが、htmlに含まれる画像を埋め込む方法を知りたいのです。
例えば、本文が以下のような場合
<img src="../path/image.png"></img>
を埋め込みたいのですが
画像.png
をメールに埋め込みたいのですが、その際に
src
属性は、次のように置き換えます。
content-id
. 誰かこの方法を知っていますか?
どのように解決するのですか?
Pythonバージョン3.4以上の場合。
受け入れられた答えは素晴らしいですが、古いPythonバージョン(2.xと3.3)にしか適していません。私は、それが更新を必要とすると思います。
新しいPythonのバージョン(3.4以上)でできる方法はこちらです。
from email.message import EmailMessage
from email.utils import make_msgid
import mimetypes
msg = EmailMessage()
# generic email headers
msg['Subject'] = 'Hello there'
msg['From'] = 'ABCD <[email protected]>'
msg['To'] = 'PQRS <[email protected]>'
# set the plain text body
msg.set_content('This is a plain text body.')
# now create a Content-ID for the image
image_cid = make_msgid(domain='xyz.com')
# if `domain` argument isn't provided, it will
# use your computer's name
# set an alternative html body
msg.add_alternative("""\
<html>
<body>
<p>This is an HTML body.<br>
It also has an image.
</p>
<img src="cid:{image_cid}">
</body>
</html>
""".format(image_cid=image_cid[1:-1]), subtype='html')
# image_cid looks like <[email protected]>
# to use it as the img src, we don't need `<` or `>`
# so we use [1:-1] to strip them off
# now open the image and attach it to the email
with open('path/to/image.jpg', 'rb') as img:
# know the Content-Type of the image
maintype, subtype = mimetypes.guess_type(img.name)[0].split('/')
# attach it
msg.get_payload()[1].add_related(img.read(),
maintype=maintype,
subtype=subtype,
cid=image_cid)
# the message is ready now
# you can write it to a file
# or send it using smtplib
関連
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] Pythonの上達の道 - 見習いから第一人者へ
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み】Pythonのモジュール/パッケージの書き方は?
-
[解決済み】Linuxのコマンドラインを使用して、電子メールの添付ファイルとしてファイルを送信する方法は?
-
[解決済み] htmlメールに画像を埋め込む
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?