Send an e-mail using Python 3 - python

I'm working on a guessing game where there are tons of characters and it gives you hints for you to guess the character. There is also going to be a thing where you can submit a character. I want to do it so that it will send me an e-mail if somebody submits a character, but it's not working. Here's my code:
import smtplib
FROM = 'Guess#Character.com'
TO = ["mikpe120#gmail.com"] # must be a list
SUBJECT = "Somebody submitted a character!"
TEXT = "Name: " + name + "NameType: " + nameType
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP('myserver')
server.sendmail(FROM, TO, message)
server.quit()
And here is the error that I got:
Traceback (most recent call last):
File "C:/Users/Mikolaj Perzyna/Desktop/addCharacter.py", line 106, in <module>
server = smtplib.SMTP('myserver')
File "C:\Users\Mikolaj Perzyna\AppData\Local\Programs\Python\Python36\lib\smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\Mikolaj Perzyna\AppData\Local\Programs\Python\Python36\lib\smtplib.py", line 335, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\Mikolaj Perzyna\AppData\Local\Programs\Python\Python36\lib\smtplib.py", line 306, in _get_socket
self.source_address)
File "C:\Users\Mikolaj Perzyna\AppData\Local\Programs\Python\Python36\lib\socket.py", line 704, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "C:\Users\Mikolaj Perzyna\AppData\Local\Programs\Python\Python36\lib\socket.py", line 743, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
I'm sorry if I'm formatting this post wrong, which I probably am, but this is my first question on the site.

getaddrinfo failed means that the socket connection smptlib.SMTP uses failed to resolve the hostname of the server. Try a different SMTP server or a different IP/hostname.

This line is almost certainly wrong.
server = smtplib.SMTP('myserver')
Is your SMTP server really called myserver? I'd expect to see something like mail.mydomain.com there.

Related

Why am I getting "socket.gaierror [Errno 11001]" when trying to run my Python SMTP script?

I have been trying to run the following code however I am getting the following error when the code runs. I am currently following a video on a course on Udemy, however, the video seems to be outdated as the option to turn on "Less secure apps" on Gmail can't be turned on anymore as Google disabled the option. To fix this, I have enabled 2-factor authentication and generated a new password for this python script. However, it is still not working and I don't know why. Please can somebody help?
import smtplib
from credentials import *
connection = smtplib.SMTP("smtp.gmail.com", port = 587)
connection = smtplib.SMTP("smptp.gmail.com", port = 587)
connection.starttls()
connection.login(user=my_email, password=password)
connection.sendmail(from_addr=my_email, to_addrs=to_address, msg = "Testing")
connection.close()
Error as follows:
Traceback (most recent call last):
File "C:\Users\user\Documents\Python\bootcamp 2022\day 32\Birthday+Wisher+(Day+32)+start\Birthday Wisher (Day 32) start\main.py", line 9, in <module>
connection = smtplib.SMTP("smptp.gmail.com" ,port =587)
File "C:\Python39\lib\smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "C:\Python39\lib\smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Python39\lib\smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
File "C:\Python39\lib\socket.py", line 822, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "C:\Python39\lib\socket.py", line 953, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
getaddrinfo looks up the IP address for a domain name. The reason why this is failing is because you have a simple typo in the address for smtp.gmail.com. Just fix it and it should be fine. Like this:
import smtplib
from credentials import *
connection = smtplib.SMTP("smtp.gmail.com", port=587)
connection.starttls()
connection.login(user=my_email, password=password)
connection.sendmail(from_addr=my_email, to_addrs=to_address, msg = "Testing")
connection.close()
Also, there is no need to redefine connection. Doing it only once will work.

Python socket.gaierror: [Errno 11001] getaddrinfo failed

trying to make a mail sender in python, the script works on my personal laptop, but when i run it on my work laptop (i'm a recent intern) i think the proxy gets in the way of getting a connection to the gmail smtp server
the error is as follows:
File "D:\ocm-hours-report-automation\mail-manager\src\python\mail-sender.py", line 44, in <module>
session = smtplib.SMTP('smtp.gmail.com', 587) #use gmail with port
File "C:\Users\myuser\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\myuser\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\myuser\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
File "C:\Users\myuser\AppData\Local\Programs\Python\Python39\lib\socket.py", line 822, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "C:\Users\myuser\AppData\Local\Programs\Python\Python39\lib\socket.py", line 953, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
and the code is:
#The mail addresses and password
sender_address = 'email1#gmail.com'
sender_pass = 'password'
receiver_address = 'email2#gmail.com'
#Setup the MIME
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'A test mail sent by Python. It has an attachment.' #The subject line
#The body and the attachments for the mail
message.attach(MIMEText(mail_content, 'plain'))
#Create SMTP session for sending the mail
session = smtplib.SMTP('smtp.gmail.com', 587) #use gmail with port
session.starttls() #enable security
session.login(sender_address, sender_pass) #login with mail_id and password
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mail Sent')
any ideas what i can actually do? tried forcing a socks.setdefaultproxy but it said the socks import is not available
thank you!
Your suspicion is correct. socket.gaierror: [Errno 11001] getaddrinfo failed indicates the application cannot resolve the IP address of the host. There's various ways to get around this depending on the operating system of the machine running the code such as manually mapping in /etc/hosts. But, even if the IP address is resolved, that doesn't mean the proxy will allow a connection to it.
In my case, I was getting this error because I'd lost my internet connection.
I think I should share it here so that someone will not have to waste time

Repl.it SMTPLIB OSError: [Errno 99] Cannot assign requested address

I am trying to run simple emailsender.py script on repl.it to send an email.
It works without any problem when I try to run it on desktop PC, but on repl.it I am having an error message OSError: [Errno 99] Cannot assign requested address as detailed below.
The emailsender.py program looks like this:
import smtplib
def send_email(username: str, key: str):
reciever = username+"#theirmail.cz"
sender = "my_email#email.cz"
topic = "Autothorization bot"
# header
msg = "From: %s\r\nSubject: %s\r\nTo: %s\r\n\r\n" % (sender, topic, reciever)
# add message content
content = "Your key is: " + key
msg += content
server = smtplib.SMTP('smtp.seznam.cz')
server.login('my_email#email.cz', "my_email_password")
server.sendmail(sender, reciever, msg)
server.quit()
When I try to run the script via python on repl.it, I get this error message after some time:
>>> import emailsender
>>> emailsender.send_email("username", "test_message")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/runner/botpy/emailsender.py", line 24, in send_email
server = smtplib.SMTP('smtp.seznam.cz')
File "/usr/lib/python3.8/smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.8/smtplib.py", line 337, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.8/smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.8/socket.py", line 808, in create_connection
raise err
File "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address
This .py script is a piece of larger discord.py bot that I am trying to host on repl.it, but this should not have any effect, because this script alone is running well individually on desktop PC.
I've tried my best to figure out the cause of this error, but with no success so far.
For reasons unknown to me, a small configuration of commands fixed it.
New part of the script for sending the email looks like this:
server = smtplib.SMTP('smtp.seznam.cz', 587)
server.starttls()
server.ehlo()
server.login('my_email#email.cz', "my_email_password")
server.sendmail(sender, reciever, msg)
server.quit()
I had the same error and
port=587 fixed the problem

Trying to send email through python and getting error with socket

This is my code
import smtplib
from datetime import datetime
print("Sending Mail")
with smtplib.SMTP('smpt.gmail.com', 587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login('gmail', 'password')
print("Logged In")
subject = "Current Time: " + datetime.now.strftime("%d/%m/%Y %H:%M:%S")
smtp.sendmail('myemail#gmail.com', 'myemail#gmail.com', "hello")
print("Sent Email")
I'm trying to send an email through gmail using smtplib, this is the error I get:
Sending Mail
Traceback (most recent call last):
File "c:/Users/12488/Downloads/Key Logger/keylog.py", line 43, in <module>
with smtplib.SMTP('smpt.gmail.com', 587) as smtp:
File "C:\Users\12488\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\12488\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\12488\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "C:\Users\12488\AppData\Local\Programs\Python\Python38\lib\socket.py", line 787, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "C:\Users\12488\AppData\Local\Programs\Python\Python38\lib\socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
I made sure less secure devices is checked on gmail but I haven't tried every solution on the internet because I'm new to python and this is my first time using smtp and I don't get a lot of them, I think this has something to do with socket because that's another popular python module from what I've read but I don't know much about it and I'm not sure, if anyone can simplify what is wrong and explain it to me like I'm a 5 year old, it would be greatly appreciated.
You're using an incorrect domain which is not being resolved by DNS servers.
smpt.gmail.com
should be:
smtp.gmail.com

how do i send an email in python?

i've looked online but every time i try to connect to the localhost it says connection refused. Do i need to sign into a valid email address to send email?
Here is my EXACT code.
>>> import smtplib
>>> sender = 'from#fromdomain.com'
#this is my exact sender name bc i don't know if i need to use a valid email address or if i can just make up one since i dont need a password and username
>>> receiver = ['to#todomain.com']
#again, i dont know what to use for the receiver email address
>>> message = 'this is a test'
>>> s = smtplib.SMTP('localhost')
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
s = smtplib.SMTP('localhost')
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 571, in create_connection
raise err
error: [Errno 61] Connection refused
the connection refused error is my problem. i've looked online but i can't figure out how to connect it.
If you want to use gmail to send your message there is some code at: http://www.nixtutor.com/linux/send-mail-through-gmail-with-python/ that you can use. It should be pretty self explaining..
Do you have a smtp server running in your computer? Localhost refers to your own computer.

Categories