У меня были некоторые проблемы с отправкой файлов через модуль отдыха python. Я могу отправлять электронные письма без вложений, но, как только я пытаюсь добавить параметр files, происходит сбой вызова, и я получаю ошибку 415.
Я просмотрел сайт и обнаружил, что это может быть потому, что я не отправлял тип содержимого файлов при создании этого массива данных, поэтому изменил его, чтобы запросить тип содержимого с помощью mimetypes; еще 415.
Эта тема: Python запрашивает загрузку файла внесла еще пару изменений, но все равно 415.
Сообщение об ошибке гласит:
"Не удалось найти поддерживаемый тип MIME, который соответствует типу содержимого ответа. Ни один из поддерживаемых типов (типов)"
Затем выводится список типов json, например: "application / json; odata.metadata = минимальный; odata.streaming = true; IEEE754Compatible = false"
затем говорит:
"соответствует типу содержимого 'multipart / form-data; border = 0e5485079df745cf0d07777a88aeb8fd'"
Что, конечно, заставляет меня думать, что я все еще где-то неправильно обрабатываю тип контента.
Кто-нибудь может увидеть, где я ошибаюсь в своем коде?
Спасибо!
Вот функция:
def send_email(access_token):
import requests
import json
import pandas as pd
import mimetypes
url = "https://outlook.office.com/api/v2.0/me/sendmail"
headers = {
'Authorization': 'Bearer '+access_token,
}
data = {}
data['Message'] = {
'Subject': "Test",
'Body': {
'ContentType': 'Text',
'Content': 'This is a test'
},
'ToRecipients': [
{
'EmailAddress':{
'Address': 'MY TEST EMAIL ADDRESS'
}
}
]
}
data['SaveToSentItems'] = "true"
json_data = json.dumps(data)
#need to convert the above json_data to dict, otherwise it won't work
json_data = json.loads(json_data)
###ATTACHMENT WORK
file_list = ['test_files/test.xlsx', 'test_files/test.docx']
files = {}
pos = 1
for file in file_list:
x = file.split('/') #seperate file name from file path
files['file'+str(pos)] = ( #give the file a unique name
x[1], #actual filename
open(file,'rb'), #open the file
mimetypes.MimeTypes().guess_type(file)[0] #add in the contents type
)
pos += 1 #increase the naming iteration
#print(files)
r = requests.post(url, headers=headers, json=json_data, files=files)
print("")
print(r)
print("")
print(r.text)