2

私は EmailMultiAlternatives クラスを使用して、django でテキストと HTML メールを送信しています。ダミーコードでテストしているときに、テキストを含む画像を追加したいと思いました。

msg = EmailMultiAlternatives('My subject','some text here', 'from@domain.com', ['to@my_domain.com'])
msg.attach_alternative('<p>here is what I was talking about</p> <img src="logo.png" alt="logo_here" /> <div>You see???</div>', 'text/html')
msg.attach_file('/var/my_site/static/images/logo.png')
msg.send()

問題は、電子メールクライアントで画像が表示されないことです...

生のメールを見て、これを見つけました:

--===============1013820581535380480==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

<p>here is what I was talking about</p> <img src=3D"logo.png" alt=3D"logo_h=
ere" /> <div>You see???</div>
--===============1013820581535380480==--

誰かが私が間違っていることを知っていますか??

ありがとう!

編集: HTML メールに画像を埋め込むことができました。EmailMultiAlternatives には、MimeImage オブジェクトを受け入れることができる attach メソッドがあるようです。実際には、MimeBase から継承するものは何でも受け入れることができます。

fp = open('test.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

mimeImage = MimeImage(fp.read())
mimeImage.add_header('Content-ID', '<logo.png>')
msg.attach(mimeImage)
msg.send()
4

2 に答える 2

1

これは部分的な解決策にすぎません。Thunderbird でメールを作成して画像を埋め込むと (メッセージを表示すると画像が表示されます)、ソースは次のようになります。

--------------070800070205000904000708
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<img alt="asdsa" src="cid:part1.08020903.07040100@grsites.com"
 height="38" width="150"><br>
</body>   
</html>

--------------070800070205000904000708
Content-Type: image/jpeg;
 name="added.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.08020903.07040100@grsites.com>
Content-Disposition: inline;
 filename="added.jpg"

その後、画像の内容が続きます。画像タグの URL は、添付画像のコンテンツ ID である必要があります。それを指定する方法がわかりません。

編集: Django の EmailMultiAlternatives の代わりに、標準ライブラリの email モジュールを使用して実行できるようです。ここを参照してください: http://code.activestate.com/recipes/473810/

于 2009-10-21T01:53:30.703 に答える