Python: cómo almacenar un proyecto de e-mail con destinatarios CCO a Exchange Server a través de IMAP?

StackOverflow https://stackoverflow.com/questions/771907

Pregunta

Trato de guardar un proyecto de e-mail a través de IMAP a una carpeta que se ejecuta en MS Exchange. Todo bien, excepto que los destinatarios en copia oculta no consiga muestra en el proyecto de mensaje almacenado en el servidor. También destinatarios en copia oculta no reciben el correo electrónico si lo envío con MS Outlook. Si leo el mensaje de vuelta con Python después de haber almacenado en el servidor, puedo ver el CCO en el proyecto.

El siguiente código Python reproduce este comportamiento:

import imaplib 
import time 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 

message = MIMEMultipart() 
message['Subject'] = 'Test Draft' 
message['From'] = 'test@test.net' 
message['to'] = 'test@test.com' 
message['cc'] = 'testcc@test.com' 
message['bcc'] = 'testbcc@test.com' 
message.attach(MIMEText('This is a test.\n')) 

server= imaplib.IMAP4('the.ser.ver.ip') 
server.login('test', 'test') 
server.append("Drafts" 
              ,'\Draft' 
              ,imaplib.Time2Internaldate(time.time()) 
              ,str(message)) 
server.logout() 

Si ejecuta este código, un proyecto se almacena en la carpeta Draft en el Exchange Server. Pero si miro el proyecto con MS Outlook, que no incluye el receptor bcc (message['bcc'] = 'testbcc@test.com'). Message, to, from, cc bien, no hay error.

Si descargo borradores que ya incluyen un BCC desde una carpeta de Exchange, también puedo ver el BCC. Sólo la carga no funciona para mí.

Cualquier ayuda muy apreciada. Gracias. Por cierto, MAPI no es una opción.

Actualizar : Gracias. X-Receiver no funcionó para mí. En cuanto a jugar con una cuenta de IMAP-carpetas en Outlook, tengo un resultado interesante. Si accedo al proyecto a través del IMAP carpetas en Outlook, veo el BCC. Pero si puedo acceder a él a través de la carpeta con MAPI, yo no lo veo. Jugará un poco con eso.

Conclusión : gracias por la entrada. En realidad, el código funciona bien. Vea a continuación la respuesta que he encontrado.

¿Fue útil?

Solución

En realidad, el código funciona bien. Se crea el correo adecuado con todas las cabeceras correctas incluyendo BCC.

¿Cómo visualizar el cliente de correo BCC?

El de correo del cliente (por ejemplo, Python o MS Outlook a través de IMAP o MAPI en mi caso) decide si y cómo mostrar BCC-cabeceras. Perspectivas, por ejemplo, no muestra encabezados BCC de una carpeta IMAP. Esta es una característica para ocultar los destinatarios de CCO unas de otras en las que no se han despojado de distancia del correo antes (que no se desprende de la norma si se permite un destinatario CCO para ver todos los otros destinatarios en copia oculta o no, ver Wikipedia ).

¿Quién maneja CCO al enviar un correo electrónico?

Supongamos ahora que hemos redactado un mensaje en un cliente de correo y se almacena en una carpeta IMAP o MAPI. El servidor que proporciona las carpetas IMAP / MAPI deja el mensaje de borrador sin cambios. Lo que sucede con el BCC-cabeceras al enviar el correo depende de la implementación, y podría depender tanto en el cliente de correo y el agente de transferencia de correo (por ejemplo, MS Exchange Server en mi caso). En pocas palabras, las personas no están de acuerdo si el cliente de correo o el agente de transferencia de correo es el responsable de los encabezados de la eliminación de BCC. Sin embargo, parece que sea el caso de que una mayoría de los desarrolladores es de la opinión de que es el negocio del cliente de correo con el agente de transferencia de correo no tocar el correo (por ejemplo, MS Exchange, MS SMTP, Exim, OpenWave). En este caso, el agente de transferencia de correo envía el correo electrónico al destinatario como se define en la RCPT TO: de la SMTP la comunicación, y deja sin cambios el correo electrónico de otra manera. Algunos otros agentes de transferencia de correo tira cabeceras bcc de mensajes de correo electrónico sin embargo (por ejemplo sendmail, Lotus Notes). Una discusión muy completo se puede encontrar en la lista de correo Exim comenzando aquí .

En el caso de MS Outlook y MS Exchange, MS Outlook nunca envía BCC (pero envía mensajes de correo electrónico individuales para cada destinatario BCC) y MS Exchange no toca los encabezados de correo electrónico, aunque el envío de correo electrónico completa (posiblemente BCC incluyendo receptores) a los receptores definidos en RCPT TO:.

Conclusión

Yo no entendía que no hay ningún comportamiento garantizada para BCC, y que por lo general el cliente se encarga de BCC. Voy a reescribir mi código Python para recorrer los destinatarios de CCO y generar un correo electrónico para cada destinatario BCC.

Otros consejos

Podría ser de esa manera por diseño. Después de todo, todo el punto de BCC es que los destinatarios están ocultos unos de otros.

Yo entiendo que usted no está enviando el correo electrónico, simplemente almacenarla. Pero mi suposición es que patear las normas internas de Exchange en cuando el mensaje se IMAP.appended a la carpeta, haciendo que el campo CCO para ser despojado de distancia.

Obviamente, cuando los mensajes se guardan en una carpeta mediante Outlook el campo BCC es no despojado. Pero supongo que Outlook se comunica con Exchange utilizando algún mechanizm interna (MAPI?).

Todo lo anterior es sólo conjeturas.

Algo divertido que podría intentar:

  • En un perfil / MAPI vacío Outlook, cree una cuenta IMAP. Configurarlo para almacenar Borrador y Elementos enviados en el servidor de Exchange.
  • A ver si Outlook utilizando IMAP puede ahorrar CCO del Borrador correctamente.

He intentado lo anterior utilizando el cliente de correo electrónico Evolution conectado a Exchange a través de IMAP. El uso de la perspectiva (conectado de forma normal), después tuve un vistazo en Borrador y Elementos enviados. El campo CCO faltaba en ambos lugares.

Me creer esto apoya mi teoría.

Trate de establecer esta versión alternativa de la cabecera BCC:

X-Receiver: someguy@gmail.com

Cambio en particular, va a tratar esto como un BCC cuando lo envía. Pero apuesto a que no se tira de ella cuando se escribe a través de IMAP. Puede incluir más de un destinatario BCC mediante la duplicación de esta línea.

Este es un truco completo, obviamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top