Python: come memorizzare un progetto di e-mail con i destinatari BCC a Exchange Server tramite IMAP?

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

Domanda

cerco di memorizzare un progetto di e-mail tramite IMAP in una cartella in esecuzione su MS Exchange. Tutto ok, tranne che i destinatari Ccn non ottenere illustrato nel progetto di messaggio memorizzato sul server. destinatari Ccn, inoltre, non ricevono l'email se mando con MS Outlook. Se ho letto il messaggio indietro con Python dopo aver memorizzato sul server, posso vedere il Ccn nel progetto.

Il seguente codice Python riproduce questo comportamento:

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() 

Se corro questo codice, un progetto viene memorizzato nella cartella Draft su Exchange Server. Ma se guardo il progetto con MS Outlook, ma non include il destinatario bcc (message['bcc'] = 'testbcc@test.com'). Message, to, from, cc ok, nessun errore.

Se scarico bozze che già includono un BCC da una cartella di Exchange, posso anche vedere il bcc. Solo upload non funziona per me.

Qualsiasi aiuto molto apprezzato. Grazie. BTW, MAPI non è un'opzione.

Aggiorna : Grazie. X-Receiver non ha funzionato per me. Per quanto riguarda giocare con un IMAP-cartelle in Outlook, ho ottenuto un risultato interessante. Se accedo al progetto tramite l'IMAP-cartelle in Outlook, vedo il bcc. Ma se accedo tramite il MAPI-Folder, io non lo vedo. Giocherà un po 'in giro con questo.

Conclusione : grazie per l'ingresso. In realtà, il codice funziona bene. Vedi sotto per la risposta che ho trovato.

È stato utile?

Soluzione

In realtà, il codice funziona bene. Si crea la posta corretta con tutte le intestazioni di destra, tra cui bcc.

Come visualizzare il client di posta elettronica bcc?

Il client di posta (ad esempio Python o MS Outlook tramite IMAP o MAPI nel mio caso) decide se e come visualizzare BCC-intestazioni. Outlook per esempio non visualizza le intestazioni BCC da una cartella IMAP. Questa è una caratteristica di nascondere BCC destinatari gli uni dagli altri in cui non sono stati spogliati di distanza dalla posta prima (non è chiaro dallo standard se un destinatario bcc è permesso di vedere tutti gli altri destinatari Ccn o no, vedi Wikipedia ).

Chi gestisce bcc dopo l'invio di una e-mail?

Supponiamo ora che abbiamo redatto un messaggio in un client di posta elettronica e memorizzati in una cartella IMAP o MAPI. Il server che fornisce le cartelle IMAP / MAPI lascia la bozza del messaggio invariato. Quello che succede al bcc-headers dopo l'invio della posta dipende dall'implementazione, e potrebbe dipendere sia sul client di posta elettronica e la mail transfer agent (ad esempio MS Exchange Server nel mio caso). In poche parole, le persone non sono d'accordo se il client di posta elettronica o l'agente di trasferimento della posta è reponsible per la rimozione di intestazioni BCC. Sembra però sia il caso che la maggior parte degli sviluppatori è del parere che si tratta di business del client di posta elettronica con l'agente di trasferimento di posta non toccare la posta (ad esempio MS Exchange, MS SMTP, Exim, OpenWave). In questo caso, l'agente di trasferimento di posta invia l'e-mail al destinatario come definito nel RCPT TO: del SMTP di comunicazione, e lascia l'e-mail invariato altrimenti. Alcuni altri agenti di trasferimento posta spogliano Ccn intestazioni da messaggi di posta elettronica tuttavia (ad esempio sendmail, Lotus Notes). Una discussione molto approfondita può essere trovato nella mailing list Exim partendo qui .

Nel caso di MS Outlook e MS Exchange, MS Outlook non invia bcc (ma manda singole e-mail per ciascun destinatario BCC) e MS Exchange non tocca l'intestazioni delle email, ma invia il pieno e-mail (possibilmente bcc compresa destinatari) per i destinatari definiti in RCPT TO:.

Conclusione

Non ho capito che non c'è un comportamento garantito per bcc, e che di solito il client gestisce bcc. Io riscrivere il mio codice Python per un ciclo su destinatari Ccn e generare una e-mail per ciascun destinatario bcc.

Altri suggerimenti

Potrebbe essere che il modo con il design. Dopo tutto, il punto di BCC è che i destinatari sono nascosti gli uni dagli altri.

Capisco che non sta inviando l'e-mail, basta riporlo. Ma la mia ipotesi è che le regole interne del cambio calci in quando il messaggio viene IMAP.appended nella cartella, causando il campo Ccn per essere strappato via.

Ovviamente, quando i messaggi vengono salvati in una cartella utilizzando Outlook campo Ccn è non strappato via. Ma credo che Outlook comunica con Exchange utilizzando alcuni mechanizm interno (MAPI?).

Tutto questo è solo congetture.

Qualcosa di divertente si potrebbe provare:

  • In un profilo / MAPI vuoto Outlook, creare un account IMAP. Configurarlo per memorizzare Bozze e Posta inviata sul server Exchange.
  • Vedere se Outlook utilizzando IMAP può salvare bcc di Bozze correttamente.

Ho provato quanto sopra utilizzando il client di posta elettronica Evolution collegato a Exchange tramite IMAP. Utilizzo di Outlook (collegato il modo normale), poi ho dato un'occhiata in Bozze e Posta inviata. Il campo bcc mancava in entrambi i luoghi.

I belive questo supporta la mia teoria.

Prova a impostare questa versione alternativa di intestazione BCC:

X-Receiver: someguy@gmail.com

Cambio in particolare lo tratterà come un BCC quando lo si invia. Ma scommetto che non metterà a nudo quando si scrive tramite IMAP. È possibile includere più di un destinatario BCC duplicando questa linea.

Questo è un hack completo, ovviamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top