Error adjuntando archivos grandes email API Graph
Tengo una aplicacion que envía mails utilizando la API de Graph, cuando intento enviar un adjunto de más de 3MB, lo hacemos creando una upload session y subiendo bloques de 3MB hasta completar el tamaño del fichero.
Normalmente funciona correctamente (Hasta 20MB-25MB), pero para archivos muy grandes estamos recibiendo el error:
"The message exceeds the maximum supported size"
Esto nos ocurre con ficheros de mas de 30-35MB, cuando se supone que la API acepta ficheros de hasta 150MB
Además, también nos ocurre cuando hay varios adjuntos que suman más de 30-35MB (por ejemplo si tengo dos adjuntos de 20MB, el primero lo crea bien, pero el segundo no termina de adjuntarlo y devuelve el mismo error)
Este es el código del bucle que envía el fichero por bloques:
url = upload_session_resp.json()["uploadUrl"]
start_pos = 0
bytes_per_call = 3000000
while start_pos < total_len:
end_pos = start_pos + bytes_per_call
data = file_bytes[start_pos:end_pos]
headers = { # 'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/octet-stream',
"Content-Length": str(len(data)),
"Content-Range": "bytes {}-{}/{}".format(start_pos, start_pos + len(data) - 1, total_len)
}
response = requests.put(url, headers=headers, data=data, timeout=15)
if response.status_code == 201:
break # adjunto creado correctamente
elif response.status_code != 200:
err_text = str(response.text)
if "The message exceeds the maximum supported size" in err_text or "ErrorAttachmentSizeShouldNotBeMoreThanMaximumSize" in err_text:
raise AttachmentTooBig()
else:
raise Exception("Error adding attachment\ntext: {}\nStatus: {}".format(
response.text, response.status_code))
start_pos = end_pos