[英]How to send email attachments using python httplib2 with Mailgun
[英]Send an email via Mailgun with Python httplib library
遵循Mailgun教程之后,我可以通過Mailgun在Python中使用請求庫發送電子郵件。
我需要在Python中使用“ httplib”(不是請求!)來發送電子郵件。 但是,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": "myemail@domain.com",
"to": "youremail@domain.com",
"subject": "TESTING EMAIL",
"text": "TESTING EMAIL",
"html": "<p>TESTING EMAIL</p"
}
)
如何將該示例轉換為在Python中使用“ httplib”庫的代碼?
以下對我有用。
import httplib
import base64
import urllib
params = urllib.urlencode({
'from': 'from@someone.com',
'to': 'to@someone.com',
'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庫
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.