How to fix ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)?

Question:

I am trying to send an email with python, but it keeps saying ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056). Here is my code:

server = smtplib.SMTP_SSL('smtp.mail.com', 587)
server.login("[email protected]", "password")
server.sendmail(
"[email protected]", 
"[email protected]", 
"email text")
server.quit()

Do you know what is wrong?

Asked By: TheRealTengri

||

Answers:

The port for SSL is 465 and not 587, however when I used SSL the mail arrived to the junk mail.

For me the thing that worked was to use TLS over regular SMTP instead of SMTP_SSL.

Note that this is a secure method as TLS is also a cryptographic protocol (like SSL).

import smtplib, ssl

port = 587  # For starttls
smtp_server = "smtp.gmail.com"
sender_email = "[email protected]"
receiver_email = "[email protected]"
password = input("Type your password and press enter:")
message = """
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
with smtplib.SMTP(smtp_server, port) as server:
    server.ehlo()  # Can be omitted
    server.starttls(context=context)
    server.ehlo()  # Can be omitted
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, message)

provided thanks to the real python tutorial.

Answered By: moshevi

Code to send email via python:

import smtplib , ssl
import getpass
server = smtplib.SMTP_SSL("smtp.gmail.com",465)
server.ehlo()
server.starttls
password = getpass.getpass()   # to hide your password while typing (feels cool)
server.login("[email protected]", password)
server.sendmail("[email protected]" , "[email protected]" , "I am trying out python email through coding")
server.quit()

#turn off LESS SECURE APPS to make this work on your gmail

Answered By: Abdullah Najeeb

this is how i solved same problem

import ssl


sender = "[email protected]"
password = "password123"
    
where_to_email = "[email protected]"
theme = "this is subject"
message = "this is your message, say hi to reciever"
    
sender_password = password
session = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
session.login(sender, sender_password)
msg = f'From: {sender}rnTo: {where_to_email}rnContent-Type: text/plain; charset="utf-8"rnSubject: {theme}rnrn'
msg += message
session.sendmail(sender, where_to_email, msg.encode('utf8'))
session.quit()

also if you want to use yandex mail you must to turn on "protal code" in settings.

Answered By: oruchkin

google no longer lets you turn this feature off, meaning it just wont work no matter what you do, yahoo appears to be the same way

Answered By: Zeb Duffey
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.