继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的”库的代码?
以下为我工作。
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()
如果您需要发送附件,然后它需要更多的工作。
我用这个功能来发送电子邮件与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...
我能找到解决这个问题,我用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)