パイソン:BCC 受信者を含む下書きメールを IMAP 経由で Exchange Server に保存するにはどうすればよいですか?

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

質問

IMAP 経由で下書き電子メールを MS Exchange 上で実行されているフォルダーに保存しようとしています。サーバーに保存されている下書きメッセージに Bcc 受信者が表示されないことを除けば、すべて問題ありません。MS Outlook で電子メールを送信した場合、Bcc 受信者も電子メールを受信しません。メッセージをサーバーに保存した後、Python でメッセージを読み返すと、下書きの Bcc が表示されます。

次の Python コードはこの動作を再現します。

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

このコードを実行すると、下書きが Draft Exchange サーバー上のフォルダー。しかし、MS Outlook で下書きを見ると、 bcc 受信者 (message['bcc'] = 'testbcc@test.com'). Message, to, from, cc わかりました、エラーはありません。

既に BCC が含まれている下書きを Exchange フォルダーからダウンロードすると、BCC も表示されます。アップロードだけではうまくいきません。

ご協力をよろしくお願いいたします。ありがとう。ところで、MAPI はオプションではありません。

アップデート:ありがとう。 X-Receiver 私にはうまくいきませんでした。Outlook で IMAP フォルダーを試してみたところ、興味深い結果が得られました。Outlook の IMAP フォルダー経由で下書きにアクセスすると、bcc が表示されます。しかし、MAPI フォルダー経由でアクセスすると、表示されません。それを少しいじってみます。

結論:ご意見ありがとうございます。実際、コードは問題なく動作します。私が見つけた答えについては以下を参照してください。

役に立ちましたか?

解決

実際、コードは問題なく動作します。bcc を含むすべての適切なヘッダーを備えた適切なメールが作成されます。

メールクライアントではどのようにしてBCCが表示されるのでしょうか?

メールクライアント (例えば。私の場合は、IMAP または MAPI を介した Python または MS Outlook) によって、bcc ヘッダーを表示するかどうか、および表示する方法が決まります。たとえば、Outlook では、IMAP フォルダーの bcc ヘッダーは表示されません。これは、以前にメールから削除されていない BCC 受信者を相互に隠す機能です (1 人の BCC 受信者が他のすべての BCC 受信者を参照できるかどうかは標準では明らかではありません。参照) ウィキペディア).

メール送信時の BCC は誰が処理しますか?

ここで、メール クライアントでメッセージの下書きを作成し、それを IMAP または MAPI フォルダーに保存したとします。IMAP / MAPI フォルダーを提供するサーバーは、下書きメッセージを変更しないままにします。メール送信時に bcc ヘッダーに何が起こるかは実装に依存し、メール クライアントと メール転送エージェント (例えば。私の場合は MS Exchange Server)。一言で言えば、BCC ヘッダーを削除する責任がメール クライアントとメール転送エージェントのどちらにあるのかについては、人々の意見が一致していません。しかし、大多数の開発者は、メール転送エージェントがメールに関与しないのはメールクライアントの仕事であるという意見を持っているようです(例:メール転送エージェント)。MS Exchange、MS SMTP、Exim、OpenWave)。この場合、メール転送エージェントは、で定義されているように受信者に電子メールを送信します。 RCPT TO:SMTP それ以外の場合は、電子メールは変更されません。ただし、他のメール転送エージェントの中には、電子メールから BCC ヘッダーを削除するものもあります (例:sendmail、Lotus Notes)。非常に徹底的な議論は、Exim メーリング リストで見つけることができます。 ここ.

MS Outlook と MS Exchange の場合、MS Outlook は bcc を送信しません (ただし、bcc 受信者ごとに個別の電子メールを送信します)。MS Exchange は電子メール ヘッダーには触れませんが、電子メール全体 (おそらく bcc 受信者を含む) を定義された受信者に送信します。で RCPT TO:.

結論

bcc の動作は保証されておらず、通常はクライアントが bcc を処理するということを理解していませんでした。BCC 受信者をループし、BCC 受信者ごとに 1 つの電子メールを生成するように Python コードを書き直します。

他のヒント

設計上そうなる可能性があります。結局のところ、BCC の最大のポイントは、受信者が互いに隠蔽されることです。

電子メールを送信するのではなく、単に保存するだけであることを理解しています。しかし、私の推測では、メッセージがフォルダーに IMAP 追加されるときに Exchange の内部ルールが作動し、bcc フィールドが削除されるのではないかと考えています。

Outlook を使用してメッセージをフォルダーに保存すると、bcc フィールドは明らかに ない 剥ぎ取られた。しかし、Outlook は何らかの内部メカニズム (MAPI?) を使用して Exchange と通信していると思います。

上記はすべて単なる推測です。

何か楽しいことを試してみてはいかがでしょうか:

  • 空の Outlook/MAPI プロファイルで、IMAP アカウントを作成します。下書きと送信済みアイテムを Exchange サーバーに保存するように設定します。
  • IMAP を使用した Outlook が下書きの BCC を正しく保存できるかどうかを確認します。

IMAP 経由で Exchange に接続した Evolution 電子メール クライアントを使用して、上記のことを試しました。Outlook を使用して (通常の方法で接続しました)、[下書き] と [送信済みアイテム] を確認しました。どちらの場所でも bcc フィールドがありませんでした。

これは私の理論を裏付けていると思います。

BCC ヘッダーの次の代替バージョンを設定してみてください。

X-Receiver: someguy@gmail.com

特に Exchange は、送信時にこれを BCC のように扱います。ただし、IMAP 経由で書き込む場合は削除されないと思います。この行を複製すると、複数の BCC 受信者を含めることができます。

これは明らかに完全なハッキングです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top