1、邮件功能

在Web应用程序的开发中,经常会有处理邮件的需求。Play的play.libs.Mail辅助类为我们提供了方便的发送电子邮件的支持。下例代码演示如何使用Play发送简单的文本邮件:

SimpleEmailemail=newSimpleEmail();
// 邮件发送者
email
.setFrom("sender@zenexity.fr");
// 邮件接收者
email
.addTo("recipient@zenexity.fr");
// 邮件主题
email
.setSubject("subject");
// 邮件内容
email
.setMsg("Message");
Mail.send(email);

下例代码演示如何使用Play发送HTML格式邮件:

HtmlEmailemail=newHtmlEmail();
email
.addTo("info@lunatech.com");
email
.setFrom("sender@lunatech.com","Nicolas");
email
.setSubject("Test email with inline image");
// 在邮件中嵌入图片
URL url
=newURL("http://www.zenexity.fr/public/images/layout/logo.png");
Stringcid=email.embed(url,"Zenexity logo");
// 设置HTML邮件内容
email
.setHtmlMsg("<html>Zenexity logo - <img src=\"cid:"+cid+"\"></html>");
// 设置邮箱不支持HTML邮件提示
email
.setTextMsg("Your email client does not support HTML, too bad :(");
Mail.send(email);


补充:

HTML是网页格式,以HTML格式发送邮件,对方接收到的邮件将会以页面形式显示。


1.1 邮件和MVC集成#

Play还可以使用JavaMail标准的模板机制和语法发送复杂的、动态的电子邮件。

首先,我们需要为应用程序创建Mailer类。创建的Mailer类存放在notifiers包下,并继承于play.mvc.Mailer类。Mailer类中每个公共静态方法都是邮件发送者,类似MVC中的控制器的角色:

packagenotifiers;

importplay.*;
importplay.mvc.*;
importjava.util.*;

importorg.apache.commons.mail.EmailAttachment;

importmodels.*;

publicclassMailsextendsMailer{

publicstaticvoidwelcome(Useruser){
// 邮件主题
setSubject
("Welcome %s",user.name);
// 邮件接收者
addRecipient
(user.email);
// 邮件发送者
setFrom
("Me <me@me.com>");
// 添加附件
EmailAttachmentattachment=newEmailAttachment();
attachment
.setDescription("A pdf document");
attachment
.setPath(Play.getFile("rules.pdf").getPath());
addAttachment
(attachment);
// 以模板推送,渲染邮件
send
(user);
}

publicstaticvoidlostPassword(Useruser){
Stringnewpassword=user.password;
setFrom
("Robot <robot@thecompany.com>");
setSubject
("Your password has been reset");
addRecipient
(user.email);
send
(user,newpassword);
}

}



以HTML模板渲染邮件

我们通常采用HTML模板作为邮件体进行推送。上例welcome Action调用的send()方法会以app/views/Mails/welcome.html模板作为e-mail消息体进行渲染。因此,我们需要在app/views/Mails/目录下创建welcome.html模板:

<html>
<body>
<p>Welcome<b>${user.name}</b>.</p>
</body>
</html>

而lostPassword Action调用的模板为app/views/Mails/lostPassword.html,我们也为此创建相应的模板:

<html>
<body><head>...</head><body>
<imgsrc="mycompany.com/images"/>
<p>
Hello ${user.name}, Your new password is
<b>${newpassword}</b>.
</p>
</body>
</html>



以纯文本渲染邮件

如果不存在对应的HTML模板,框架默认以纯文本模板形式推送电子邮件。当控制器调用send()方法时,Play以app/views/Mails/welcome.txt模板作为e-mail消息体渲染:

Welcome${user.name},
...

而lostPassword()方法对应的纯文本模板为app/views/Mails/lostPassword.txt:

Hello${user.name},

Yournewpasswordis${newpassword}.

如果同时存在HTML模板和纯文本模板,那么纯文本模板将被视为可选。在前面的例子中,如果app/views/Mails/lostPassword.html模板和app/views/Mails/lostPassword.txt模板同时存在,那么该电子邮件将以lostPassword.html模板(text/html形式)进行渲染,lostPassword.txt模板将被视为可选的方式。在应用中推荐以HMTL格式发送电子邮件。



通过e-mail连接应用程序

使用@@{}标签可以在邮件中包含应用程序的连接:

<html>
<body>
<p>Welcome<b>${user.name}</b>.</p>
<ahref="@@{application.index}">link</a>
</body>
</html>

如果使用Job发送e-mail,需要在application.conf文件中配置application.baseUrl选项。application.baseUrl的值必须是合法的外部baseurl(对应于应用程序)。如playframework.org官方网站使用内部Job发送e-mail,application.baseUrl需进行如下配置:

application.baseUrl=http://www.playframework.org/


1.2 SMTP 配置#

在我们使用Play的邮件功能之前,需要在conf/application.conf文件中定义SMTP服务器地址:

mail.smtp.host=smtp.taldius.net

如果该SMTP服务器需要认证,则添加用户名密码属性配置:

mail.smtp.user=username
mail
.smtp.pass=password



配置通道和端口

电子邮件在网络上是以明文方式传输的,在传输过程中并没有提供加密服务。直接将邮件暴露在互联网上非常危险,攻击者可以轻易截获用户的私密信息。Play提供两种信道加密发送邮件的方式。

如果服务器支持starttls命令(见协议: RFC 2487),通过25端口与服务器建立连接可以直接切换至SSL/TLS模式,具体配置如下:

mail.smtp.channel=starttls

如果服务器支持的是SMTP-over-SSL(SMTPS)连接,通常SSL socket会在465端口进行监听。针对这种情况Play的具体配置如下:

mail.smtp.channel=ssl


1.3 更多配置项#

默认情况下,Play使用JavaMail执行SMTP事务。如果需要查看它是如何运行的,可以添加如下配置:

mail.debug=true

当通过JavaMail建立SSL连接时,如果远程服务器不是由根证书(root certificate)进行签名,SSL默认会将其丢弃。以下属性配置对该选项进行控制:

mail.smtp.socketFactory.class


补充:

使用自签证书(self-signed certificate)时,Play的默认行为是跳过该连接检查。



      如果读者需要自定义连接服务器的端口,可以配置以下属性进行端口控制:

mail.smtp.port=2500


1.4 使用Gmail#

我们以Gmail作为邮件服务器为例,介绍具体的SMTP配置选项:

mail.smtp.host=smtp.gmail.com
mail
.smtp.user=yourGmailLogin
mail
.smtp.pass=yourGmailPassword
mail
.smtp.channel=ssl

play框架使用起来(17)相关推荐

  1. 读-李林峰-分布式服务框架和原理1-7

    这哥们还写过一本netty的书,说实话这本书感觉不好,来过公司介绍过netty,讲的比较入门,因为当时在看netty源码,所以就不太感冒.后来学习公司服务框架的源码,想找本书系统了解下,又搜到这哥们, ...

  2. 高通WLAN框架学习(17)-- NIO和PNO

    本章详细介绍了preferred network offload (PNO)扫描概述.流.模式和配置文件. 18.1 PNO扫描概述 WLAN STA在通过AP模组连接AP之前,需要偶尔对环境进行扫描 ...

  3. 号外! 大维度机器学习也有计算框架了

    号外! 大维度机器学习也有计算框架了 2016-08-04 17:57 转载 陈圳 0条评论 雷锋网(搜索"雷锋网"公众号关注)按:本文转自腾讯大数据,这篇文章主要介绍了腾讯数据平 ...

  4. java常用框架总结

    今天想看看现在常用的框架有哪些,发现网上文章不多决定根据自己的理解写一篇文章,如有错误希望大家包涵: 1.java的5大框架.springboot都不说了,网上资料很多: 2.缓存工具:Ehcache ...

  5. osgi框架和spring区别_最新100道大厂高频spring面试题附答案

    简介 这里是由多位互联网大厂架构师面试整理的出现频率最高的spring相关面试题,并为大家整理了完整的答案,赶紧收藏起来吧! 100道spring高频面试题 Spring概览 1.Spring是什么? ...

  6. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  7. antvue 有赞布局_UI大全:前端UI框架集合(持续更新,当前32个)

    2017-1209 ZanUI (Vue) 2017-1218 Onsen UI(Vue, React, Angular) 2017-1215 增加 Vuetify, Weex UI, Semanti ...

  8. 实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的.在基于SpringFramework的WEB应用中, 我们可以使用Acegi作为安全架构的实现.本文将介绍如何在基于Spring构架的We ...

  9. .NET平台常见技术框架整理汇总

    使用.NET平台开发有段时间了,在网上资料的基础上做了进一步整理,汇集了.NET平台常见的技术框架. 参考资料: 基于.NET平台常用的框架整理 .NET开源框架列表 1.知识网络 2.分类清单 2. ...

  10. 洞悉规模化敏捷框架S@S、LeSS、SAFe(下篇)

    前面我们分享了<洞悉规模化敏捷框架>上篇和中篇,本篇是文章下篇,将继续从其他维度分析规模化敏捷框架. 点击链接阅读: <洞悉规模化敏捷框架> 上篇 <洞悉规模化敏捷框架& ...

最新文章

  1. 设计模式之中介者模式(Mediator)摘录
  2. iOS 直播专题6-流媒体服务器
  3. javascript 的面向对象特性参考
  4. NET穿透技术---UDP打孔
  5. JavaScript实现http地址自动检测并添加URL链接
  6. C++工作笔记-WM_KEYFIRST和WM_KEYDOWN的用法
  7. Alpha 冲刺报告2
  8. 备份恢复,DBA最后一道防线,你完全掌握了吗?
  9. retrofit封装
  10. 深度学习自学(二十二):人脸检测人脸识别-嵌入式平台方案汇总
  11. 对比会声会影与剪映哪个制作转场效果更专业
  12. C++中名字隐藏,名字查找优先于类型检查
  13. Atitit 综合原则 软件与项目开发中的理念信念 目录 1.1. 建议组合使用扬长避短 1 1.2. 常见数据库 mysql oracle mssql mongodb postgre sqlit
  14. BZOJ3637 Query on a tree VI
  15. 模组管理器功能模块热插拔流程
  16. 计算机基础知识整理 世上最全,IT小白必看:计算机基础知识整理大全
  17. ubuntu 版mysql客户端工具_mysql linux版下载
  18. Linux 音频编程 -- 如何使用ALSE库播放wav文件
  19. 大前研一/聰明人必做的十件事
  20. ASP.NET MVC中商品模块小样

热门文章

  1. ASP.NET微信群机器人管家系统,源码分享
  2. 软件测试的新技术和方法
  3. 做自己喜欢做的事,需要勇气,也需要能力
  4. XZ_iOS 之各大银行URL Schemes
  5. 金斧子银斧子和铁斧子
  6. 两步解决----中国大学mooc网页加载慢
  7. 使用Timer实现Flutter启动页
  8. 瓷砖铺贴方法_12种最好看的瓷砖铺贴方式!
  9. mac os监听扬声器、麦克风的音量、静音
  10. Java图像处理方面的工具库和开发包