通过Mailgun发送电子邮件与Python httplib的库

问题描述 投票:0回答:3

继Mailgun教程中,我能够通过Mailgun与请求库发送电子邮件在Python。

我需要使用“httplib的”(未请求!)在Python中发送电子邮件。然而,Mailgun教程并没有提供如何使用httplib的任何实例。

# this is a "requests" example from the Mailgun tutorial
requests.post(
    "https://api.mailgun.net/v3/" + env.MG_SANDBOX_DOMAIN_NAME + "/messages",
    auth=("api", env.MG_KEY),
    files=[("attachment", open(my_PDF_full_path))],
    data={
        "from": "[email protected]",
        "to": "[email protected]",
        "subject": "TESTING EMAIL",
        "text": "TESTING EMAIL",
        "html": "<p>TESTING EMAIL</p"
    }
)

我怎么能转换这个例子使用Python中的“httplib的”库的代码?

python http-headers python-requests mailgun httplib
3个回答
1
投票

以下为我工作。

import httplib
import base64
import urllib

params = urllib.urlencode({
    'from': '[email protected]',
    'to': '[email protected]',
    'subject': 'This is a test',        
    'text': 'Hello\nThis is a test message.'
})

headers = {
    'Authorization': 'Basic {0}'.format(base64.b64encode("api:key-myapikey")),
    'Content-Type': 'application/x-www-form-urlencoded'
}

conn = httplib.HTTPSConnection("api.mailgun.net", 443)
conn.request('POST', '/v3/my-sandbox.mailgun.org/messages', params, headers)

response = conn.getresponse()   
print response.status, response.reason  
data = response.read()  
print data
conn.close()

如果您需要发送附件,然后它需要更多的工作。


1
投票

我用这个功能来发送电子邮件与Python3,无需外部库。

import urllib.request
import urllib.parse

def send_mg_mail(account='', key='', addr_to='', m_subject='', m_text=''):
    mg_url = 'https://api.mailgun.net/v3/{0}.mailgun.org/messages'.format(account)
    addr_from = "user <user@{0}.mailgun.org>".format(account)
    data = urllib.parse.urlencode({"from": addr_from, "to": addr_to, "subject": m_subject, "text":m_text})
    data = data.encode('ascii')
    auth_handler = urllib.request.HTTPBasicAuthHandler()
    auth_handler.add_password(user="api", realm='MG API', passwd=key, uri=mg_url)
    opener = urllib.request.build_opener(auth_handler)
    urllib.request.install_opener(opener)
    d = urllib.request.urlopen(mg_url, data)
    ret_code = str(d.code) + " " + d.reason
    print(ret_code)

关键是在格式:

key-<numbers>

检查mailgun帐户获得“帐户”的字符串,可能是这样的:

sandbox123456789abcdefgh...

0
投票

我能找到解决这个问题,我用multipart_encode和MultipartParam LIB

load = {
    "from": messages['from'],
    "to": messages['to'],
    "subject": messages['subject'],
    "text": messages['text'],
    "attachment": MultipartParam(
        "attachment",
        filename=messages['filename'],
        filetype='application/pdf',
        value=messages['attachment'])
}

payload, hd = multipart_encode(load)

hd['Authorization'] = 'Basic %s' % (base64.b64encode(api),)

resp = urlfetch.fetch(url=url, payload="".join(payload), method='POST', headers=hd, validate_certificate=True)
© www.soinside.com 2019 - 2024. All rights reserved.