在django1.2+python2.7环境中使用send_mail发送邮件

简介:

 

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

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

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

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

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



 
  1. # email function, email notification 
  2. EMAIL_ADMIN="jorden008@gmail.com" 
  3.  
  4. EMAIL_USE_TLS=True #是否需要传输层安全
  5. EMAIL_HOST="smtp.gmail.com" #发送邮件的主机地址
  6. EMAIL_PORT=587#25#465 #端口
  7. EMAIL_HOST_USER="jorden008@gmail.com" #验证账号
  8. EMAIL_HOST_PASSWORD ="login_password"#验证密码
  9. DEFAULT_FROM_EMAIL="jorden008@gmail.com"#默认的from地址

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

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


 
  1. from django.core.mail import send_mail 
  2.  
  3. mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 
  4.      
  5. def send_mail('new comment posted', mail_body, settings.EMAIL_HOST_USER, [settings.EMAIL_ADMIN], 
  6.               fail_silently=False):  

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

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

进入程序根目录,启动shell

 
  1. python manage.py shell 

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


 
  1. from django.core.mail import send_mail 
  2. send_mail('title','content','jorden008@163.com',['jorden008@163.com']) 

还是报错,提示我应该使用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的引用。

 
  1. from sae.mail import send_mail 
  2.  
  3. mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 
  4.          
  5.         send_mail(settings.EMAIL_ADMIN,"new comment posted",mail_body , 
  6.             (settings.EMAIL_HOST,settings.EMAIL_PORT,settings.EMAIL_HOST_USER,settings.EMAIL_HOST_PASSWORD,settings.EMAIL_USE_TLS) 
  7.             ) 

在此打开网页,点击发送邮件,一切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

 




本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/788482,如需转载请自行联系原作者

相关实践学习
基于小程序Serverless开发个人相册小程序
本场景基于小程序云Serverless+小程序开发者工具(IDE),快速搭建个人相册小程序
SAE的功能与使用入门
欢迎来到《SAE的功能与使用入门》,本课程是“云原生Serverless Clouder认证“系列中的第三阶段。课程将向您介绍阿里云Serverless应用引擎(SAE)服务相关的概念、特性与使用方式。通过课程将带您逐步深入探索Serverless世界,借助SAE服务,即使没有丰富的云计算和IT经验,也能够让开发人员在实际业务场景中便捷的掌握如何构建和部署应用程序,快速拥抱Serverless架构,将精力聚焦在应用代码和业务逻辑的实现上。 学习完本课程后,您将能够: 掌握Serverless应用引擎(SAE)的基本概念与核心优势 了解Serverless应用引擎(SAE)的核心功能 掌握使用Serverless应用引擎(SAE)的开发和部署流程 了解Serverless应用引擎(SAE)的适用场景和最佳实践  
目录
相关文章
|
1天前
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
|
3天前
|
人工智能 IDE 开发工具
python环境安装教程
python环境安装教程
19 0
|
3天前
|
前端开发 UED Python
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
|
3天前
|
中间件 Python
中间件应用Django Middleware(Python)
中间件应用Django Middleware(Python)
30 6
|
11天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】Python环境下的机器学习库概览
【4月更文挑战第30天】本文介绍了Python在机器学习中的重要性及几个主流库:NumPy用于数值计算,支持高效的数组操作;Pandas提供数据帧和序列,便利数据处理与分析;Matplotlib是数据可视化的有力工具;Scikit-learn包含多种机器学习算法,易于使用;TensorFlow和Keras是深度学习框架,Keras适合初学者;PyTorch则以其动态计算图和调试工具受到青睐。这些库助力机器学习研究与实践。
|
13天前
|
运维 监控 Serverless
Serverless 应用引擎产品使用之阿里函数计算中在自定义环境下用debian10运行django,用官方层的python3.9,配置好环境变量后发现自定义层的django找不到了如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
22 3
|
15天前
|
存储 搜索推荐 开发者
django-haystack,具有全文搜索功能的 Python 库!
django-haystack,具有全文搜索功能的 Python 库!
25 0
|
16天前
|
SQL 缓存 数据库
在Python Web开发过程中:数据库与缓存,如何使用ORM(例如Django ORM)执行查询并优化查询性能?
在Python Web开发中,使用ORM如Django ORM能简化数据库操作。为了优化查询性能,可以:选择合适索引,避免N+1查询(利用`select_related`和`prefetch_related`),批量读取数据(`iterator()`),使用缓存,分页查询,适时使用原生SQL,优化数据库配置,定期优化数据库并监控性能。这些策略能提升响应速度和用户体验。
18 0
|
17天前
|
机器学习/深度学习 人工智能 运维
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
|
18天前
|
安全 开发工具 git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
23 0