我在forms.py中有这个功能。我的settings.py目前没有电子邮件规范。
def send_email(FROM_NAME,FROM,TO,SUB,MSG,EXISTING_EMAIL,EXISTING_PASSWORD):
FROMADDR = "%s <%s>" % (FROM_NAME, FROM)
LOGIN = EXISTING_EMAIL
PASSWORD = EXISTING_PASSWORD
TOADDRS = [TO]
SUBJECT = SUB
msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (FROMADDR, ", ".join(TOADDRS), SUBJECT) )
msg += MSG+"\r\n"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()
我称之为我的views.py
send_email('my_name','from_me@gmail.com','to_som1@gmail.com','my subject','mymessage','my_existing_email@gmail.com','password_to_existing_email')
这适用于本地。我用yahoomail和gmail测试过它。但是当我上传到heroku时,会出现错误“(535,'5.7.1请使用您的网络浏览器登录,然后重试。有关详情,请访问\ n5.7.1 support.google.com/mail/bin/answer.py ?answer = 78754 et6sm2577249qab.8')“
有人可以帮忙吗?
答案 0 :(得分:1)
你想用这个:
FROMADDR = "%s <%s>" % (your_name, your_email)
答案 1 :(得分:0)
您不应该使用字符串插值构建电子邮件,这是让您的网站通过标头注入发送垃圾邮件的好方法。有关如何安全构建电子邮件的详细信息,请参阅my answer here。
一般来说,从地址格式化时,您应使用格式Display Name <email@example.com>
。有关详细信息,请参阅RFC 5322。
答案 2 :(得分:0)
您是否阅读了错误消息中链接的页面?
如果反复提示您输入用户名和密码,或者是 您收到“无效凭据”或“需要网络登录”错误, 确保您的密码正确无误。请记住密码是 区分大小写的。
如果您确定自己的密码是否正确,请从中登录您的帐户 Gmail的网络版,而不是http://mail.google.com
在大多数情况下,从网上登录应解决问题
答案 3 :(得分:0)
这对我有用。在尝试从我的Web应用程序发送电子邮件时收到错误Please log in with your web browser and then try again. Learn more etc.
后,我从本地计算机通过浏览器登录到该电子邮件。
登录后,顶部有一个黄色通知栏,询问我是否允许外部应用程序访问我的邮件。我确认了这一点,Google要求我在接下来的10分钟内从应用程序登录该帐户。这将列出应用程序的白名单。