2009-04-21 8 views
6

Я пытаюсь сохранить черновик электронной почты через IMAP в папку, запущенную на MS Exchange. Все в порядке, за исключением того, что получатели Bcc не отображаются в черновом сообщении, хранящемся на сервере. Получатели Bcc также не получают электронное письмо, если я отправлю его в MS Outlook. Если я прочитаю сообщение с Python после того, как я его сохранил на сервере, я могу увидеть Bcc в черновике.Python: как сохранить черновик электронной почты с получателями BCC на Exchange Server через IMAP?

Следующий код Python воспроизводит это поведение:

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

message = MIMEMultipart() 
message['Subject'] = 'Test Draft' 
message['From'] = '[email protected]' 
message['to'] = '[email protected]' 
message['cc'] = '[email protected]' 
message['bcc'] = '[email protected]' 
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() 

Если я запускаю этот код, проект получает сохраненную в Draft папку на сервере Exchange Server. Но если я посмотрю проект с MS Outlook, он не включает получателя bcc (message['bcc'] = '[email protected]'). Message, to, from, cc ok, без ошибок.

Если я загружаю черновики, которые уже содержат ОЦЦ из папки Exchange, я также могу видеть ОЦК. Только загрузка не работает для меня.

Любая помощь очень ценится. Благодарю. BTW, MAPI не вариант.

Обновление: Thanks. X-Receiver не работал для меня. Что касается игры с IMAP-папкой в ​​Outlook, я получил интересный результат. Если я получаю доступ к черновику через IMAP-папку в Outlook, я вижу ОЦК. Но если я получаю доступ к нему через MAPI-Folder, я не вижу его. Будет играть немного с этим.

Заключение: спасибо за ввод. На самом деле, код работает нормально. Ниже приведен ответ, который я нашел.

ответ

6

На самом деле код работает нормально. Он создает правильную почту со всеми правильными заголовками, включая ОЦК.

Как выглядит клиент клиентской копии?

mail client (например, Python или MS Outlook по протоколу IMAP или MAPI в моем случае) решает, как и как отображать заголовочные заголовки. Например, в Outlook не отображаются заголовки контрольных точек из папки IMAP. Это функция, позволяющая скрыть ОЦЦ-получателей друг от друга, где они еще не были удалены из почты (это не ясно из стандарта, разрешено ли одному получателю bcc видеть всех других получателей ОЦК или нет, см. Wikipedia).

Кто обрабатывает ОЦЦ при отправке электронной почты?

Предположим теперь, что мы подготовили сообщение в почтовом клиенте и сохранили его в папке IMAP или MAPI. Сервер, предоставляющий папки IMAP/MAPI, оставляет сообщение проекта неизменным. То, что происходит с заголовками bcc при отправке почты, зависит от реализации, и может зависеть как от почтового клиента, так и от mail transfer agent (например, MS Exchange Server в моем случае). В двух словах люди не согласны с тем, что почтовый клиент или агент передачи почты являются неприемлемыми для удаления заголовков. Однако, как представляется, большинство разработчиков считают, что дело почтового клиента связано с тем, что агент передачи почты не касается почты (например, MS Exchange, MS SMTP, Exim, OpenWave). В этом случае агент отправки почты отправляет электронное письмо получателю, как определено в сообщении RCPT TO: сообщения SMTP, и оставляет сообщение без изменений в противном случае. Однако некоторые другие агенты передачи почты выделяют заголовки bcc из писем (например, sendmail, Lotus Notes). Очень подробное обсуждение можно найти в списке рассылки Exim, начиная с here.

В случае MS Outlook и MS Exchange MS Outlook никогда не отправляет ОЦЦ (но отправляет отдельные письма для каждого получателя) и MS Exchange не касается заголовков электронной почты, а отправляет полный адрес электронной почты (возможно, включая получателей ОЦЦ) получателям, указанным в RCPT TO:.

Заключение

я не понял, что нет никаких гарантий поведения для ОЦК, и что, как правило, клиент обрабатывает ОЦК. Я переписал бы свой код Python, чтобы закодировать получателей ОЦЦ и создать одно электронное письмо для каждого получателя.

1

Это может быть так, по дизайну. В конце концов, вся точка ОЦК заключается в том, что получатели скрыты друг от друга.

Я понимаю, что вы не отправляете электронное письмо, просто сохраняя его. Но я предполагаю, что внутренние правила Exchange срабатывают, когда сообщение IMAP.appended в папку, в результате чего поле ОЦК будет удалено.

Очевидно, что, когда сообщения сохраняются в папке с использованием Outlook, поле ОЦК является не удалено. Но я предполагаю, что Outlook взаимодействует с Exchange, используя некоторый внутренний механизм (MAPI?).

Все вышесказанное - это только догадки.

Что-то весело вы могли бы попробовать:

  • В пустом профиле Outlook/MAPI, создать учетную запись IMAP. Установите его для хранения черновиков и отправленных элементов на сервере Exchange.
  • Посмотрите, сможет ли Outlook использовать IMAP, чтобы сэкономить Облигацию черновиков.

Я пробовал это, используя клиент электронной почты Evolution, подключенный к Exchange через IMAP. Используя Outlook (связанный с обычным способом), я тогда посмотрел в черновики и отправленные элементы. В обоих местах отсутствовало поле ОЦК.

Я верю, что это поддерживает мою теорию.

1

установки этой альтернативной версии заголовка BCC Try:

X-Receiver: [email protected] 

Обмен, в частности, будет рассматривать это как ВСС, когда вы посылаете его. Но я готов поспорить, что он не будет лишать его, когда вы пишете через IMAP. Вы можете включить более одного получателя BCC, дублируя эту строку.

Это, безусловно, полный хак.

 Смежные вопросы

  • Нет связанных вопросов^_^