Sending mail error with python smtplib
Solution 1
The following works for microsoft, google, yahoo accounts on Python 2.7 and Python 3.2:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Send email via smtp_host."""
import smtplib
from email.mime.text import MIMEText
from email.header import Header
####smtp_host = 'smtp.live.com' # microsoft
####smtp_host = 'smtp.gmail.com' # google
smtp_host = 'smtp.mail.yahoo.com' # yahoo
login, password = ...
recipients_emails = [login]
msg = MIMEText('body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ", ".join(recipients_emails)
s = smtplib.SMTP(smtp_host, 587, timeout=10)
s.set_debuglevel(1)
try:
s.starttls()
s.login(login, password)
s.sendmail(msg['From'], recipients_emails, msg.as_string())
finally:
s.quit()
Solution 2
Add the following to your code before logging in and have a try again;
try:
self.smtp.ehlo()
self.smtp.starttls()
self.smtp.ehlo
except:
print "No TLS :("
#do login here
Related videos on Youtube
Theodore Dunn
Updated on June 04, 2022Comments
-
Theodore Dunn almost 2 years
I am attempting to use the python 3.2 SMTPlib.sendmail() function to send a message, after some modifcation of the SMTP library (namely commenting out the rset() function which was suppressing the error msg) I managed to retrieve the following error message from the server:
SendMail Failed (554, b'Transaction failed : Cannot send message due to possible abuse; please visit http://postmaster.yahoo.com/abuse_smtp.html for more information')
The yahoo mail SMTP server thinks I'm sending spam, the URL does link to anything useful. I think it has to do with an inadequate header, I can't seem to find a definitive answer on what constitutes a compliant header & I've read of simmilar issues with Gmail. Mock emails have been substituted for this post.
Any help would be appreciated
My full code is below:
self.message = email.message_from_string('''To: <[email protected]> From: <[email protected]> Reply-To: <[email protected]> Subject: Test send mail \n\n Hello''') fromAddress = '[email protected]' toAddress = '[email protected]' try: self.smtp = SMTP() self.smtp.connect('smtp.mail.yahoo.com') except Exception: print('Connection Failed') print(traceback.format_exc()) try: self.smtp.login('rwilson','tree22') except Exception: print('Login Failed!') print(traceback.format_exc()) try: self.smtp.sendmail(fromAddress,toAddress ,self.message.as_string()) print("Message sucessfully sent!") self.smtp.close() except Exception as e: print('SendMail Failed') print(e)
-
Theodore Dunn over 10 yearsI have given up trying to use yahoo, the code above seems to work ok with using smtp.gmail.com
-
-
Ahmed Gad over 4 yearsThere was an error when the message is created using msg=MIMEMultipart(). Defining the message using msg = MIMEText('body…', 'plain', 'utf-8') as you suggested solved my problem and I am able to send body text in the message. Thanks.