个性化阅读
专注于IT技术分析

Spring Java邮件教程入门详解

  1. Spring Java邮件教程
  2. 在Spring发送邮件的示例

Spring框架提供了许多有用的接口和类来发送和接收邮件。

org.springframework.mail软件包是在Spring框架中提供邮件支持的根软件包。


Spring Java Mail API

Spring框架中Java邮件支持的接口和类如下:

Spring与javamail api层次结构
  1. MailSender接口:它是根接口。它提供了用于发送简单邮件的基本功能。
  2. JavaMailSender接口:它是MailSender的子接口。它支持MIME消息。它通常与MimeMessageHelper类一起使用, 以创建JavaMail MimeMessage及其附件等。spring框架推荐使用MimeMessagePreparator机制来使用此接口。
  3. JavaMailSenderImpl类:它提供JavaMailSender接口的实现。它支持JavaMail MimeMessages和Spring SimpleMailMessages。
  4. SimpleMailMessage类:用于创建简单的邮件消息, 包括从, 到, 抄送, 主题和文本消息。
  5. MimeMessagePreparator接口:它是用于准备JavaMail MIME消息的回调接口。
  6. MimeMessageHelper类:它是用于创建MIME消息的帮助器类。它支持内联元素, 例如图像, 典型的邮件附件和HTML文本内容。

Gmail服务器在Spring中发送邮件的示例

在此示例中, 我们使用两个spring邮件类:

  1. 用于创建消息的SimpleMailMessage。
  2. JavaMailSenderImpl用于发送消息。

你需要创建以下文件以通过Spring框架发送电子邮件。

  1. MailMail.java
  2. applicationContext.xml
  3. Test.java

你需要加载mail.jar和Activation.jar文件才能运行此示例。

下载mail.jar和activation.jar或访问Oracle站点以下载最新版本。


1) MailMail.java

这是定义mailSender属性的简单类。 MailSender对象将在运行时提供给此属性。

在sendMail()方法中, 我们将创建SimpleMailMessage的实例并将信息(例如, 从, 到, 主题和消息)存储到该对象中。

MailSender接口的send()方法用于发送简单邮件。

package com.srcmini;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
 
public class MailMail{
	private MailSender mailSender;
 
	public void setMailSender(MailSender mailSender) {
		this.mailSender = mailSender;
	}
 
	public void sendMail(String from, String to, String subject, String msg) {
        //creating message
		SimpleMailMessage message = new SimpleMailMessage();
 		message.setFrom(from);
		message.setTo(to);
		message.setSubject(subject);
		message.setText(msg);
        //sending message
		mailSender.send(message);	
	}
}

2)applicationContext.xml

在这个xml文件中, 我们正在为JavaMailSenderImpl类创建一个bean。我们需要定义以下属性的值:

  1. 主办
  2. 用户名
  3. 密码
  4. javaMailProperties

我们还使用mailSender属性为MailMail类创建bean。现在, 将在MailMail类的mailSender属性中设置JavaMailSenderImpl类的实例。

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com" />
	<property name="username" value="yourgmailid@gmail.com" />
	<property name="password" value="yourgmailpassword" />
	<property name="javaMailProperties">
	   <props>
       	      <prop key="mail.smtp.auth">true</prop>
              <prop key="mail.smtp.socketFactory.port">465</prop>
              <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
              <prop key="mail.smtp.port">465</prop>
        </props>
	</property>
</bean>
<bean id="mailMail" class="com.srcmini.MailMail">
	<property name="mailSender" ref="mailSender" />
</bean>
</beans>

3) Test.java

此类从applicationContext.xml文件获取mailMail的bean, 并调用MailMail类的sendMail方法。

package com.srcmini;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test {	
public static void main(String[] args) {
	
Resource r=new ClassPathResource("applicationContext.xml");
BeanFactory b=new XmlBeanFactory(r);
MailMail m=(MailMail)b.getBean("mailMail");
String sender="sendergmailid@gmail.com";//write here sender gmail id
String receiver="receiveremailid@gmail.com";//write here receiver id
m.sendMail(sender, receiver, "hi", "welcome");
	
System.out.println("success");
}
}

如何运行这个例子

  • 加载spring jar文件以获取核心和Java邮件
  • 加载mail.jar和activation.jar
  • 更改applicationContext.xml文件中的username和password属性, 并指定你的gmail ID和密码。
  • 更改Test.java文件中的发件人gmail ID和Receivermail ID。
  • 编译并运行测试类

下载此示例(使用myeclipse IDE开发)


由主机提供商在服务器中在Spring中发送邮件的示例

如果你有自己的站点, 则可以使用邮件服务器。 MailMail.java和Test类将是相同的。你只需要在Test.java文件中更改发件人电子邮件ID。 applicationContext.xml文件中需要进行一些更改。

在applicationContext.xml文件中, 我们正在使用:

  • mail.unitedsquaad.com作为主机名。更改。
  • 用户名a@unitedsquaad.com。更改。
  • xxxxxx作为密码。更改。
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.unitedsquaad.com" />
	<property name="username" value="a@unitedsquaad.com" />
	<property name="password" value="xxxxx" />
 
	<property name="javaMailProperties">
	   <props>
       	      <prop key="mail.smtp.auth">true</prop>
       	   </props>
	</property>

</bean>
<bean id="mailMail" class="MailMail">
	<property name="mailSender" ref="mailSender" />
</bean>
 
</beans>

下载此示例(使用myeclipse IDE开发)


向多个收件人发送邮件

你可以借助SimpleMailMessage类将邮件发送到多个收件人。 SimpleMailMessage类的setTo(String [] receivers)方法用于将消息发送到多个接收者。让我们看一下简单的代码。

....
	public void sendMail(String from, String[] to, String subject, String msg) {
        //creating message
		SimpleMailMessage message = new SimpleMailMessage();
 		message.setFrom(from);
		message.setTo(to);//passing array of recipients
		message.setSubject(subject);
		message.setText(msg);
        //sending message
		mailSender.send(message);	
	}
     ...

Spring MimeMessagePreparator示例

我们可以借助MimeMessagePreparator接口发送mime消息。它有一种方法prepare(MimeMessage消息)。

让我们看一下发送mime消息的简单代码。

import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;

public class MailMail{
	private JavaMailSender mailSender;
 
	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}
 
	public void sendMail(final String from, final String to, final String subject, final String msg) {
			
		MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
	        
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                   mimeMessage.setFrom(new InternetAddress(from));
                   mimeMessage.setSubject(subject);
                   mimeMessage.setText(msg);
                }
        };
        mailSender.send(messagePreparator);
	}
}

applicationContext.xml和Test.java文件与上面给出的相同。


通过Spring MimeMessageHelper示例发送附件

我们可以在Spring借助MimeMessageHelper类发送带有附件的mime消息。建议比MimeMessagePreparator使用。

让我们看一下发送带有附件(图像)的mime消息的简单代码。

import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class MailMail{
	private JavaMailSender mailSender;
 
	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}
 
	public void sendMail(final String from, final String to, final String subject, final String msg) {
		try{
		MimeMessage message = mailSender.createMimeMessage();

		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(from);
		helper.setTo(to);
		helper.setSubject(subject);
		helper.setText(msg);

		// attach the file
		FileSystemResource file = new FileSystemResource(new File("c:/rr.jpg"));
		helper.addAttachment("mybrothermage.jpg", file);//image will be sent by this name

		mailSender.send(message);
		}catch(MessagingException e){e.printStackTrace();}
	}
}

applicationContext.xml和Test.java文件与上面给出的相同。

赞(0) 打赏
未经允许不得转载:srcmini » Spring Java邮件教程入门详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏