2013-06-10 4 views
1

최근에 파이썬 스크립트를 실행하기 위해 라즈베리 파이를 구입했지만, 필자가 Windows Live를 통해 전자 메일을 보내기 위해 작성한 기능이 갑자기 성공적인 핸드 셰이크 후에 SSL 오류가 전달되기 시작했습니다.라즈베리 파이의 SSL 오류

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 

주변을 광범위하게 검색 한 후 동일한 오류가있는 많은 사람들을 발견했지만 모두 매우 다른 상황에있었습니다. 가장 관련성이 높은 점은 OpenSSL의 특정 버전에 문제가있는 것처럼 보였지만 내 Pi (1.0.1e)에서 실행되는 버전에 대해서는 찾을 수 없었습니다. (Win7에 완벽하게 잘 작동)

기능 :

def wlive(adr_to, adr_fro, adr_pass, adr_subj, adr_file): 

    saveout = smtplib.stderr 
    logger = open('wlive.log', 'w') 
    smtplib.stderr = logger 

    msg = MIMEMultipart() 
    msg['Subject'] = adr_subj 
    msg['From'] = adr_fro 
    msg['To'] = adr_to 


    if adr_file != None: 
    # subtype recognition based on extension 
     filext = os.path.splitext(adr_file)[1] 
     if filext == '.png': 
      subt = 'png' 
     else: 
      subt = 'jpeg' 

     fp = open(adr_file, 'rb') 
     img = MIMEImage(fp.read(), subt) 
     fp.close() 
     msg.attach(img) 


    try: 
     server = smtplib.SMTP('smtp.live.com', 587) 
     server.set_debuglevel(1) 
     server.ehlo() 
     server.starttls() 
     server.login(adr_fro, adr_pass) 
     server.sendmail(adr_fro, adr_to, msg.as_string()) 
     server.quit() 
     return True 

    except Exception, e: 
     print 'wlive exception:\n\n', str(e) 
     return False 

    smtplib.stderr = saveout 
    logger.close() 
나는 완전히 업데이트 및 업그레이드 Raspbian "위지"이미지를 실행 해요

, 파이썬 나는이 문제가 발생 2.7.3

+0

'openssl version','openssl s_client -connect smtp.live.com:587 -starttls smtp''250 OK'를 받으시겠습니까? –

+0

그래, 전혀 문제가 없다. –

+0

그러면 아마도 libssl보다 파이썬 관련 일 것이다. 나에게 그것은 호환되지 않는 암호 구성의 냄새가 난다. 나는 그런 식으로 파 내려고 노력할 것이다. –

답변

1

어제. 먼저 이메일을 보내려는 계정을 다른 공급자 (예 : gmail)로 변경하십시오. 제 경우에는 즉시 작동하기 시작했습니다.

당신 (마이크로 소프트의 잘못?)의 경우 윈도우 계정 (비슷한이 코멘트에서 제안)과 실시간으로 다른 일을하려고도의 경우
openssl s_client -connect smtp.live.com:587 -starttls smtp -crlf -ign_eof

다음 입력 :
ehlo
auth login
내 경우 엔 아무 일도 없었습니다. 답변 없음, 시간 제한 만 읽으십시오. 이 시간 시도 : 다음
openssl s_client -connect smtp.live.com:587 -starttls smtp -crlf -ign_eof -no_tls1_2
:
ehlo
auth login
나는 즉시 대답을 얻었다. 그래도 여전히 문제가된다면 약간의 문제가 있습니다. 나는 그러한 매개 변수를 지정하는 방법을 찾지 못했습니다 (어떤 버전의 tls를 사용하지 못하도록 막는 지). 내가 발견 한 것은 python 3.3 you can give an additional context argument instarttls에 있으며,이 암호의 일부 암호 매개 변수를 정의 할 수 있어야합니다. context. 옵션 목록은 here입니다.
gmail 계정을 python 3.3 이상으로 사용하는 것이 더 쉬웠다는 것을 인정해야합니다 (rpi에서는 컨텍스트를 지정하지 않아도 3.2가 있습니다). 도움이 될지 확실하지는 않습니다. 그러나이 정보가 어떻게 든 도움이되기를 바랍니다.

+0

첫 번째 줄은 ehlo 직후에도 '잘못된 버전 번호'를 올리며 로그인하지 못하게 할 것입니다. 두 번째 문자열이 작동하는 것 같습니다. 스크립트를 통해 지정하는 방법을 찾지 못하면'os.system'을 통해 전달하고 거기에서 작업하려고 할 수 있습니다. –

관련 문제