2016-08-31 9 views
0

:Python에서 IMAP append 명령의 올바른 형식은 무엇입니까? (야후 메일) 다음 파이썬 함수를 전망, Gmail 및 내 수출입 서버를 호스팅하는 공유하지만, yahoo.com를 통해 메일을 보낼 때이 오류를 반환 작동

비교를 위해
APPEND command error: BAD ['[CLIENTBUG] Additional arguments found after last expected argument']. Data: FHDJ4 APPEND inbox.sent "31-Aug-2016 12:30:45 +0100" {155} 

, 전망 반환 :

('OK', ['[APPENDUID 105 2] APPEND completed.']) 

Gmail은 반환

('OK', ['[APPENDUID 14 2] (Success)']) 

및 수출입는 반환

,
('OK', ['[APPENDUID 1472211409 44] Append completed (0.788 + 0.076 secs).']) 

내 함수는 전달 된 인수는 모든 문자열이 imaplib2를 사용하고 self.username는 [email protected]로 보내는 이메일 주소입니다

내 기능은 다음과 같습니다

def send_mail(self, to_addrs, subject, msgtext, verbose=False): 
    # build message to send 
    msg = email.message.Message() 
    msg.set_unixfrom('pymotw') 
    msg['From'] = self.username 
    msg['To'] = to_addrs 
    msg['Subject'] = subject 
    msg.set_payload(msgtext) 

    if verbose: print("Sending Mail:\n ", msg) 

    # connect and send message 
    server = self.connect_smtp() 
    server.ehlo() 
    server.login(self.username, self.password) 
    server.sendmail(self.username, to_addrs, str(msg)) 
    server.quit() 
    print("Saving mail to sent") 
    sentbox_connection = self.imap_connection 
    print(sentbox_connection.select('inbox.sent')) 
    print(sentbox_connection.append('inbox.sent', None, imaplib2.Time2Internaldate(time.time()) , str(msg))) 

I

 msg = "From: %s\r\n" % self.username + "To: %s\r\n" % to_addrs + "Subject: %s\r\n" % subject + "\r\n" + msgtext 

대신과 같이 유료로 ""을 이용하여 메시지를 추가 : 대신 라인으로 MSG 변수를 생성 해봤

 print(sentbox_connection.append('inbox.sent', None, imaplib2.Time2Internaldate(time.time()) , str(msg))) 

내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 아니면 야후가 계정해야 할 추가 명령을 처리하는 특정 방법이 있다면?

편집 : 메일을 보내는 모든 SMTP 서버에 대한 확인을 작동하지만, inbox.sent에 보낸 메일을 추가하는 것은 내가 이것을 해결 한 야후

답변

0

실패, 명확합니다. 메시지 텍스트가 CRLF로 끝나지 않았 음을 알았습니다. 다른 메일 서버는 명령을 받아들이 기 위해이 서버를 추가했지만 야후는 ​​받아들이지 않았습니다. 아래는 이제 작동합니다.

나는에 메시지 페이로드 라인을 개정했습니다 msg.set_payload ("%의 \ 연구 \ n"%의 msgtext) # 야후

+0

와우, 작동 IMAP 명령의 끝에 CRLF 엄격한입니다! ** C# **'builder.Text = "텍스트 이메일 본문"+ Environment.NewLine; – Jaider