Strange error in python using SMTPLIB module - python

still having issues. I just added some code which uses the smtplib module to send an email to the email address that has been entered by the user, however I got this error
File "C:\Python27\lib\smtplib.py", line 555, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.
The code I used was from a beginners website
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.login("youremailusername", "password")
msg = "\nHello!"
server.sendmail("you#gmail.com", "target#example.com", msg)
However in my case, I used the name of a variable which holds the email or the user where it says "target #example.com" Help someone? ALso I would like to know what are the numbers that come after "smtp.gmail.com"? The 587?

you need to add this server.starttls() before login
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("youremailusername", "password")
msg = "\nHello!"
server.sendmail("you#gmail.com", "target#example.com", msg)
starttls put the SMTP connection in TLS (Transport Layer security)

Related

Integration with mail and python application raising SMTP error

I am not being able to integrate between gmail and python application. My 2step authentication is on, so I have enabled account access and app password is on, have also enabled IMAP access. Yet I am getting SMTP response error: (334, b'UGFzc3dvcmQ6')
While trying first to run this code, security alert email I am getting, I have accessed allow option, yet the error is still showing.
I am not sure whether my code is throwing error or their any bug present.
This is my code:
....
import os
....import smtplib
....from email.message import EmailMessage
....EMAIL_ADDRESS= os.environ.get('Email_User')
....EMAIL_PASSWORD= os.environ.get('Email_Password')
....msg= EmailMessage()
....msg['Subject']= 'Testing email.'
....msg['From']= EMAIL_ADDRESS
....msg['To']= 'orchidlight09#gmail.com'
....msg.set_content('This is a test email.')
....with smtplib.SMTP_SSL('smtp.gmail.com',465) as smtp:
.... smtp.login(EMAIL_ADDRESS,EMAIL_PASSWORD)
.... smtp.send_message(msg)
You can try it this way as well, if it did not workout properly, change the port to 465..
import os
import smtplib
from email.message import EmailMessage
EMAIL_ADDRESS= os.environ.get('Email_User')
EMAIL_PASSWORD= os.environ.get('Email_Password')
msg = EmailMessage()
msg['Subject']= 'Testing email.'
msg['From']= EMAIL_ADDRESS
msg['To']= 'orchidlight09#gmail.com'
msg.set_content('This is a test email.')
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
s.send_message(msg)
s.quit()

Can't send email (gmail) via python

I have a code which was working like a half year ago. It basiclly sends email.
import smtplib
import socket
gmail_user="SENDERMAIL"
gmail_password="SENDERPASS"
to = 'SENDTOTHIS'
email_text = "ADSADSADSA"
try:
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_password)
server.starttls()
server.sendmail(gmail_user, to, email_text)
server.close()
#I was using this code below and it was working. I tried above code but it also did not work.
#server = smtplib.SMTP("smtp.gmail.com:587")
#server.ehlo()
#server.starttls()
#server.ehlo()
#server.login(gmail_user, gmail_password)
#server.sendmail(gmail_user, to, email_text)
#server.close()
print("Done")
except Exception as exception:
print(exception)
Here's exception
(534, b'5.7.14
5.7.14 KL7_2qGSLW9IBjP8dKKgP67bEgyKNc5ls76dnVDZcUlVQjJUQb0JX9BIVi_Agb84vKNOKB
5.7.14 fshB0ngZ_Tn8ocDpDHKavRKXmluVjHo5YM7ADKENtWn4aVTxyvaBlbXRGpA1EBh91bdV-o
5.7.14 pwiAWUHXKmRQEuSNSiFcv68DP4a7ghIu9YKnTyqtUEhGd4HgKtxa4Jz0mhSQDjD13UQWYB
5.7.14 -YEL5Sd2h5YxN8kkSAsK-J_hXMbpy7wNyeCov8lq1Aa3spZzgo> Please log in via
5.7.14 your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 f132-v6sm3660398wme.24 - gsmtp')
I did try to
logined gmail
add device to trusted devices
turned on IMAP via gmail
let less secure apps
tried this:
https://support.google.com/mail/answer/7126229?visit_id=636711453029417344-336837064&rd=2#cantsignin
There are to many ways to solve this problem. I hope this code helps.
The only thing you need to do is filling the required variables.
import socket
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#
message = "Your message" # Type your message
msg = MIMEMultipart()
password = "********" # Type your password
msg['From'] = "from#gmail.com" # Type your own gmail address
msg['To'] = "To#gmail.com" # Type your friend's mail address
msg['Subject'] = "title" # Type the subject of your message
msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP('smtp.gmail.com: 587')
server.starttls()
server.login(msg['From'], password)
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()
I can also advise to use a simpler library (a wrapper on top of smtplib, to make sure there are no other factors involved).... like yagmail (disclaimer: I'm the developer).
Try to see if this works:
import yagmail
yag = yagmail.SMTP("username", "password")
yag.send(subject="hi")

TimeoutError trying to send an email with smtplib

I am trying to use Python's smtplib module to send an email but I keep receiving a TimeoutError.
import smtplib
def send():
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(email, password) # Email and password are already defined
print('Enter recipient: ')
recipient = input()
print('Enter subject:')
subject = input() + '\n'
print('Enter body:')
body = input()
server.sendmail(email, recipient, body)
server.quit()
except TimeoutError as e:
print (str(e))
This code recieves a:
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
It looks like you have not enabled "Allow Less Secure Apps" option in your GMail account.
Here's more officially from Google,
https://support.google.com/accounts/answer/6010255?hl=en
If you are using a VPN connection, disable it first. It worked for me.
Use port 587. I was getting the same error but when I entered 587 as port it worked
smtplib.SMTP("smtp.gmail.com", 587)

Python sending email via Gmail failed

I am using this piece of code:
import smtplib
fromaddr = 'fromuser#gmail.com'
toaddrs = 'myemail#gmail.com'
msg = 'There was a terrible error that occured and I wanted you to know!'
# Credentials (if needed)
username = 'myusername'
password = 'passwd'
# The actual mail send
server = smtplib.SMTP_SSL('smtp.gmail.com',465)
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
I am receiving this error:
Traceback (most recent call last): File "C:/Python34/sendemail.py",
line 15, in
server.starttls() File "C:\Python34\lib\smtplib.py", line 673, in starttls
raise SMTPException("STARTTLS extension not supported by server.") smtplib.SMTPException: STARTTLS extension not supported by server.
When I do exculde server.starttls() I am receiving different error message about authentication. I have another price of code when I am accessing Gmail via web browser using webdriver and credentials works, so I copied and pasted to this code to make sure that credentials are correct.
I can't figure out why this is not working.
Thanks in advance.
you'll have to see here as well
use port 587
server=smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
Sending via Gmail works for me when using this code. Note that I use smtplib.SMTP() as opposed to smtplib.SMTP_SSL('smtp.gmail.com',465). Also try to use port 587 and not 465.
server = smtplib.SMTP()
server.connect(server, port)
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(send_from, send_to, msg)
server.close()
Though I do find that using the emails library is much easier.
Please, try yagmail. Disclaimer: I'm the maintainer, but I feel like it can help everyone out!
It really provides a lot of defaults: I'm quite sure you'll be able to send an email directly with:
import yagmail
yag = yagmail.SMTP(username, password)
yag.send(to_addrs, contents = msg)
You'll have to install yagmail first with either:
pip install yagmail # python 2
pip3 install yagmail # python 3
Once you will want to also embed html/images or add attachments, you'll really love the package!
It will also make it a lot safer by preventing you from having to have your password in the code.
It's either you use smtplib.SMTP() then starttls() (which I don't recommend), or you use smtplib.SMTP_SSL() alone ( dont't use starttls() after that)

Python smtplib security

I was experimenting with an email python script and was wondering if when writing a python-based email script is it is less secure as opposed to when credentials are send over the internet when logging into a web page? In the following script, are the user and pass in the clear?
import smtplib
from email.mime.text import MIMEText
GMAIL_LOGIN = 'xxxxxx#gmail.com'
GMAIL_PASSWORD = 'amiexposed?'
def send_email(subject, message, from_addr=GMAIL_LOGIN, to_addr=GMAIL_LOGIN):
msg = MIMEText(message)
msg['Subject'] = 'Test message'
msg['From'] = from_addr
msg['To'] = to_addr
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(GMAIL_LOGIN,GMAIL_PASSWORD)
server.sendmail(from_addr, to_addr, msg.as_string())
server.close()
if __name__ == '__main__':
send_email('testing email script', 'This is a test message')
That would entirely depend how the TLS connection is set up. If you are requiring valid certificates (I believe if a certificate which is not trusted is encountered, your startTLS method will throw an exception (I'm not sure you should verify this)). But considering you are setting up TLS, and sending everything over the TLS connection, everything should be encrypted. This means neither your password, username or even your message and addressees will be sent in plain text.
So no, your username and password are not send clear.

Categories