亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

在django1.2+python2.7環境中使用send_mail發送郵件

標簽:
Python Yii


 

最近在加紧学习python2.7+django1.2,操作系统使用的是ubutntu11.

而且充分利用了SAE(Sina AppEngine)几乎免费的云服务,还可以更好的实践在生产环境的效果。

新浪SAE的python环境的详细情况,可以参看:SAE Python 开发者手册。

今天学到了发送邮件这一课。刚开始没有使用sae的邮件服务,直接使用django.core.mail.send_mail函数。

首先在settings.py文件中设置如下

# email function, email notification 

EMAIL_ADMIN="[email protected]

 

EMAIL_USE_TLS=True #是否需要传输层安全

EMAIL_HOST="smtp.gmail.com" #发送邮件的主机地址

EMAIL_PORT=587#25#465 #端口

EMAIL_HOST_USER="[email protected]" #验证账号

EMAIL_HOST_PASSWORD ="login_password"#验证密码

DEFAULT_FROM_EMAIL="[email protected]"#默认的from地址

准备使用gmail作为邮件发送代理,设置了host等信息。

在代码中按照下面的格式写即可

from django.core.mail import send_mail 

 

mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 

     

def send_mail('new comment posted', mail_body, settings.EMAIL_HOST_USER, [settings.EMAIL_ADMIN], 

              fail_silently=False):  

可是就是现实失败,几次尝试都没有成功,上网搜索了一些资料也未果。

然后打开django shell,尝试在shell中发送。

进入程序根目录,启动shell

python manage.py shell 

进入shell之后,键入下面的代码

from django.core.mail import send_mail 

send_mail('title','content','[email protected]',['[email protected]']) 

还是报错,提示我应该使用application-specific passwords,还给出一个地址,我打开看完之后,恍然大悟,也想起来了,之前进行android开发也遇到过类似情况,是google的设置,使用代码或者是第三方工具利用gmail作为代理发邮件的话,不能使用gmail的登录密码,需要申请一个临时密码,然后使用临时密码发送,这个临时密码是在google的用户后台界面生成了,还可以随时手动收回这个密码,这样加强了对于登录密码的保护,其实有点像是oauth的token,或者是令牌,会失效的,可以收回。详细情况参看http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833。

于是我通过上面的网址进入下面的页面

点击红框中的链接,登录之后,在页面下部的name输入框中输入一个字符串,没有特殊要求,可以理解为这个临时密码的范围,点击【generate password】,将出现的密码替换settings.py中密码项。重新进入shell,再次尝试发送邮件,这回成功了,返回了1,返回1表示发送成功,可以到邮箱里面查看了。

可是我的网页还是没有发送成功,我就打开SAE Python 开发者手册,看看有没有什么主意的地方,看到有一页叫做【可用的服务列表】,写到了邮件服务,我就用sae的send_mail替换了django.core.mail.send_mail。代码更正为下面的部分。

需要去掉django.core.mail.send_mail的引用,添加sae.mail.send_mail的引用。

from sae.mail import send_mail 

 

mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 

         

        send_mail(settings.EMAIL_ADMIN,"new comment posted",mail_body , 

            (settings.EMAIL_HOST,settings.EMAIL_PORT,settings.EMAIL_HOST_USER,settings.EMAIL_HOST_PASSWORD,settings.EMAIL_USE_TLS) 

            ) 

在此打开网页,点击发送邮件,一切ok了。

总结

搞定了,有几个问题需要大家注意:

 

1.使用gmail发送邮件,其中的验证用的密码不能使用google的登陆密码,使用第三方经过gmail发邮件,需要使用application 

specification password,具体的设置和说明,可以参看http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833

 

2.使用国内的邮件提供商(例如:新浪,163,qq等),直接使用邮箱登陆密码验证就可以发送。 

3.我是在sae的环境中测试发送邮件,这时候,不能使用django.core.mail.send_mail函数,需要使用sae的 

sae.mail.send_mail。详情可以参看http://appstack.sinaapp.com/static/doc/release/testing/service.html#mail

 

©著作权归作者所有:来自51CTO博客作者virusswb的原创作品,如需转载,请注明出处,否则将追究法律责任

休闲SAEdjango1.2Python


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消