`
j040404
  • 浏览: 14902 次
  • 性别: Icon_minigender_2
  • 来自: 河北
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JMS_发送邮件

阅读更多

看这个例子之前最好先看下“我的资源”里的《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 中的邮箱地址写成自己的,那么此时就会收到一封邮件。

分享到:
评论

相关推荐

    springboot整合jms进行邮件的发送

    为了发送邮件,我们需要`spring-boot-starter-mail`依赖,同时为了整合JMS,我们需要`spring-jms`和`spring-boot-starter-data-jpa`(如果你使用ActiveMQ作为JMS提供者)。在`pom.xml`文件中添加以下依赖: ```xml ...

    基于JMS的WEB邮件客端系统(JAVAMAIL版)含源码

    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的基本概念。ActiveMQ是一个实现了多种消息协议(如OpenWire、STOMP、...

    SpringBoot整合ActiveMQ(消息中间件)实现邮件发送功能

    4. **发送邮件**:调用`JavaMailSender`的`send()`方法,发送预设好的邮件。 5. **异步处理**:结合ActiveMQ,邮件发送可以通过消息队列异步执行,提高系统响应速度和稳定性。当一个请求触发邮件发送时,将邮件信息...

    ActiveMQ与Spring整合之异步发送邮件

    当ActiveMQ与Spring整合时,可以方便地实现异步处理,比如异步发送邮件,这在大型系统中尤为常见,因为它们能够避免阻塞主线程,提升系统性能。 **ActiveMQ基础** 1. **概念理解**:ActiveMQ作为消息代理,接收并...

    notify 邮件/短信发送

    这个接口可能会有如`sendEmail()`和`sendSms()`这样的方法,分别用于发送邮件和短信。 - 接口设计通常会遵循RESTful原则,这意味着每个方法可能对应一个HTTP动词(GET、POST、PUT、DELETE),并接收JSON或XML格式的...

    ActiveMq+SpringMVC实现邮件异步发送

    而在消费者端,需要监听这个队列,接收到消息后执行实际的邮件发送操作,如使用JavaMail API发送邮件。 总的来说,这个项目提供了一种实用的方法,将邮件发送这种可能影响用户体验的操作异步化,从而优化了系统性能...

    java发送邮件jar包

    Java发送邮件功能是Java开发中常见的一项任务,尤其在企业级应用中,如发送通知、验证码、报告等。Spring框架提供了强大的支持,使得这个过程变得简单而高效。在这个"java发送邮件jar包"中,我们可以看到几个关键的...

    基于Java消息服务的异步邮件发送技术.pdf

    消息中间件会接收到这个邮件消息,并根据配置的邮件服务器信息,利用JavaMail API实际发送邮件。由于发送邮件的过程是在消息中间件中完成的,因此不会直接影响到业务应用的性能。此外,如果邮件发送失败,消息中间件...

    jms英文书小合集

    **Java消息服务(Java Message Service,简称JMS)**是一种标准的应用程序接口(API),它允许应用程序在分布式环境中创建、发送、接收和读取消息。JMS被设计用来解决应用程序之间的异步通信问题,它是Java平台上的...

    JAVA发送邮件

    例如,你可以创建一个消息,将邮件的发送信息放入队列,然后由后台进程负责从队列中取出消息并实际发送邮件。这样可以避免阻塞主线程,提高系统的响应速度。 你可以使用像RabbitMQ或ActiveMQ这样的消息中间件来实现...

    MQ、JMS以及ActiveMQ关系的理解

    在实际的项目中,消息队列经常被用于将一些耗时的操作,如发送邮件、处理文件和执行复杂的报告生成等,从主线程中分离出来,通过异步处理的方式进行。这种方式可以显著降低服务器的请求响应时间,提高系统的吞吐量和...

    JMS 中文 规范

    虽然两者都涉及消息传递,但JMS专注于企业级应用中的实时消息传递,而邮件API则更多地关注电子邮件处理。 - **现存的消息系统:** 在JMS出现之前,不同的供应商提供了各自的消息中间件产品,这些产品通常有自己的...

    ActiveMQ的使用代码样例(异步邮件发送).zip

    这种方式避免了发送邮件操作阻塞主线程,提高了应用的响应速度,同时也使得系统能够更好地处理高并发场景。在实际应用中,可以根据需求调整队列的数量、消息格式以及消费者的数量来优化性能和可靠性。

    异步手机短信和邮件发送消息中心平台构建.docx

    异步手机短信和邮件发送消息中心平台构建 本文提出了一种异步手机短信和邮件发送消息中心平台(MCP)的解决方案,以满足分布式环境下企业应用对性能、安全性、稳定性的要求。该平台能够异步传递消息,将彼此独立的...

    jms详解,介绍jms必备哟

    生产者通过JMS API将消息发送到特定的目的地,而不需了解接收方。 2. **JMS消息消费者**:消费者是接收和处理消息的应用组件。消费者从指定的目的地接收消息,并对其进行处理。 3. **JMS消息服务器**:也称为消息...

    activemq jms的使用

    总之,ActiveMQ与JMS的结合使用,为企业级应用提供了强大的消息通信能力,不仅可以实现点对点的消息传递,还能通过邮件适配器扩展到电子邮件的发送。理解并熟练掌握这些知识点,对于构建健壮、高效、可扩展的分布式...

    ActiveMQ的使用代码样例(异步邮件发送).rar

    邮件信息可能封装在自定义的Java对象中,通过JMS TextMessage或ObjectMessage发送。 - **消费者(edu-demo-mqconsumer)**:邮件服务器作为消费者监听这个队列或主题,一旦接收到邮件消息,就触发实际的邮件发送...

    基于JMS(Java Messaging Service)开发JAVAMAIL详解

    例如,当系统完成一项任务或者发生异常时,可以通过JMS发送一条消息,然后MDB接收到消息后,利用JAVAMAIL库发送一封通知邮件给相关人员。 接下来,我们讨论一下J2EE容器在用户安全管理中的作用。J2EE容器如Tomcat、...

Global site tag (gtag.js) - Google Analytics