`
AllenHU0320
  • 浏览: 85858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Spring发送E-mail

 
阅读更多

1.通常情况下使用JavaMail原始API进行邮件发送的代码示例

String host = "your.mail.host";

String username = "...";

String password = "...";

String protocal = "smtp";

String mailSubject = "邮件标题";

String mailContext = "邮件内容";

String mailEncoding = "UTF-8";

boolean plainTextMail = false;  //是否发送普通文本文件

Properties props = new Properties();

props.put("mail.smtp.auth","true");

Transport transport = null;

try{

     Session session = Session.getDefaultInstance(props,null);

     MimeMessage message = new MimeMessage(session);

     message.setRecipients(RecipientType.TO,new Address[]{new InternetAddress(toUser@gmail.com)});

     message.setRecipient(RecipientType.CC,new InternetAddress(toUser@gmail.com));

     message.setFrom(new InternetAddress(fromUser@some.com));

     message.setSubject(mailSubject,mailEncoding);

     if(plainTextMail){

           message.setText(mailContext,mailEncoding);

     }else{

           Multipart multipart= new MimeMultipart();

           BodyPart bodyPart = new MimeBodyPart();

           bodyPart.setText(mailContext);

           multiPart.addBodyPart(bodyPart);

           bodyPart = new MimeBodyPart();

           FileDataSource fds = new FileDataSource("attachment.name"); //添加附件

           bodyPart.setDataHandler(new DataHandler(fds));

           bodyPart.setFileName(fds.getName());

           multiPart.addBodyPart(bodyPart);

           message.setContent(multiPart);

     }

     transport = session.getTransport(protocal);

     transport.connect(host,username,password);

     transport.sendMessage(message,message.getAllRecipients());

}catch(Exception e){

     //根据情况处理异常

}finally{

     if(transport != null){

          try{

                 transport.close();

          }catch(MessagingException e){

                 e.printStackTrace();

          }

     }

}

使用JavaMail API发送邮件,我们需要设置JavaMail的Session需要的某些属性,然后根据Session构建相应的MimeMessage实例,并在构建完的MimeMessage实例上设置将要发送的消息的方方面面。在消息准备完成后,我们才通过Transport连接到邮件服务器,并发送准备好的邮件信息,还不要忘了异常的处理和Transport的关闭

 

2.Spring的E-mail抽象层分析

Spring所提供的E-mail抽象层主要体现在两个层次,即MailMessage抽象层次和MailSender抽象层次

<<Interface>>       

MailMessage--------SimpleMailMessage,MimeMailMessage

<<Interface>>

MailSender---------CosMailSenderImpl,<<Interface>>JavaMailSender---------JavaMailSenderImpl

MailMessage抽象层次在于对要发送的邮件信息进行抽象和建模,MailMessage作为该层次的统领,定义了一套标准的邮件信息操作方式

MailMessage主要有两个实现类,SimpleMailMessage代表了普通的文本邮件(plain text mail),而MimeMailMessage则代表能够发送更丰富内容的MIME(Multipart Internet Message Encoding)类型的信息

mailMessage.setTo(...);

mailMessage.setCc(...);

mailMessage.setBcc(...);

...

MailSender抽象接口的主要目的即使屏蔽调各种E-mail解决方案的差异性,不管底层的E-mail解决方案如何变换,只需要把使用这些E-mail解决方案实现的MailSender实现类注入给依赖MailSender接口的对象即可

public interface MailSender{

      void send(SimpleMailMessage simpleMessage) throws MailException;

      void send(SimpleMailMessage[] simpleMessages) throws MailException;

}

JavaMailSender扩展自MailSender,在MailSender发送普通文本文件的基础上,添加了发送MIME邮件的功能。JavaMailSenderImpl封装JavaMail API使用的方法是模板方法模式

JavaMailSenderImpl实现类相关模板方法代码摘录

public void doSend(MimeMessage[] message2Send){

      //预处理

      Transport transport = getTransport(getSession());

      transport.connect(getHost(),getPort(),getUsername(),getPassword());

      try{

            for(int i = 0; i < mimeMessages.length; i++){

                  MimeMessage mimeMessage = mimeMessages[i];

                  transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

            }

      }finally{

            transport.close();

      }

}

 

3.JavaMailSender提供了两种常用的邮件发送方式,一种是直接外部创建要发送的MailMessage实例,然后传给JavaMailSender发送;另一个则是使用JavaMailSender公开给我们的MimeMessagePreparator回调接口

1)直接创建邮件消息并发送

JavaMailSender mailSender = new JavaMailSenerImpl();

JavaMialSenderImpl javaMailSender = (JavaMailSenderImpl)mailSender;

javaMailSender.setHost("...");

javaMailSender.setUseranme("...");

javaMailSender.setPassword("...");

Properties javaMailProps = new Properties();

javaMailProps.put("mail.smtp.auth","true");

javaMailSender.setJavaMailProperties(javaMailProps);

//mailSender现在可以使用

JavaMailSenderImpl配置代码示例

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

      <property name="host" value="...">

      <property name="username" value="...">

      <property name="password" value="...">

      <property name="javaMailProperties">

             <props>

                     <prop key="mail.smtp.auth">true</prop>

             </props>

      </property>

</bean>

因为JavaMail的MimeMessage不能独立于Session而创建,所以只有在有了可用的JavaMailSender之后,才能开始创建要发送的邮件信息,要通过JavaMailSender的createMimeMessage()方法达成

MimeMessage javaMailMessage = mailSender.createMimeMessage();

MimeMailMessage messageWrapper = new MimeMailMessage(javaMailMessage);

messageWrapper.setTo("...");

messageWrapper.setFrom("...");

messageWrapper.setSubject("...");

messageWrapper.setText("...");

//其他设定...

mailSender.send(messageWrapper.getMimeMessage());

Spring提供的MimeMailMessage对createMimeMessage()返回的MimeMessage做了简单的包装

 

4.使用MimeMessagePreparator发送邮件

JavaMailSender还提供了使用MimeMessagePreparator回调接口的邮件发送方法。MimeMessagePreparator作为回调接口,可以获得JavaMailSender公开给它的MimeMessage实例

沿用已经设定完毕的JavaMailSender实例

mailSender.send(new MimeMessagePreparator(){

           public void prepare(MimeMessage message) throws Exception{

                    MimeMailMessage messageWrapper = new MimeMailMessage(message);

                    messageWrapper.setTo("...");

                    messageWrapper.setFrom("...");

                    messageWrapper.setSubject("...");

                    messageWrapper.setText("...");

           }

} );

MimeMessageHelper可以帮助我们完成更加丰富的邮件内容设定

MimeMessageHelper使用代码示例

mailSender.send(new MimeMessagePreparator(){

      public void prepare(MimeMessage message) throws Exception{

            MimeMessageHelper messageHelper = new MimeMessageHelper(message,true,"UTF-8");

            messageHelper.setFrom("...");

            messageHelper.setTo("...");

            messageHelper.setSubject("...");

            StringBuilder builder = new StringBuilder("");

            builder.append("<html><head><meta http-equiv='ContentType' content='text/html;charset=utf-8'></head><body><pre>");

            builder.append("<img src='cid:inlinePic'>"); 

            builder.append("</pre></body></html>");

            messageHelper.setText(builder.toString(),true);

            messageHelper.addInline("inlinePic",new ClassPathResource("img/picture.gif"));

            messageHelper.addAttachment("fileName.pdf",new ClassPathResource("yourFile.pdf"));           

      }

});

JavaMailSender结合MimeMessagePreparator和MimeMessageHelper的组合,是使用JavaMailSender发送邮件的最常用方式

分享到:
评论

相关推荐

    spring-boot-邮件发送

    为了使用Spring Boot进行邮件发送,首先需要搭建好相应的开发环境。 1. **开通SMTP邮件服务:** - 对于使用QQ邮箱作为SMTP服务器的情况,需要在QQ邮箱设置中开启SMTP服务,并获取授权码。这一步非常重要,因为没有...

    springboot-mail.zip

    本压缩包"springboot-mail.zip"包含了实现邮件发送的相关代码示例,旨在帮助开发者了解并掌握如何在Spring Boot项目中实现邮件的发送功能。 首先,要实现邮件发送,我们需要引入Spring Boot的邮件服务依赖。在`pom....

    使用springMail发送带附件的email

    在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail API**: 这是Java平台上的一个标准API,用于处理邮件相关任务,如创建、发送和接收邮件。它...

    Spring mail发送邮件实例

    ### Spring Mail 发送邮件实例详解 #### 一、Spring Mail 概述 Spring Mail 是 Spring 框架中用于处理电子邮件发送的一个模块。它提供了一种简单的方式来进行邮件的发送,支持多种邮件发送协议,例如 SMTP 等,...

    java发送邮件 spring发送邮件

    通过以上步骤,你就可以在Java应用中使用Spring发送邮件了。当然,实际的邮件发送可能更复杂,涉及HTML内容、附件、多部分消息等,可以使用`MimeMessage`和`MimeMessageHelper`类来构建复杂的邮件结构。例如,添加...

    Java Web实现简单E-mail功能

    在Java Web开发中,实现简单的电子邮件功能涉及到一系列...在开发过程中,确保遵循最佳实践,如使用预编译的JSP(`.jspf`)文件提高性能,使用MVC框架(如Spring MVC)提高代码可维护性,以及使用SSL/TLS确保通信安全。

    E-mail_demo-1.zip

    这是一个基于Spring Boot、Spring MVC和Mybatis框架实现的电子邮件发送示例项目,名为"E-mail_demo-1"。这个压缩包包含了一系列文件,用于演示如何在Java应用中集成并使用电子邮件服务。下面我们将深入探讨其中涉及...

    SpringBoot集成E-mail发送各种类型邮件

    SpringBoot通过其内置的`spring-boot-starter-mail`模块提供了便捷的邮件发送功能,结合JDK的邮件API,我们可以轻松地实现邮件的发送。 首先,为了集成SpringBoot的邮件服务,我们需要在项目的`build.gradle`或`pom...

    spring mail 实例

    本实例将深入探讨如何在Spring应用中集成并使用Spring Mail进行邮件发送。 首先,我们需要理解Spring Mail的核心组件`JavaMailSender`,这是一个接口,提供了发送邮件的基本方法。要使用`JavaMailSender`,我们需要...

    SpringBoot中整合Mail实现发送带附件的邮件示例代码

    本文将详细介绍如何在Spring Boot项目中配置和使用JavaMailSender来发送带有附件的邮件。 首先,我们需要在项目的`pom.xml`或`build.gradle`文件中添加对`spring-boot-starter-mail`的依赖。对于Maven用户,可以在`...

    使用spring mail发送html邮件的示例代码

    使用Spring Mail发送HTML邮件的示例代码 Spring Mail是一个基于Java的邮件发送框架,提供了一个简单的API来发送电子邮件。本文将介绍如何使用Spring Mail发送HTML邮件,包括发送图片和处理异常等内容。 使用Spring...

    SpringBoot整合发送邮件

    在Java开发中,Spring Boot框架提供了便捷的方式来整合各种服务,包括发送邮件的功能。Spring Boot的邮件服务基于JavaMailSender接口,使得我们可以轻松地配置并发送电子邮件。本文将深入探讨如何在Spring Boot应用...

    springboot发送邮件(含带附件的邮件,定时任务等功能)

    至此,你已经学会了如何在Spring Boot中使用邮件服务发送普通邮件和带附件的邮件,以及如何设置定时任务。请确保根据实际情况调整配置参数,并处理可能出现的异常情况。通过这些功能,你可以轻松构建出满足各种需求...

    Spring Boot 发送邮件功能案例分析

    Spring 框架使用 JavaMailSender 接口为发送邮件提供了一个简单的抽象,并且 Spring Boot 也为它提供了自动配置和一个 starter 模块。如果 spring.mail.host 和相关的库(通过 spring-boot-starter-mail 定义)都...

    Spring配置的邮件发送

    本篇将详细讲解如何在Spring框架中配置和使用邮件发送功能,以便在应用程序中实现自动或手动发送电子邮件。 首先,我们需要在Spring项目中添加对邮件服务的依赖。这通常通过在`pom.xml`(如果你使用的是Maven)或`...

    java spring框架 无敌邮件发送

    在本项目中,我们将关注Spring如何实现“无敌邮件发送”功能。邮件服务在现代软件系统中扮演着重要的角色,例如用于发送通知、验证用户账户或提供客户服务。Spring框架通过其MailSender接口和JavaMailSenderImpl实现...

    springboot实现邮箱发送功能

    在Spring Boot应用中,实现邮件发送功能是一项常见的需求,它能够帮助我们自动化处理通知、确认订单、发送报告等任务。本案例重点讲解如何利用Spring Boot集成JavaMailSenderImpl类,结合QQ邮箱的设置来实现邮件的...

    spring框架各jar包详解

    Spring 在两个地方要用到 COS:文件上传处理和 e-mail 发送。不过,在这两种情形中,COS 都只是实现选择之一,因此只有选用 COS 而非其它实现方法时,才需包含 cos.jar。 dom4jdom4j.jar 使用 Hibernate 时 dom4j ...

Global site tag (gtag.js) - Google Analytics