看这个例子之前最好先看下“我的资源”里的《EJB3.0开发Message Driven Bean》教怎样开发MDB,还配有图片,很好的实例
下面看怎样开发JMS发送邮件
首先需要配置个mail文件
路径在:%JBOSS_HOME%\server\all\deploy中有个mail-service.xml
打开它,大致修改成:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<!-- $Id: mail-service.xml,v 1.5.6.1 2005/06/01 06:20:43 starksm Exp $ -->
<server>
<!-- ==================================================================== -->
<!-- Mail Connection Factory -->
<!-- ==================================================================== -->
<mbean code="org.jboss.mail.MailService"
name="jboss:service=Mail">
<attribute name="JNDIName">java:/Mail</attribute>
<attribute name="User">邮箱的用户名</attribute>
<attribute name="Password">邮箱的密码</attribute>
<attribute name="Configuration">
<!-- Test -->
<configuration>
<!-- 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"/>
<!-- Change to the mail server -->
<property name="mail.pop3.host" value="pop3.163.com"/>
<!-- Change to the SMTP gateway server -->
<property name="mail.smtp.host" value="smtp.163.com"/>
<property name="mail.smtp.auth" value="true"/>
<!-- Change to the address mail will be from -->
<property name="mail.from" value="用户名@邮箱(例如:163).com"/>
<!-- Enable debugging output from the javamail classes -->
<property name="mail.debug" value="false"/>
</configuration>
<depends>jboss:service=Naming</depends>
</attribute>
</mbean>
</server>
建立一个ejb3.0的项目
图上的myjboss是我先前建的jboss服务器。
下面是如果没有jboss server建立新的服务器的过程
选择jboss as4.0
点击完成以后又回到这个界面,因为之前有服务器了,我就没有新建,然后点完成
package examples.Message;
import javax.ejb.*;
import javax.naming.*;
import javax.jms.*;
import java.util.*;
import java.text.*;
import javax.mail.*;
import javax.mail.internet.*;
/**
* MessageBean class must implement two interfaces MessageDrivenBean and
* MessageListener
*/
@SuppressWarnings( { "serial", "unused" })
@MessageDriven(activationConfig =
{
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "queue/testQueue")
})
public class MessageBean implements MessageListener {
private transient MessageDrivenContext context = null;
/**
* a no-argument constructor
*/
public MessageBean() {
}
/**
* called by container during object creation
*/
/**
* The onMessage Method receives the Message parameter, type casts it to the
* appropriate message type and prints the contents of the message. A mail
* note is then sent to the message sender
*/
public void onMessage(javax.jms.Message msg) {
try {
if (msg instanceof MapMessage) {
MapMessage map = (MapMessage) msg;
System.out.println("Order received: ");
System.out.println("Order ID: " + map.getString("OrderID")
+ " Item ID: " +
map.getInt("ItemID") + " Quanity: "
+ map.getInt("Quantity") + " Unit Price: " +
map.getDouble("UnitPrice"));
sendNote(map.getString("emailID"));
} else {
System.out.println("wrong message type");
}
} catch (Throwable te) {
te.printStackTrace();
}
}
/**
* Sends an e-mail notification to the recipient e-mail ID specified in the
* input parameter
*/
private void sendNote(String recipient) {
try {
// Initialize JNDI context
Context initial = new InitialContext();
// look up the mail server session
javax.mail.Session session = (javax.mail.Session)
initial.lookup("java:/Mail");
// Create a new mail object
javax.mail.Message msg = new MimeMessage(session);
// set various mail properties
msg.setFrom();
msg.setRecipients(javax.mail.Message.RecipientType.TO,
InternetAddress.parse(recipient,
false));
msg.setSubject("您有一封信邮件");
DateFormat dateFormatter = DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.SHORT);
Date timeStamp = new Date();
String messageText = "恭喜您,邮件发送成功 "
+ dateFormatter.format(timeStamp) + ".";
msg.setText(messageText);
msg.setSentDate(timeStamp);
// send the mail message
Transport.send(msg);
} catch (Exception e) {
throw new EJBException(e.getMessage());
}
}
}
根据上面代码的包名和类名,把这个类建好。然后会报错,解决过程如下图
点击add external jars..导入之前下载的mail.jar
下载地址是:
http://cds-esd.sun.com/ESD36/JSCDL/javamail/1.4.1/javamail-1_4_1.zip?AuthParam=1212507419_fada7a5c54305290323a361afbe9149d&TicketId=B%2Fw2lR6BSl5JSBRCOV5flgDh&GroupName=CDS&FilePath=/ESD36/JSCDL/javamail/1.4.1/javamail-1_4_1.zip&File=javamail-1_4_1.zip
然后把该项目打包成jar文件,放到%JBOSS_HOME%\server\all\deploy下过程如下
然后测试,也相当于客户端
建立动态web项目
在doGet中添加以下代码:
Context jndiContext = null;
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue queue = null;
QueueSender queueSender = null;
MapMessage message = null;
@SuppressWarnings("unused")
final int NUM_MSGS;
/*
* if ((args.length < 1)) { System.out.println("Usage: java
* MessageClient " + ""); System.exit(1); }
*/
// Obtain JNDI context and
// Look up connection factory and queue.
try {
jndiContext = new InitialContext();
Object tmp = jndiContext.lookup("ConnectionFactory");
queueConnectionFactory = (QueueConnectionFactory) tmp;
// queueConnection = queueConnectionFactory.createQueueConnection();
/*
* queueConnectionFactory = (QueueConnectionFactory) jndiContext
* .lookup("java:comp/env/QueueConnectionFactory");
*
* queue = (Queue) jndiContext.lookup(args[0]);
*/
queue = (Queue) jndiContext.lookup("queue/testQueue");
} catch (NamingException e) {
System.out.println("JNDI lookup failed: " + e.toString());
System.exit(1);
}
/*
* Create session from connection; false means session is not
* transacted. Create sender and map message. Send messages, varying
* text slightly. Send end-of-messages message. Finally, close
* connection.
*/
try {
// Create connection.
queueConnection = queueConnectionFactory.createQueueConnection();
// Create session from connection
queueSession = queueConnection.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
queueConnection.start();
// Create Sender
queueSender = queueSession.createSender(queue);
// Create Map Message
message = queueSession.createMapMessage();
// Define several Name/Value pairs
message.setString("OrderID", "1");
message.setInt("ItemID", 5);
message.setInt("Quantity", 50);
message.setDouble("UnitPrice", 5.00);
message.setString("emailID", "254164472@qq.com");// 注意,邮箱添自己的
// Send message
queueSender.send(message);
} catch (JMSException e) {
System.out.println("Exception occurred: " + e.toString());
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException e) {
}
}
}
上面代码中,有个邮箱地址,那添自己的邮箱。否则邮件就会发送到254164472.qq.com里了
粘贴完如果报错,可以把鼠标放到错误的那行按住Ctrl+1然后选add library...
然后部署到服务器上,进行测试
点击完成就可以了,如果没有jboss可以选择(单选按钮)下面那个新建一个服务器
然后点击完成。等jboss启动完
在IE中地址栏输入:http://localhost:8080/JMS_Client/testJMS
如果把上面servlet 中的邮箱地址写成自己的,那么此时就会收到一封邮件。
分享到:
相关推荐
为了发送邮件,我们需要`spring-boot-starter-mail`依赖,同时为了整合JMS,我们需要`spring-jms`和`spring-boot-starter-data-jpa`(如果你使用ActiveMQ作为JMS提供者)。在`pom.xml`文件中添加以下依赖: ```xml ...
6. **邮件协议支持**:JavaMail API支持多种邮件协议,如SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol version 3)和IMAP4(Internet Message Access Protocol version 4)用于...
在这个"ActiveMQ实例---分布式发送邮件"的案例中,我们将探讨如何利用ActiveMQ实现分布式环境下的邮件发送功能。 首先,让我们了解一下ActiveMQ的基本概念。ActiveMQ是一个实现了多种消息协议(如OpenWire、STOMP、...
4. **发送邮件**:调用`JavaMailSender`的`send()`方法,发送预设好的邮件。 5. **异步处理**:结合ActiveMQ,邮件发送可以通过消息队列异步执行,提高系统响应速度和稳定性。当一个请求触发邮件发送时,将邮件信息...
当ActiveMQ与Spring整合时,可以方便地实现异步处理,比如异步发送邮件,这在大型系统中尤为常见,因为它们能够避免阻塞主线程,提升系统性能。 **ActiveMQ基础** 1. **概念理解**:ActiveMQ作为消息代理,接收并...
这个接口可能会有如`sendEmail()`和`sendSms()`这样的方法,分别用于发送邮件和短信。 - 接口设计通常会遵循RESTful原则,这意味着每个方法可能对应一个HTTP动词(GET、POST、PUT、DELETE),并接收JSON或XML格式的...
而在消费者端,需要监听这个队列,接收到消息后执行实际的邮件发送操作,如使用JavaMail API发送邮件。 总的来说,这个项目提供了一种实用的方法,将邮件发送这种可能影响用户体验的操作异步化,从而优化了系统性能...
Java发送邮件功能是Java开发中常见的一项任务,尤其在企业级应用中,如发送通知、验证码、报告等。Spring框架提供了强大的支持,使得这个过程变得简单而高效。在这个"java发送邮件jar包"中,我们可以看到几个关键的...
消息中间件会接收到这个邮件消息,并根据配置的邮件服务器信息,利用JavaMail API实际发送邮件。由于发送邮件的过程是在消息中间件中完成的,因此不会直接影响到业务应用的性能。此外,如果邮件发送失败,消息中间件...
**Java消息服务(Java Message Service,简称JMS)**是一种标准的应用程序接口(API),它允许应用程序在分布式环境中创建、发送、接收和读取消息。JMS被设计用来解决应用程序之间的异步通信问题,它是Java平台上的...
例如,你可以创建一个消息,将邮件的发送信息放入队列,然后由后台进程负责从队列中取出消息并实际发送邮件。这样可以避免阻塞主线程,提高系统的响应速度。 你可以使用像RabbitMQ或ActiveMQ这样的消息中间件来实现...
在实际的项目中,消息队列经常被用于将一些耗时的操作,如发送邮件、处理文件和执行复杂的报告生成等,从主线程中分离出来,通过异步处理的方式进行。这种方式可以显著降低服务器的请求响应时间,提高系统的吞吐量和...
虽然两者都涉及消息传递,但JMS专注于企业级应用中的实时消息传递,而邮件API则更多地关注电子邮件处理。 - **现存的消息系统:** 在JMS出现之前,不同的供应商提供了各自的消息中间件产品,这些产品通常有自己的...
这种方式避免了发送邮件操作阻塞主线程,提高了应用的响应速度,同时也使得系统能够更好地处理高并发场景。在实际应用中,可以根据需求调整队列的数量、消息格式以及消费者的数量来优化性能和可靠性。
异步手机短信和邮件发送消息中心平台构建 本文提出了一种异步手机短信和邮件发送消息中心平台(MCP)的解决方案,以满足分布式环境下企业应用对性能、安全性、稳定性的要求。该平台能够异步传递消息,将彼此独立的...
生产者通过JMS API将消息发送到特定的目的地,而不需了解接收方。 2. **JMS消息消费者**:消费者是接收和处理消息的应用组件。消费者从指定的目的地接收消息,并对其进行处理。 3. **JMS消息服务器**:也称为消息...
总之,ActiveMQ与JMS的结合使用,为企业级应用提供了强大的消息通信能力,不仅可以实现点对点的消息传递,还能通过邮件适配器扩展到电子邮件的发送。理解并熟练掌握这些知识点,对于构建健壮、高效、可扩展的分布式...
邮件信息可能封装在自定义的Java对象中,通过JMS TextMessage或ObjectMessage发送。 - **消费者(edu-demo-mqconsumer)**:邮件服务器作为消费者监听这个队列或主题,一旦接收到邮件消息,就触发实际的邮件发送...
例如,当系统完成一项任务或者发生异常时,可以通过JMS发送一条消息,然后MDB接收到消息后,利用JAVAMAIL库发送一封通知邮件给相关人员。 接下来,我们讨论一下J2EE容器在用户安全管理中的作用。J2EE容器如Tomcat、...