利用发送Mailgun内嵌图像的HTML请求的Python库(Sending Mailgun Inl

2019-07-21 06:01发布

我无法工作了我如何使用Mailgun API发送多个在线的消息,使用请求库Python应用程序。 目前,我有(使用Jinja2的模板和烧瓶作为webframework,托管在Heroku上):

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

因此,电子邮件发送罚款,但没有图像是在年底的电子邮件。 当我点击下载他们,他们不显示。 的图像在HTML引用为每mailgun API(简化当然!);

<img src="cid:img1.jpg"/>
<img src="cid:img2.jpg"/>
etc ...

显然,我做错了什么,但是我尝试使用requests.files对象,其中甚至没有发送电子邮件附上这些,所以我认为是不是在所有正确的方式给没有错误。

可悲的是这个文件是相当稀疏。

它会更好有HTML直接指向服务器端的图像? 然而,这并不理想,因为在一般的服务器端图像不会是静态的(有些人会,有些不会)。

Answer 1:

发送内嵌图像是记录在这里 。

在HTML中,你会引用这样的形象:

<html>Inline image here: <img src="cid:test.jpg"></html>

然后,定义一个Multidict,张贴文件的API:

files=MultiDict([("inline", open("files/test.jpg"))])

信息披露,我为Mailgun工作。 :)



文章来源: Sending Mailgun Inline Images in HTML using Python Requests library