Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SMTPSenderRefused when sending mail from GAE dev_appserver on gmail

Here are my email related dev_appserver options:

--smtp_host=smtp.gmail.com --smtp_port=25 [email protected] --smtp_password="password"

Now, this still doesn't work and every time Google release a new dev_appserver I have to edit api/mail_stub.py to get things to work locally as per this S/O answer.

However, even this workaround has now stopped working. I get the following exception:

SMTPSenderRefused: (555, '5.5.2 Syntax error. mw9sm14633203wib.0 - gsmtp', <email.header.Header instance at 0x10c9c9248>)

Does anyone smarter than me know how to fix it?

UPDATE I was able to get email to send on dev_appserver by using email addresses (eg. for sender and recipient) in their 'plain' format of a simple string ([email protected]) rather than using the angle bracket style (Name <[email protected]>). This is not a problem in production: recipients and sender email addresses can use angle brackets in the mail.send_mail call. I raised a ticket about this divergent behaviour between dev_appserver and production: https://code.google.com/p/googleappengine/issues/detail?id=10211&thanks=10211&ts=1383140754

like image 466
HorseloverFat Avatar asked Nov 02 '22 11:11

HorseloverFat


1 Answers

Looks like it's because the 'sender' is now stored as a "email.header.Header" instance in the dev server instead of a string (since SDK 1.8.3 I think).

From my testing, when a 'From' string like "Name " is passed into smtplib.SMTP.sendmail, it parses the string to find the part within angle brackets, if any, to use as the SMTP sender, giving "". However, if this parameter is an "email.header.Header", then is just converts to string and uses it without further parsing, giving ">", thus causing the problem we're seeing.

Here's the patch I just posted on the issue tracker to google/appengine/api/mail_stub.py to convert this parameter back to a string (works for me):

--- google/appengine/api/mail_stub-orig.py      2014-12-12 20:04:53.612070031 +0000
+++ google/appengine/api/mail_stub.py   2014-12-12 20:05:07.532294605 +0000
@@ -215,7 +215,7 @@


       tos = [mime_message[to] for to in ['To', 'Cc', 'Bcc'] if mime_message[to]]
-      smtp.sendmail(mime_message['From'], tos, mime_message.as_string())
+      smtp.sendmail(str(mime_message['From']), tos, mime_message.as_string())
     finally:
       smtp.quit()
like image 80
AmirS Avatar answered Nov 15 '22 08:11

AmirS