Requestsライブラリを使用するPythonアプリから、MailgunAPIを使用して複数のインラインメッセージを送信する方法を理解するのに問題があります。現在、私は(HerokuでホストされているWebフレームワークとしてテンプレートとフラスコにjinja2を使用しています):
def EmailFunction(UserEmail):
Sender = 'testing@test.co.uk'
Subject = 'Hello World'
Text = ''
name = re.sub('@.*','',UserEmail)
html = render_template('GenericEmail.html', name=name)
images = []
imageloc = os.path.join(dirname, 'static')
images.append(open(os.path.join(imageloc,'img1.jpg')))
images.append(open(os.path.join(imageloc,'img2.jpg')))
send_mail(UserEmail,Sender,Subject,Text,html,images)
return html
def send_mail(to_address, from_address, subject, plaintext, html, images):
r = requests.\
post("https://api.mailgun.net/v2/%s/messages" % app.config['MAILGUN_DOMAIN'],
auth=("api", app.config['MAILGUN_KEY']),
data={
"from": from_address,
"to": to_address,
"subject": subject,
"text": plaintext,
"html": html,
"inline": images
}
)
return r
したがって、電子メールは正常に送信されますが、最後に画像が電子メールに含まれていません。クリックしてダウンロードしても表示されません。画像は、mailgun APIに従ってHTMLで参照されます(もちろん簡略化されています)。
<img src="cid:img1.jpg"/>
<img src="cid:img2.jpg"/>
etc ...
明らかに私は何か間違ったことをしていますが、requests.filesオブジェクトを使用してこれらを添付しようとしましたが、メールも送信されず、エラーも発生しなかったため、これはまったく正しい方法ではないと思います。
悲しいことに、これに関するドキュメントはかなりまばらです。
HTMLがサーバー側の画像を直接指すようにする方がよいでしょうか?ただし、サーバー側のイメージは一般に静的ではないため、これは理想的ではありません(静的なものもあれば、そうでないものもあります)。