簡體   English   中英

通過Mailgun和Python httplib庫發送電子郵件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM