Ошибка SSL на Raspberry Pi

1

Недавно я купил Raspberry Pi для запуска некоторых скриптов Python, но когда я портировал его, функция, которую я написал для отправки электронной почты через Windows Live, неожиданно начала раздавать 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 "Wheezy", а Python 2.7.3

  • 0
    openssl version , затем openssl s_client -connect smtp.live.com:587 -starttls smtp вы получаете 250 OK ?
  • 0
    Да, никаких проблем вообще
Показать ещё 1 комментарий
Теги:
raspberry-pi
openssl
smtplib
raspbian

1 ответ

1

Я столкнулся с этой проблемой вчера. Первое, что нужно попробовать - это изменить учетную запись, с которой вы хотите отправить электронное письмо другому провайдеру: например, попробуйте gmail. В моем случае он начал работать мгновенно.

Если это также случай для вас (Microsoft fault?), Попробуйте еще одну вещь с активной учетной записью Windows (аналогично той, которая предложена в комментарии):
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 вы можете дать дополнительный контекстный аргумент в starttls и вы должны определить некоторые параметры шифрования в этом контексте. Список вариантов можно найти здесь.
Должен признаться, мне было проще использовать учетную запись gmail, чем получать python 3.3 (на rpi у вас есть 3.2 без возможности указать контекст), не будучи даже уверенным, поможет ли это. Однако я надеюсь, что эта информация вам поможет.

  • 0
    Первая строка поднимает wrong version number даже сразу после ehlo, даже не позволяет войти в систему. Вторая строка, кажется, работает, я мог бы просто попытаться передать ее через os.system и работать оттуда, если я не могу найти способ указать это через скрипт

Ещё вопросы

Сообщество Overcoder
Наверх
Меню