今天用EJB3写了bug管理小系统,在一个bug提交以后,会自动发送邮件到邮箱。以前在SSH框架中也写过发送邮件的程序,根据原先思路写出来的程序,居然不能运行。后来在网上查了一下,原来Jboss发送邮件要简单的多。只需要配置一下,就可以直接使用程序发送邮件了。
在jboss中,发送邮件只需要两步即可:
① 在%jboss_home%server\default\deploy中配置mail-service.xml文件;
② 在程序中组织邮件的发送人,接收人,标题,正文等等的内容,用Transport.send()发送邮件;
下面我们逐一解说这两步的做法。
1)配置mail-service.xml文件。
在%jboss_home%server\default\deploy路径下,有mail-service.xml文件的模板,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ -->
<server>
<!-- ==================================================================== -->
<!-- Mail Connection Factory -->
<!-- ==================================================================== -->
<mbean code="org.jboss.mail.MailService"
name="jboss:service=Mail">
<!--配置JNDIName -->
<attribute name="JNDIName">java:/Mail</attribute>
<!-- 配置发邮件的服务器用户名以及密码 -->
<attribute name="User">nobody</attribute>
<attribute name="Password">password</attribute>
<attribute name="Configuration">
<!-- A test configuration -->
<configuration>
<!-- 配置邮件服务器默认pop和smtp协议-->
<!-- Change to your mail server prototocol -->
<property name="mail.store.protocol" value="pop3"/>
<property name="mail.transport.protocol" value="smtp"/>
<!-- 接收邮件的用户 -->
<!-- Change to the user who will receive mail -->
<property name="mail.user" value="nobody"/>
<!-- 配置邮件的pop3和stmp服务器-->
<!-- Change to the mail server -->
<property name="mail.pop3.host" value="pop3.nosuchhost.nosuchdomain.com"/>
<!-- Change to the SMTP gateway server -->
<property name="mail.smtp.host" value="smtp.nosuchhost.nosuchdomain.com"/>
<!-- 邮件服务器的端口 -->
<!-- The mail server port -->
<property name="mail.smtp.port" value="25"/>
<!-- 发出邮件的邮箱地址 -->
<!-- Change to the address mail will be from -->
<property name="mail.from" value="nobody@nosuchhost.nosuchdomain.com"/>
<!-- 发送邮件过程中,是否打印debug信息以便调试 -->
<!-- Enable debugging output from the javamail classes -->
<property name="mail.debug" value="false"/>
</configuration>
</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>
在模板上,我写上了中文注释,以便大家明白每个配置都是干什么用的,下面以我在项目中的配置为例,写出来一个配置文件。在项目中,我是利用163的邮件来发送邮件的。配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ -->
<server>
<!-- ==================================================================== -->
<!-- Mail Connection Factory -->
<!-- ==================================================================== -->
<mbean code="org.jboss.mail.MailService"
name="jboss:service=Mail">
<attribute name="JNDIName">java:/tourMail</attribute>
<attribute name="User">登陆邮件服务器用户名</attribute>
<attribute name="Password">登陆邮件服务器密码</attribute>
<attribute name="Configuration">
<!-- A test configuration -->
<configuration>
<!-- Change to your mail server prototocol -->
<property name="mail.smtp.auth" value="true"/>
<property name="mail.store.protocol" value="pop3"/>
<property name="mail.transport.protocol" value="smtp"/>
<!-- Change to the user who will receive mail -->
<property name="mail.user" value="choukakou"/>
<!-- Change to the mail server -->
<property name="mail.pop3.host" value="pop.163.com"/>
<!-- Change to the SMTP gateway server -->
<property name="mail.smtp.host" value="smtp.163.com"/>
<!-- Change to the address mail will be from -->
<property name="mail.from" value="XXXX@163.com"/>
<!-- Enable debugging output from the javamail classes -->
<property name="mail.debug" value="true"/>
</configuration>
</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>
2)在程序中设定发送地址,接收地址,标题以及内容,并发送邮件。
String methodName = "onMessage";
logger.info("<<<<< " + className + ":" + methodName + " Start >>>>>");
if (message instanceof MapMessage) {
MapMessage mapMessage = (MapMessage)message;
logger.info("△△△△△" + className + " message is MapMessage");
try {
// 查找JNDIName,JNDIName就是我们在mail-service.xml中配置的JNDIName
InitialContext ctx = new InitialContext();
Session sessions = (Session) ctx.lookup("java:/tourMail");
// 创建Message
MimeMessage msg = new MimeMessage(sessions);
// 设置发件人地址
msg.setFrom(new InternetAddress("choukakou@163.com"));
// 设置收件人地址
msg.setRecipients(javax.mail.Message.RecipientType.TO,mapMessage.getString("mail_to"));
// 设置消息主题
msg.setSubject(mapMessage.getString("subject"));
// 设置发送时间
msg.setSentDate(new java.util.Date());
Multipart multipt = new MimeMultipart();
// 创建邮件内容的正文
MimeBodyPart msgbody = new MimeBodyPart();
String text = CreateMailContent.createContent(mapMessage);
msgbody.setContent(text,"text/html");
multipt.addBodyPart(msgbody);
// 设置邮件发送邮件的信息
msg.setContent(multipt);
// 发送邮件
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
logger.info("<<<<< " + className + ":" + methodName + " End >>>>>");
就是这样,很简单的就可以穿件出一个发送邮件的程序。是不是so easy呢,赶紧试试吧。