Envio de Imagens Inline de Mailgun em HTML usando a biblioteca Solicitações do Python
Estou tendo problemas para descobrir como posso enviar várias mensagens sequenciais usando a API Mailgun, a partir de um aplicativo Python usando a biblioteca de solicitações. Atualmente eu tenho (usando jinja2 para templates e flask como o webframework, hospedado no Heroku):
def EmailFunction(UserEmail):
Sender = '[email protected]'
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
Então o e-mail envia bem, mas nenhuma imagem está no e-mail no final. Quando clico para baixá-los, eles não são exibidos. As imagens são referenciadas no HTML de acordo com a api mailgun (simplificada, claro!);
<img src="cid:img1.jpg"/>
<img src="cid:img2.jpg"/>
etc ...
Claramente eu estou fazendo algo errado, no entanto eu tentei anexar estes usando o objeto requests.files, que nem sequer enviar o e-mail e não deu nenhum erro, então eu suponho que não é o caminho certo em tudo.
Infelizmente, a documentação sobre isso é bastante esparsa.
Seria melhor que o HTML apontasse diretamente as imagens do lado do servidor? No entanto, isso não é ideal, já que as imagens do lado do servidor em geral não serão estáticas (algumas vão, outras não).