SMTPSenderRefused when sending mail from GAE dev_a

2019-06-28 06:13发布

Here are my email related dev_appserver options:

--smtp_host=smtp.gmail.com --smtp_port=25 --smtp_user=me@mydomain.com --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 (name@domain.com) rather than using the angle bracket style (Name <name@domain.com>). 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

1条回答
做个烂人
2楼-- · 2019-06-28 07:00

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()
查看更多
登录 后发表回答