Python : IMAP를 통해 BCC 수신자와 교환 서버로 초안 이메일을 저장하는 방법은 무엇입니까?

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

문제

IMAP를 통해 전자 메일을 MS Exchange에서 실행하는 폴더에 저장하려고합니다. BCC 수신자가 서버에 저장된 초안 메시지에 표시되지 않는 것을 제외하고는 모든 것이 정상입니다. BCC 수신자는 MS Outlook과 함께 이메일을 보내면 이메일을받지 않습니다. 서버에 저장된 후 Python으로 메시지를 다시 읽으면 드래프트에서 BCC를 볼 수 있습니다.

다음 파이썬 코드는이 동작을 재현합니다.

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 알겠습니다. 오류가 없습니다.

Exchange 폴더에서 이미 BCC가 포함 된 초안을 다운로드하면 BCC도 볼 수 있습니다. 업로드 만 작동하지 않습니다.

모든 도움이 대단히 감사합니다. 감사. BTW, MAPI는 옵션이 아닙니다.

업데이트: 감사. X-Receiver 나를 위해 일하지 않았습니다. Outlook에서 Imap-Folder와 함께 놀면서 흥미로운 결과를 얻었습니다. Outlook에서 IMAP-Folder를 통해 드래프트에 액세스하면 BCC가 나타납니다. 그러나 Mapi-Folder를 통해 액세스하면 보이지 않습니다. 그것으로 조금 놀아 질 것입니다.

결론: 입력 주셔서 감사합니다. 실제로 코드는 잘 작동합니다. 내가 찾은 답변은 아래를 참조하십시오.

도움이 되었습니까?

해결책

실제로 코드는 잘 작동합니다. BCC를 포함한 모든 올바른 헤더로 올바른 메일을 만듭니다.

메일 클라이언트는 BCC를 어떻게 표시합니까?

그만큼 우편 클라이언트 (예 : 제 경우에는 IMAP 또는 MAPI를 통한 Python 또는 MS Outlook)가 BCC 헤더를 표시할지 여부와 방법을 결정합니다. 예를 들어 Outlook은 IMAP 폴더에서 BCC 헤더를 표시하지 않습니다. 이것은 이전에 메일에서 벗어나지 않은 곳에서 BCC 수신자를 서로 숨기는 기능입니다 (한 BCC 수신자가 다른 모든 BCC 수신자를 볼 수 있는지 여부는 표준에서 명확하지 않습니다. 위키 백과).

이메일을 보낼 때 누가 BCC를 처리합니까?

이제 메일 클라이언트에서 메시지를 작성하고 IMAP 또는 MAPI 폴더에 저장했다고 가정 해 봅시다. IMAP / MAPI 폴더를 제공하는 서버는 초안 메시지를 변경되지 않았습니다. 메일을 보낼 때 BCC 헤더에게 발생하는 일은 구현 의존적이며 메일 클라이언트와 우편 이체 에이전트 (예 : 내 경우 MS Exchange 서버). 간단히 말해서, 사람들은 메일 클라이언트 또는 우편 이체 에이전트가 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 수신자에 대해 하나의 이메일을 생성합니다.

다른 팁

디자인에 의해 그렇게 될 수 있습니다. 결국, BCC의 요점은 수령인이 서로 숨겨져 있다는 것입니다.

나는 당신이 이메일을 보내지 않고 저장하는 것만 이해합니다. 그러나 메시지가 IMAP에있을 때 Exchange의 내부 규칙이 시작된다고 생각합니다. BCC 필드가 제거되었습니다.

분명히 전망을 사용하여 메시지가 폴더에 저장되면 BCC 필드는 다음과 같습니다. ~ 아니다 빼앗긴. 그러나 Outlook은 일부 내부 메카이즈 (MAPI?)를 사용하여 Exchange와 통신한다고 생각합니다.

위의 모든 것은 단지 추측입니다.

당신이 시도 할 수있는 재미있는 것 :

  • 빈 Outlook/MAPI 프로파일에서 IMAP 계정을 만듭니다. 초안을 저장하고 Exchange 서버에 보낸 품목을 설정하도록 설정하십시오.
  • IMAP를 사용하는 Outlook이 드래프트의 BCC를 올바르게 저장할 수 있는지 확인하십시오.

IMAP를 통해 Exchange에 연결된 Evolution 전자 메일 클라이언트를 사용하여 위의 시도를 시도했습니다. Outlook (정상적인 방식으로 연결)을 사용하여 초안을보고 항목을 보냈습니다. BCC 필드는 두 곳 모두에서 누락되었습니다.

나는 이것이 나의 이론을지지한다고 믿는다.

이 대체 버전의 BCC 헤더를 설정해보십시오.

X-Receiver: someguy@gmail.com

특히 교환은 보낼 때 이것을 BCC처럼 취급합니다. 그러나 나는 당신이 IMAP를 통해 쓸 때 그것을 제거하지 않을 것입니다. 이 라인을 복제하여 둘 이상의 BCC 수신자를 포함시킬 수 있습니다.

이것은 분명히 완전한 해킹입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top