【问题标题】:Send an email via Mailgun with Python httplib library使用 Python httplib 库通过 Mailgun 发送电子邮件
【发布时间】:2015-11-26 01:26:19
【问题描述】:

按照 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”库的代码?

【问题讨论】:

    标签: python http-headers python-requests mailgun httplib


    【解决方案1】:

    以下对我有用。

    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()
    

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

    【讨论】:

    • 嗨@Isaac,有机会我会更新代码示例。
    【解决方案2】:

    我使用这个函数通过 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...
    

    【讨论】:

      【解决方案3】:

      我找到了解决这个问题的方法,我使用了 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)
      

      【讨论】:

        猜你喜欢
        • 2016-10-06
        • 1970-01-01
        • 2022-10-01
        • 1970-01-01
        • 2017-10-12
        • 2016-10-26
        • 1970-01-01
        • 2017-07-02
        • 2016-01-24
        相关资源
        最近更新 更多