Python: como armazenar um projecto de e-mail com destinatários BCC para o Exchange Server via IMAP?

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

Pergunta

Eu tento guardar um projecto de e-mail via IMAP para uma pasta em execução no MS Exchange. Tudo ok, exceto que os destinatários Cco não se inscrito no projecto de mensagem armazenada no servidor. destinatários Cco também não receber o e-mail se eu enviá-lo com o MS Outlook. Se eu ler a parte traseira mensagem com Python depois de eu ter armazenado no servidor, eu posso ver o Bcc no projecto.

O seguinte código Python reproduz esse 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 eu executar esse código, um projecto fica armazenado na pasta Draft no Exchange Server. Mas se eu olhar para o projecto com o MS Outlook, ele não inclui o destinatário bcc (message['bcc'] = 'testbcc@test.com'). Message, to, from, cc ok, nenhum erro.

Se eu baixar rascunhos que já incluem um BCC de uma pasta do Exchange, posso ver também o BCC. Apenas upload não funciona para mim.

Qualquer ajuda muito apreciado. Obrigado. BTW, MAPI não é uma opção.

Atualizar : Obrigado. X-Receiver não funcionou para mim. Quanto a brincar com um IMAP-de pastas no Outlook, eu tenho um resultado interessante. Se eu acessar o projecto através do IMAP-de pastas no Outlook, vejo o BCC. Mas se eu acessá-lo através do MAPI-Pasta, eu não vê-lo. Vai jogar um pouco por aí com isso.

Conclusão : Obrigado pela contribuição. Na verdade, o código funciona muito bem. Veja abaixo para a resposta que eu encontrei.

Foi útil?

Solução

Na verdade, o código funciona muito bem. Ele cria o correio adequada com todos os cabeçalhos corretos incluindo bcc.

Como é que a exibição do cliente de correio bcc?

O de correio do cliente (por exemplo, Python ou MS Outlook via IMAP ou MAPI na minha caso) decide se e como exibir cco-headers. O Outlook, por exemplo, não exibir cco cabeçalhos de uma pasta IMAP. Este é um recurso para esconder BCC destinatários uns dos outros onde eles não tenham sido arrancada do correio antes (não está claro a partir do padrão se um destinatário BCC é permitido para ver todos os outros destinatários Cco ou não, veja Wikipedia ).

Quem lida com bcc mediante o envio de um e-mail?

Suponha agora que temos elaborado uma mensagem em um cliente de email e armazenado em uma pasta IMAP ou MAPI. O servidor que fornece as pastas IMAP / MAPI deixa a mensagem de rascunho inalterado. O que acontece com os cco-headers ao enviar o e-mail é dependente de implementação, e pode depender tanto o cliente de email e Mail transfer Agent (por exemplo, MS Exchange Server no meu caso). Em poucas palavras, as pessoas não concordam se o cliente de email ou o agente de transferência de correio é reponsável por bcc remover cabeçalhos. Parece no entanto ser o caso que a maioria dos desenvolvedores é da opinião de que é o negócio do cliente de correio com o agente de transferência de correio electrónico não tocar o e-mail (por exemplo, MS Exchange, MS SMTP, Exim, OpenWave). Neste caso, o agente de transferência de correio envia o e-mail para o destinatário conforme definido no RCPT TO: do SMTP comunicação, e deixa o email inalterados outra forma. Alguns outros agentes de transferência de correio tira cco cabeçalhos de e-mails no entanto (por exemplo sendmail, Lotus Notes). Uma discussão muito completo pode ser encontrado na lista de discussão Exim começando aqui .

No caso do MS Outlook e MS Exchange, MS Outlook nunca envia BCC (mas envia e-mails individuais para cada destinatário BCC) e MS Exchange não toque nos cabeçalhos de e-mail, mas envia o e-mail completo (incluindo possivelmente o BCC destinatários) para os destinatários definidos no RCPT TO:.

Conclusão

Eu não entendia que não há comportamento garantida para bcc, e que, geralmente, as alças cliente BCC. Vou reescrever meu código Python de varrer destinatários Cco e gerar um e-mail para cada destinatário Cco.

Outras dicas

Pode ser que maneira por design. Afinal de contas, todo o ponto de BCC é que os destinatários estão escondidos um do outro.

Eu entendo que você não está enviando o e-mail, armazená-la. Mas o meu palpite é que as regras internas da Bolsa chutar quando a mensagem é IMAP.appended para a pasta, fazendo com que o campo Cco para ser arrancada.

Obviamente, quando as mensagens são salvos em uma pasta usando o Outlook o campo Cco é não arrancada. Mas eu acho que comunica Outlook com o Exchange usando algum mechanizm interna (MAPI?).

Todos os acima é apenas conjecturas.

Algo divertido você pode tentar:

  • Em um perfil do Outlook / MAPI vazio, criar uma conta IMAP. Configurá-lo para armazenar Rascunhos e itens enviados no servidor Exchange.
  • ver se o Outlook usando IMAP pode salvar cco de Rascunhos corretamente.

Eu tentei o acima usando o cliente de e-mail Evolution conectado ao Exchange sobre IMAP. Usando o Outlook (conectado a maneira normal), então eu tinha um olhar em Rascunhos e Itens Enviados. O campo Cco estava faltando em ambos os lugares.

Eu acredito este suporta a minha teoria.

Tente configurar esta versão alternativa do cabeçalho BCC:

X-Receiver: someguy@gmail.com

Troca, em particular, irá tratar isso como um BCC quando você enviá-lo. Mas eu aposto que não vai tira-lo quando você escreve via IMAP. Você pode incluir mais de um destinatário BCC duplicando esta linha.

Este é um hack completo, obviamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top