使用spring框架中的组件发送邮件功能说明

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

首先进入自己的QQ邮箱,在设置中修改账户信息

然后来至底部

点击开启,再用手机发送对应信息到指定号码,然后点击我已发送

获取授权码

注意提示:

到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了

接下来的是Spring 中使用邮件服务

首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的

<!-- 邮件服务 -->
  <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.qq.com"/>
    <property name="port" value="587"/>//或许你可以用465端口,默认的25不适合
    <property name="protocol" value="smtp"/>
    <property name="username" value="785427346@qq.com"/>
    <property name="password" value="xxxxxxxxxxxx"/>//这里的是你通过短信后,获取的授权码
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="javaMailProperties">
      <props>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.timeout">25000</prop>
      </props>
    </property>
  </bean>
  <!-- this is a template message that we can pre-load with default state -->
  <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
    <property name="from" value="785427346@qq.com"/>
    <property name="subject" value="尝试发邮件"/>
  </bean>
  <bean id="orderManager" class="cn.cherish.common.SimpleOrderManager">
    <property name="mailSender" ref="mailSender"/>
    <property name="templateMessage" ref="templateMessage"/>
  </bean>

用maven引入的jar包

 <!-- 邮件 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
  </dependency>

下面只是一个工具类作简单例子,请勿见怪

package cn.cherish.common;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
 * 项目名称:springmvc_hibernate
 * 类名称:MailUtil
 * 类描述:
 * 创建人:Cherish
 * 联系方式:785427346@qq.com
 * 创建时间:2016年4月22日 下午3:51:48
 * @version 1.0
 */
public class MailUtil {
  private static final String HOST = "smtp.qq.com";
  private static final String SMTP = "smtp";
  private static final String USERNAME = "785427346@qq.com";
  private static final String PASSWORD = "xxxxxxxxxx";
  private static final int PORT = 587;//587/465
  private static final String DEFAULTENCODING = "UTF-8";
  private static JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
  private static Properties prop = new Properties();
  static{
    // 设定mail server
    senderImpl.setHost(HOST);
    senderImpl.setProtocol(SMTP);
    senderImpl.setUsername(USERNAME);
    senderImpl.setPassword(PASSWORD);
    senderImpl.setPort(PORT);
    senderImpl.setDefaultEncoding(DEFAULTENCODING);
    // 设定properties
    prop.put("mail.smtp.auth", "true");
    prop.put("mail.smtp.timeout", "25000");
    //设置调试模式可以在控制台查看发送过程
    prop.put("mail.debug", "true");
    senderImpl.setJavaMailProperties(prop);
  }
  public static void main(String args[]) {
    // 设置收件人,寄件人 用数组发送多个邮件
//   String[] array = new String[] {"88888@qq.com","666666@qq.com","999999999@qq.com",USERNAME};
    String[] array = new String[] {USERNAME};
    String subject = "Cherish内嵌图片、音乐的邮件";
//   StringBuffer sb = new StringBuffer();
//   try {
//     URL url = new URL("http://www.imooc.com/");//http://android-studio.org/
//
//     URLConnection conn = url.openConnection();
//     InputStream is = conn.getInputStream();
//
//     BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//
//     String string = null;
//     while ((string = reader.readLine()) != null) {
//       sb.append(string);
//     }
//
//     //System.out.println(sb.toString());
//
//   } catch (Exception e) {
//     e.printStackTrace();
//   }
//
//   boolean result = htmlMail(array, subject, sb.toString());
    String filePath = "E:/javaxmail.png";
    String html = "<html><head>"+
          "</head><body>"+
          "<audio src='http://m10.music.126.net/20160422225433/25b43b999bcdaf3425b9194514340596/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+
          "<h1>Hello,Nice to meet you!</h1>"+
          "<span style='color:red;font-size:36px;'>并摸了一把你的小奶</span>"+
          "<img src='cid:javaxmail.png'>"+
          "</body></html>";
    boolean result = inlineFileMail(array, subject, html, filePath);
    if (result) {
      System.out.println("发送邮件成功。。。。");
    }
  }
  /**
   * 发送简单邮件
   * @param to 收件人邮箱
   * @param subject 主题
   * @param content 内容
   * @return
   */
  public static boolean singleMail(String to, String subject, String content){
    String[] array = new String[] {to};
    return singleMail(array, subject, content);
  }
  /**
   * 发送简单文本邮件
   * @param to 收件人邮箱数组
   * @param subject 主题
   * @param content 内容
   * @return
   */
  public static boolean singleMail(String[] to, String subject, String content){
    boolean result = true;
    SimpleMailMessage mailMessage = new SimpleMailMessage();
    // 设置收件人,寄件人 用数组发送多个邮件
    mailMessage.setTo(to);
    mailMessage.setFrom(USERNAME);
    mailMessage.setSubject(subject);
    mailMessage.setText(content);
    // 发送邮件
    try {
      senderImpl.send(mailMessage);
    } catch (MailException e) {
      e.printStackTrace();
      result = false;
    }
    return result;
  }
  /**
   * 发送html邮件
   * @param to 收件人
   * @param subject 主题
   * @param html html代码
   * @return
   */
  public static boolean htmlMail(String[] to, String subject, String html){
    boolean result = true;
    MimeMessage mailMessage = senderImpl.createMimeMessage();
    MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
    try {
      // 设置收件人,寄件人 用数组发送多个邮件
      messageHelper.setTo(to);
      messageHelper.setFrom(USERNAME);
      messageHelper.setSubject(subject);
      // true 表示启动HTML格式的邮件
      messageHelper.setText(html, true);
      // 发送邮件
      senderImpl.send(mailMessage);
    } catch (MessagingException e) {
      result = false;
      e.printStackTrace();
    }
    return result;
  }
  /**
   * 发送内嵌图片的邮件  (cid:资源名)
   * @param to 收件人邮箱
   * @param subject 主题
   * @param html html代码
   * @param imgPath 图片路径
   * @return
   */
  public static boolean inlineFileMail(String[] to, String subject, String html, String filePath){
    boolean result = true;
    MimeMessage mailMessage = senderImpl.createMimeMessage();
    try {
      //设置true开启嵌入图片的功能
      MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
      // 设置收件人,寄件人 用数组发送多个邮件
      messageHelper.setTo(to);
      messageHelper.setFrom(USERNAME);
      messageHelper.setSubject(subject);
      // true 表示启动HTML格式的邮件
      messageHelper.setText(html, true);
      FileSystemResource file = new FileSystemResource(new File(filePath));
      messageHelper.addInline(file.getFilename(), file);
      // 发送邮件
      senderImpl.send(mailMessage);
    } catch (MessagingException e) {
      result = false;
      e.printStackTrace();
    }
    return result;
  }
  /**
   * 发送带附件的邮件
   * @param to
   * @param subject
   * @param html
   * @param filePath
   * @return
   */
  public static boolean attachedFileMail(String[] to, String subject, String html, String filePath){
    boolean result = true;
    MimeMessage mailMessage = senderImpl.createMimeMessage();
    try {
      // multipart模式 为true时发送附件 可以设置html格式
      MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8");
      // 设置收件人,寄件人 用数组发送多个邮件
      messageHelper.setTo(to);
      messageHelper.setFrom(USERNAME);
      messageHelper.setSubject(subject);
      // true 表示启动HTML格式的邮件
      messageHelper.setText(html, true);
      FileSystemResource file = new FileSystemResource(new File(filePath));
      // 这里的方法调用和插入图片是不同的。
      messageHelper.addAttachment(file.getFilename(), file);
      // 发送邮件
      senderImpl.send(mailMessage);
    } catch (MessagingException e) {
      result = false;
      e.printStackTrace();
    }
    return result;
  }

温馨提示:

<img src='cid:javaxmail.png'>

这是内嵌图片的方式 javaxmail.png 要和 messageHelper.addInline(file.getFilename(), file); 这里的 file.getFilename() 相一致就可以

现在只差一步了,那就是Ctrl + F11,有不当之处敬请提出,共同进步

**
使用javax.mail发邮件代码
**
package cn.cherish.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
 * 项目名称:springmvc_hibernate
 * 类名称:EmailUtil
 * 类描述:发送邮件工具类
 * 创建人:Cherish
 * 联系方式:785427346@qq.com
 * 创建时间:2016年4月23日 上午9:48:21
 * @version 1.0
 */
public class EmailUtil {
 // properties配置文件地址
 //private static final String PROPERTIES_PATH = "standard_data.properties";
 private static Session session;
 private static Properties props = new Properties();
 private static final String HOST = "smtp.qq.com";
 private static int PORT = 587;
 private static final String isAUTH = "true";
 private static final String FROM = "785427346@qq.com";
 private static final String USERNAME = "785427346@qq.com";
 private static final String PASSWORD = "xxxxxxxxxxxxxxxx";
 private static final String TIMEOUT = "25000";
 private static final String DEBUG = "true";
 // 初始化session
 static {
  props.put("mail.smtp.host", HOST);
  props.put("mail.smtp.port", PORT);
  props.put("mail.smtp.auth", isAUTH);
  props.put("fromer", FROM);
  props.put("username", USERNAME);
  props.put("password", PASSWORD);
  props.put("mail.smtp.timeout", TIMEOUT);
  props.put("mail.debug", DEBUG);
  session = Session.getInstance(props, new Authenticator() {
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(USERNAME, PASSWORD);
   }
  });
 }
 public static void main(String[] args) {
  try {
   String html = "<html><head>"+
     "</head><body>"+
     "<audio src='http://219.128.78.22/m10.music.126.net/20160423105749/3cee5688a7dc87d28a265fd992ecb0a2/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3?wshc_tag=1&wsts_tag=571aded1&wsid_tag=b73f773e&wsiphost=ipdbm' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+
     "<video controls='controls'>"+
     "<source src='http://v2.mukewang.com/45ad4643-87d7-444b-a3b9-fbf32de63811/H.mp4?auth_key=1461379796-0-0-e86cefa71cef963875fd68f8a419dd8a' type='video/mp4' />"+
     "Your browser does not support the video tag."+
     "</video>"+
     "<h1>Hello,nice to fuck you!</h1>"+
     "<span style='color:red;font-size:36px;'>并抓了一把你的小鸡鸡</span>"+
     "</body></html>";
   //sendEmail("785427346@qq.com", "yeah", html, true);
   sendFileEmail("785427346@qq.com", "yeah", html, new File("E:/xiaoming.zip"));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
  *
  * @Title sendEmail
  * @Description 通过isHtml判断发送的邮件的内容
  * @param to 邮件接收者
  * @param content 邮件内容
  * @param isHtml 是否发送html
  * @throws MessagingException
  * @throws IOException
  * @throws FileNotFoundException
  * @throws EmailException
  */
 public static void sendEmail(String to, String title, String content, boolean isHtml)
   throws FileNotFoundException, IOException, MessagingException {
  String fromer = props.getProperty("fromer");
  if (isHtml) {
   sendHtmlEmail(fromer, to, title, content);
  } else {
   sendTextEmail(fromer, to, title, content);
  }
 }
 // 发送纯文字邮件
 public static void sendTextEmail(String from, String to, String subject, String content)
   throws FileNotFoundException, IOException, MessagingException {
  Message message = new MimeMessage(session);
  message.setFrom(new InternetAddress(from));
  message.setRecipient(RecipientType.TO, new InternetAddress(to));
  message.setSubject(subject);
  message.setText(content);
  message.setSentDate(new Date());
  Transport.send(message);
 }
 // 发送有HTML格式邮件
 public static void sendHtmlEmail(String from, String to, String subject, String htmlConent)
   throws FileNotFoundException, IOException, MessagingException {
  Message message = new MimeMessage(session);
  message.setFrom(new InternetAddress(from));
  message.setRecipient(RecipientType.TO, new InternetAddress(to));
  message.setSubject(subject);
  message.setSentDate(new Date());
  Multipart multi = new MimeMultipart();
  BodyPart html = new MimeBodyPart();
  html.setContent(htmlConent, "text/html; charset=utf-8");
  multi.addBodyPart(html);
  message.setContent(multi);
  Transport.send(message);
 }
 // 发送带附件的邮件
 public static void sendFileEmail(String to, String subject, String htmlConent, File attachment)
   throws FileNotFoundException, IOException, MessagingException {
  Message message = new MimeMessage(session);
  String fromer = props.getProperty("fromer");
  message.setFrom(new InternetAddress(fromer));
  message.setRecipient(RecipientType.TO, new InternetAddress(to));
  message.setSubject(subject);
  message.setSentDate(new Date());
  // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
  Multipart multipart = new MimeMultipart();
  // 添加邮件正文
  BodyPart contentPart = new MimeBodyPart();
  contentPart.setContent(htmlConent, "text/html;charset=UTF-8");
  multipart.addBodyPart(contentPart);
  // 添加附件的内容
  if (attachment != null) {
   BodyPart attachmentBodyPart = new MimeBodyPart();
   DataSource source = new FileDataSource(attachment);
   attachmentBodyPart.setDataHandler(new DataHandler(source));
   // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
   // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
   // sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
   // messageBodyPart.setFileName("=?GBK?B?" +
   // enc.encode(attachment.getName().getBytes()) + "?=");
   // MimeUtility.encodeWord可以避免文件名乱码
   attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
   multipart.addBodyPart(attachmentBodyPart);
  }
  message.setContent(multipart);
  Transport.send(message);
 }
}

总结

以上所述是小编给大家介绍的使用spring框架中的组件发送邮件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • spring+maven实现发送邮件功能

    前言 Java编程中发邮件也是常用的.但是原生的jdk自带的发送邮件用起来还是比较麻烦的.spring框架在Java语言中完全是神一样的存在,通过spring框架的邮件工具来发送邮件就非常方便了,本文就主要讲解了Java编程中利用spring提供的邮件工具来发送邮件. 编码实现发送邮件 1.首先我们需要一个Spring框架的环境 2.发送邮件需要的核心依赖包:spring-context-supportXXX.jar.activation-1.1.jar.javax.mail-1.5.2.jar

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

    邮件服务简介 邮件服务在互联网早期就已经出现,如今已成为人们互联网生活中必不可少的一项服务.那么邮件服务是怎么工作的呢?如下给出邮件发送与接收的典型过程: 1.发件人使用SMTP协议传输邮件到邮件服务器A: 2.邮件服务器A根据邮件中指定的接收者,投送邮件至相应的邮件服务器B: 3.收件人使用POP3协议从邮件服务器B接收邮件. SMTP(Simple Mail Transfer Protocol)是电子邮件(email)传输的互联网标准,定义在RFC5321,默认使用端口25: POP3(Po

  • Spring Boot实战之发送邮件示例代码

    一.邮件服务简介 邮件服务在互联网早期就已经出现,如今已成为人们互联网生活中必不可少的一项服务.那么邮件服务是怎么工作的呢?如下给出邮件发送与接收的典型过程: 1.发件人使用SMTP协议传输邮件到邮件服务器A: 2.邮件服务器A根据邮件中指定的接收者,投送邮件至相应的邮件服务器B: 3.收件人使用POP3协议从邮件服务器B接收邮件. SMTP(Simple Mail Transfer Protocol)是电子邮件(email)传输的互联网标准,定义在RFC5321,默认使用端口25: POP3(

  • Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)

    快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 如其他自动化配置模块一样,在完成了依赖引入之后,只需要在applicatio

  • spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--"账户",打开smtp服务,生成授权码 生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码 spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了 <dependency>

  • Java使用Spring发送邮件的实现代码

    Spring Email抽象的核心是MailSender接口,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如下图: Spring自带一个MailSender的实现就是JavaMailSenderImpl,它也是使用JavaMail API来发送Email,在使用之前,必须先将JavaMailSenderImpl装配为Spring应用上下文中的一个bean,如下所示: @Bean public MailSender mailSender (Environment en

  • Spring Boot发送邮件详解

    Spring框架使用JavaMailSender接口为发送邮件提供了一个简单的抽象,并且Spring Boot也为它提供了自动配置和一个starter模块. 如果spring.mail.host和相关的库(通过spring-boot-starter-mail定义)都存在,一个默认的JavaMailSender将被创建.该sender可以通过spring.mail命名空间下的配置项进一步自定义,下面本站素文宅博客具体讲述一下Spring Boot如何实现发送邮件. 引入spring-boot-st

  • Java的Spring框架中实现发送邮件功能的核心代码示例

    Spring中已经封装了邮件操作类,通过spring配置文件可以便捷地注入到controller.action等地方. 下面是配置: <!-- mail sender --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mail.host}" p:port="${mail.por

  • Spring+quartz实现定时发送邮件功能实例

    在做具体的系统管理时,往往会有每隔一段时间发给用户一些邮件的业务,现在参考的网上的大部分代码,写下了我自己的代码. 在ApplicationContext.xml的内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.spr

  • springMVC发送邮件的简单实现

    利用javax.mail发送邮件,图片与附件都可发送 1,Controller类 package com.web.controller.api; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.

  • Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

    rabbitmq简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WEBSPHERE MQ. 本节的内容是用户注册时,将邮

随机推荐