2

添付ファイル付きのメールを、requests.postを使用してMailgun APIで送信しようとしています。Pythonを使用してMailgunで添付ファイルを送信する

import requests 
MAILGUN_URL = 'https://api.mailgun.net/v3/sandbox4f...' 
MAILGUN_KEY = 'key-f16f497...' 


def mailgun(file_url): 
    """Send an email using MailGun""" 

    f = open(file_url, 'rb') 

    r = requests.post(
     MAILGUN_URL, 
     auth=("api", MAILGUN_KEY), 
     data={ 
      "subject": "My subject", 
      "from": "[email protected]", 
      "to": "[email protected]", 
      "text": "The text", 
      "html": "The<br>html", 
      "attachment": f 
     }, 
     headers={'Content-type': 'multipart/form-data;'}, 
    ) 

    f.close() 

    return r 


mailgun("/tmp/my-file.xlsx") 

私はコンテンツのことを確認するために、ヘッダーを定義した:彼らはあなたが添付ファイルを送信するとき、私はこれをしようとしている multipart/form-dataエンコーディングを使用しなければならないことを警告し、そのドキュメントで

タイプはマルチパート/フォームデータですが、私がコードを実行すると、理由があるステータスが400になります:不正リクエスト

何が問題なのですか? 私は私がマルチパート/フォームデータを使用していと私が正しくあなたがfilesキーワード引数を使用する必要が添付パラメータ

+0

ウェブ上で何かをする前に、この[documentation](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)を調べることをお勧めします。エラーコードを知っていれば、バグを探す場所をすぐに知ることができます。この場合、一部のパラメータが欠けているか、間違って処分されている – limbo

答えて

4

を使用していることを確認してください必要があります。 Hereはリクエストのドキュメントです。

そしてMailgunのドキュメントからの例:これはあなたのために正常に動作する必要があり

r = requests.post(
    MAILGUN_URL, 
    auth=("api", MAILGUN_KEY), 
    files = [("attachment", f)], 
    data={ 
     "subject": "My subject", 
     "from": "[email protected]", 
     "to": "[email protected]", 
     "text": "The text", 
     "html": "The<br>html" 
    }, 
    headers={'Content-type': 'multipart/form-data;'}, 
) 

def send_complex_message(): 
    return requests.post(
     "https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages", 
     auth=("api", "YOUR_API_KEY"), 
     files=[("attachment", open("files/test.jpg")), 
       ("attachment", open("files/test.txt"))], 
     data={"from": "Excited User <[email protected]_DOMAIN_NAME>", 
       "to": "[email protected]", 
       "cc": "[email protected]", 
       "bcc": "[email protected]", 
       "subject": "Hello", 
       "text": "Testing some Mailgun awesomness!", 
       "html": "<html>HTML version of the body</html>"}) 

そうにあなたのPOSTを変更します。

関連する問題