2010-06-21 9 views
5

Necesito generar un mensaje multipart/mime para enviar como respuesta a una solicitud HTTP, pero estoy llegando a un error o una limitación en el correo electrónico de Python. * Paquete.¿Cómo puedo generar un mensaje multipart/mime con CRLF correcto en Python?

El problema es que el uso de Python 2.6, el message.as_string() llamada a continuación genera una cadena con \ n en lugar de que CRLF como los finales de línea:

message = MIMEMultipart() 
for image in images: 
    f = image.open('rb') 
    img = MIMEImage(f.read(), _encoder=encode_7or8bit) 
    message.attach(img) 


message.as_string() 

no parece haber ninguna manera de persuadir a use el CRLF (estándar MIME). La clase Generator que parece que debería poder hacer esto, no.

¿Qué han hecho otras personas para evitar esto?

Respuesta

3

Esto fue un error en Python que ahora se ha fijado: http://hg.python.org/lookup/r85811

Ahora debería ser posible utilizar las bibliotecas MIME más de transportes no tienen correo electrónico y las cosas sensibles suceden.

+3

Lamentablemente, esto no está presente en Python 2.7. Todavía estoy tratando de encontrar una solución alternativa: tengo un mensaje multiparte con una parte binaria, lo estoy enviando como una solicitud web. – Nils

+0

@CantucciHQ parece que entró en Python 3.2. AIUI, las correcciones de biblioteca de 3.2 a 2.7 son aceptadas, ¿vale la pena archivar un error para mantener la compatibilidad? –

+0

gracias por eso. Es un pequeño script, así que lo convertí a Python 3 en su lugar. Pero todavía estoy teniendo problemas con eso. Aquí está mi pregunta: ¿alguna idea? http://stackoverflow.com/questions/19010306/newline-characters-being-interpreted-when-encoding-binary-mimeapplication-in-pyt – Nils

2

¿Qué pasa con un simple truco

message.as_string().replace('\n', '\r\n') 

? No es elegante, pero debería funcionar (y se debe ingresar un informe de error en el rastreador de Python).

+0

Pensado de eso, pero si hay \ n caracteres en el cuerpo (que es un archivo PNG, tan binario) entonces esto lo arruinará. AFAICT, el encode_7_or_8bit no hace nada inteligente para byte-stuff \ n caracteres. –

+1

Oh, ya hay un error aquí: http://bugs.python.org/issue1349106 Ha estado abierto desde 2005 y por razones que no entiendo parece ser resistido. –

+1

@Malcolm, para cuando reemplace las nuevas líneas, el cuerpo ya ha sido codificado de alguna manera aceptada por correo, que "binario directo" es definitivamente ** no ** - violaría muchas RFC. Una codificación que no "modifique" la carga útil para hacerla compatible con RFC es inaceptable, y usarla es _su_ error, no Python's - ¡use 'encode_base64' para cargas binarias! –

Cuestiones relacionadas