Mailgun API を使用して添付ファイル付きのメールを送信しようとしています。これは、curl を使用して簡単に実現できます。
curl -V -s --user 'XXX' \
https://api.eu.mailgun.net/v3/XXX/messages \
-F from='Excited User <YOU@YOUR_DOMAIN_NAME>' \
-F to='XXXX' \
-F subject='Hello' \
-F text='Testing some Mailgun awesomness!' \
--form-string html='<html>HTML version of the body</html>' \
-F attachment=@files/example.csv
python の requests ライブラリを使用しても同じです。しかし、httpx ライブラリを使用して同じことをしようとすると:
build_request_kwargs: dict = {
"url": "/messages",
"method": "POST",
"data": {
"template": "template_name",
"from": from_,
"to": to,
"subject": subject,
"h:X-Mailgun-Variables": json.dumps(template_data),
},
"files": [("file", ("file", io.BytesIO(b"<file content>")))]
}
client = httpx.AsyncClient(base_url=base_url, auth=("api", api_key))
async with client:
request = client.build_request(**build_request_kwargs)
response = await client.send(request)
response.raise_for_status()
電子メールは配信されますが、添付ファイルはありません。各ファイルのエンコーディングをに設定しようとしましapplication/octet-stream
たが、どちらも機能しませんでした。curl または requestsmultipart/form-data
リクエストと httpx の違いがわかりません。