传智播客-邮件开发(4)-Java Mail开发实践

使用Java Mail API发送一封简单的邮件通常包括以下几个方面:
1、创建包含邮件服务器的网络连接信息的session对象;
2、创建代表邮件内容的message对象--MimeMessage类表示整封邮件;MimeBodyPart类表示邮件的一个MIME消息,只有调用了setFileName方法的MimeBodyPart对象才能成为附件;MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息,主要用来构建复合邮件;
3、创建transport对象,连接服务器、发送message、关闭连接;
4、应用Authenticator类实现用户信息验证。

 

示例代码:

 

关于上述代码的一些说明:
1、static Transport.send()内部包括连接、验证、发送三个过程,而transport.sendMessage()只有验证、发送两个过程;
如果是群发邮件;建议用非静态方法,连接一次,发送8封;如果用静态方法,则要连8次,发送8封;如果确定只发一封,用静态方法,这样就不用创建Transport对象了,毕竟对象的创建也是需要开销的。

 

2、Message和Transport都可以选择收件人;
如果是一封邮件发送给多人:
msg.setRecipients(RecipientType.TO/CC/BCC, InternetAddress.parse("itcast_test@sina.com,itcast_test@sohu.com"));
Transport也可以设置多个收件人;

 

3、Session.getDefaultInstance(),第一次调用时返回session对象并设为默认值,再调用该方法时如果发现有默认session了就会直接返回之前的session;
Session.getInstance(),每次返回的session对象都不同。

 

4、构建完邮件后:
message.saveChange()表明邮件构建完成并保存到内存,等待发送;
message.writeTo()表明邮件构建完成,并保存到其他文件中。

 

5、构建输入输出流时,构造方法里的流参数最好在外部定义,这样可以显示声明close()方法,否则的话流对象在执行完毕后不会立即关闭,容易内存泄漏,尤其是采用for循环这样的方式,构建的流对象很多的时候。

 

6、new MimeMultipart("mixed"),需要注意的是,MimeMultipart类里面的参数是子类型("mixed")字符串而不是全类型("mulitpart/mixed"),因为这个类名已经表明它的类型从属于“mulitpart”了。

 

7、gifPart.setHeader("Content-Location", "http://www.itcast.cn/logo.gif"),将图片关联内嵌在邮件中,“Content-Location”是固定标识。

 

8、在web中增加撰写邮件并发送的功能:

--context.xml--

 

--java程序通过jndi API获得mail的session对象的示例代码--

 

(1)tomcat不是java ee的服务器,只是个servlet和jsp的web容器,部署eclipse开发的javaEE项目(java ee的默认jar包组包括javamail的类)时(开发环境可以通过-->前提是mail session是由项目程序创建的),只会把该项目非java ee的jar包部署到tomcat上相应的webapp项目的lib目录里(运行环境不能通过);这时可以手动把单独的javamail的jar copy到eclipse开发的javaEE项目的lib包下并build classpath。

 

(2)用某个servlet负责发送邮件时,如果发送的邮件很多,该servlet执行时间太长,tomcat(或servlet服务器)很可能会把把该servlet注销了,此时,就要考虑异步的方式了,该servlet只是通知某个发送邮件的模块,通知完后该servlet就返回OK,那个发送邮件的模块自己就在那运行负责发送邮件,这个发送邮件的模块应该是servlet新开启的一个(后台)线程,用while(true)使该模块一直处于等待发送邮件通知的状态,如果出错-->后台进程不和键盘和显示器打交道,如果有问题,只会往日志里面写,不会报错;再写一个servlet定期查看该日志。

 

(3)不过tomcat用jndi的方式提供了javamail的支持,要配置jndi的context.xml配置文件(在java ee项目的META-INF目录下新建一个context.xml文件,具体内容参考tomcat文档的context部分);这时mail session是由tomcat创建的,tomcat并不能从webapp/lib下获得mail.jar,此时mail.jar就要copy到tomcat的lib下了;java程序通过jndi API获得mail的session对象。

 

(4)如果报jar包冲突报类转换异常:因为有多份class文件,不同的类加载器(例如tomcat的类加载器和java项目的类加载器)加载的class文件在内存中生成的字节码内容不一定一样,就算一样也分属不同的区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值