利用Tomcat的JNDI容器管理JavaMail中的Session
2014-05-22 22:17
393 查看
第一步:把javamail的jar包(mail.jar/jaf.jar(JDK5-):Java Activation Framework JavaMail中用它读取磁盘文件)拷贝到Tomcat\lib目录下...
第二步:在引用的META-INF目录下,建立一个context.xml的配置文件,内容如下:
第三步:在web环境下通过JNDI获取JavaMail的Session
--------------------------------------------------------------------------------------------------------
案例一:发送文本和图片的邮件:
第二步:在引用的META-INF目录下,建立一个context.xml的配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="mail/Session" auth="Container" type="javax.mail.Session" mail.smtp.host="smtp.163.com"/> </Context>
第三步:在web环境下通过JNDI获取JavaMail的Session
--------------------------------------------------------------------------------------------------------
案例一:发送文本和图片的邮件:
package com.leaf.eg04.mail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class MailDemo2 { public static void main(String[] args) throws Exception{ Properties props = new Properties();//不设置任何配置,发送时需要 props.setProperty("mail.host","smtp.163.com");//设置发送主机所使用的发送协议 props.setProperty("mail.transport.protocol","smtp");//设置传输协议 Session session = Session.getInstance(props);//通过属性获取到Session的实例 session.setDebug(true);//Set the debug setting for this Session. MimeMessage msg = new MimeMessage(session);//将session加入到模拟信息MimeMessage中,因为最终发送信息Trasport需要它 msg.setFrom(new InternetAddress("itheimacloud@163.com"));//AddressException,设置发件人邮箱 msg.setRecipients(Message.RecipientType.TO, "itheima14@163.com");//设置收件类型,收件地址 msg.setSubject("JavaMail发送的邮件");//设置收件的主题 //邮件内容的组装 //文本部分 MimeBodyPart textPart = new MimeBodyPart(); textPart.setContent("abc<img src='cid:abc'>abc","text/html");//设置文本内容和文本类型 //图片部分 MimeBodyPart imagePart = new MimeBodyPart(); //需要用到jaf的API DataHandler dh = new DataHandler(new FileDataSource("src/1.jpg"));//将本地的图片内容加载到DataHandler中 imagePart.setDataHandler(dh);//将图片数据处理加载到MineBodyPart中 imagePart.setContentID("abc");//设置文本内容的id //描述关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(textPart);//将文本内容添加到MimeMultipart中 mm.addBodyPart(imagePart);//将图片内容添加到MimeMultipart中 mm.setSubType("related");//默认子类型为mixed msg.setContent(mm);//将组装好的邮件内容放到模拟信息中 msg.saveChanges();//保存信息 //msg.writeTo(new FileOutputStream("d:/"));//可以将组装好的邮件写到本地磁盘 //发送邮件 Transport ts = session.getTransport(); ts.connect("itheimacloud","iamsorry");//登录本地发送邮件客户端 ts.sendMessage(msg, msg.getAllRecipients());//向所有收件人发送信息(可以群发) } }案例二:带有文本、图片和附件的邮件发送:
package com.leaf.eg04.mail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; public class MailDemo3 { public static void main(String[] args) throws Exception{ Properties props = new Properties(); props.setProperty("mail.host","smtp.163.com"); props.setProperty("mail.transport.protocol","smtp"); props.setProperty("mail.smtp.auth", "true");//请求认证与java的实现有关 Session session = Session.getInstance(props); session.setDebug(true); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress("itheimacloud@163.com")); msg.setRecipients(Message.RecipientType.TO, "itheima14@163.com"); //msg.setContent("<img src='src/1.jpg' id='abc'/>","text/html"); msg.setSubject("您好呀"); //msg.saveChanges(); //文本部分 MimeBodyPart textPart = new MimeBodyPart(); textPart.setContent("abc<img src='cid:abc'/>abc","text/html;charset=utf-8"); //图片部分 MimeBodyPart imagePart = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("src/1.jpg")); imagePart.setDataHandler(dh); imagePart.setContentID("abc"); //附件部分 MimeBodyPart attachmentPart = new MimeBodyPart(); //attachmentPart.attachFile("src/动态代理.txt"); DataHandler dh1 = new DataHandler(new FileDataSource("src/动态代理.txt")); String name = dh1.getName(); System.out.println(name);//加上charset就不会有乱码 attachmentPart.setDataHandler(dh1); attachmentPart.setFileName(MimeUtility.encodeText(name));//手动设置附件的名称 //描述关系 MimeMultipart mmPart = new MimeMultipart(); mmPart.addBodyPart(textPart); mmPart.addBodyPart(imagePart); mmPart.setSubType("related"); //文本和图片的组合再和附件进行组合 MimeBodyPart textImagePart = new MimeBodyPart(); textImagePart.setContent(mmPart); MimeMultipart multipart = new MimeMultipart();//用户组合关系 multipart.addBodyPart(textImagePart); multipart.addBodyPart(attachmentPart); multipart.setSubType("mixed");//u复杂关系 msg.setContent(mmPart); msg.saveChanges(); //Transport ts = new Transport(new FileDataSource("src/1.jpg")); Transport ts = session.getTransport(); ts.connect("itheima@163.com","iamsorry"); ts.sendMessage(msg,msg.getAllRecipients()); } }
相关文章推荐
- 通过Tomcat的JNDI管理JavaMail的Session
- JavaMail深入体验开发三: 利用Tomcat管理邮件session及jar包冲突解决方案
- tomcat配置阿里druid,基于容器管理JNDI数据源
- Tomcat架构分析之Session管理
- 利用过滤器对hibernate的session管理,实现session在线程范围内的共享
- 连接池、装饰设计模式、适配器设计模式、JNDI容器、DBCP、C3P0、Tomcat数据源
- tomcat架构分析 (Session管理) 一篇不错的文章
- Tomcat下Session的使用与管理
- Tomcat 5 servlet/JSP 容器 JNDI 资源使用说明 (一)
- Spring通过JNDI获取在Tomcat容器中配置的C3P0数据源
- Tomcat管理session的持久化
- Tomcat容器管理之安全防护
- Tomcat中session的管理机制
- tomcat管理及session设置
- 利用ThreadLocal管理Hibernate的Session
- Tomcat集群session管理解决方案
- Tomcat Session的管理
- tomcat 使用 memcached管理session ,并且实现统一登录
- Tomcat中JavaMail支持与冲突--Tomcat创建邮件发送环境对象Session
- 【Apache Tomcat 系列】Tomcat集群session管理解决方案(关于sticky session、session replication与使用memcached缓存session)