在Spring框架的spring-context-support.jar中有对电子邮件发送功能的封装;

基于Spring开发简单省事,而且更稳定。需要mail.jar包支持

 @Component
 public class EmailSendService implements IEmailSendService {
     private String host;
     private String username;
     private String password;

     public boolean sendText(String email[], String title, String text) {
         try {
             JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
             // 设定mail server
             senderImpl.setHost(this.host);

             // 建立邮件消息
             SimpleMailMessage mailMessage = new SimpleMailMessage();
             // 设置收件人,寄件人 用数组发送多个邮件
             // String[] array = new String[]
             // {"sun111@163.com","sun222@sohu.com"};
             // mailMessage.setTo(array);
             mailMessage.setTo(email);
             mailMessage.setFrom(IDNMailHelper.toIdnAddress(this.username));
             mailMessage.setSubject(title);
             mailMessage.setText(text);

             senderImpl.setUsername(this.username); // 根据自己的情况,设置username
             senderImpl.setPassword(this.password); // 根据自己的情况, 设置password

             Properties prop = new Properties();
             prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确
             prop.put("mail.smtp.timeout", "25000");
             senderImpl.setJavaMailProperties(prop);
             // 发送邮件
             // senderImpl.send(mailMessage);
             senderImpl.send(mailMessage);
             System.out.println(" 邮件发送成功.. ");
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
         }
     }

     public boolean sendHtml(String email[], String title, String html) {
         try {
             JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();

             // 设定mail server
             senderImpl.setHost(this.host);

             // 建立邮件消息,发送简单邮件和html邮件的区别
             MimeMessage mailMessage = senderImpl.createMimeMessage();
             MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);

             // 设置收件人,寄件人
             messageHelper.setTo(email);
             messageHelper.setFrom(this.username);
             messageHelper.setSubject(title);
             // true 表示启动HTML格式的邮件
             messageHelper.setText(html, true);
             senderImpl.setUsername(this.username); // 根据自己的情况,设置username
             senderImpl.setPassword(this.password); // 根据自己的情况, 设置password
             Properties prop = new Properties();
             prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确
             prop.put("mail.smtp.timeout", "25000");
             senderImpl.setJavaMailProperties(prop);
             // 发送邮件
             senderImpl.send(mailMessage);

             System.out.println("邮件发送成功..");
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
         }
     }

     public void setHost(String host) {
         this.host = host;
     }

     public void setUsername(String username) {
         this.username = username;
     }

     public void setPassword(String password) {
         this.password = password;
     }

     public boolean sendText(String email, String title, String text) {
         return this.sendText(new String[]{email}, title, text);
     }

     public boolean sendHtml(String email, String title, String html) {
         return this.sendHtml(new String[]{email}, title, html);
     }

 }

在这里如果不注意会有一个IDN编码问题。我是经历之后在so上找到了相关的解决方法。详见以下代码

可能出现的异常:JavaMail: “Domain contains control or whitespace in string” errormessage because of domain with danish charaters

 public class IDNMailHelper {

     public static String toIdnAddress(String mail) {
         if (mail == null) {
             return null;
         }
         int idx = mail.indexOf('@');
         if (idx < 0) {
             return mail;
         }
         return localPart(mail, idx) + "@" + IDN.toASCII(domain(mail, idx));
     }

     private static String localPart(String mail, int idx) {
         return mail.substring(0, idx);
     }

     private static String domain(String mail, int idx) {
         return mail.substring(idx + 1);
     }

 }

教程:基于Spring快速开发电子邮件发送功能的更多相关文章

  1. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  2. .NET开发邮件发送功能

    .NET开发邮件发送功能 今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知 ...

  3. 基于django快速开发一个网站(一)

    基于django快速开发一个网站(一) *  创建虚拟环境.基于虚拟环境创建django==2.0.0和图片加载库和mysql数据库驱动 1. 创建目录并创建虚拟环境 ╰$ mkdir Cornuco ...

  4. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  5. Sublime插件库新成员基于APICloud快速开发跨平台App

    互联网时代强调用户体验,那什么是HTML5跨平台App开发者的编程体验?“不剥夺.不替换开发者喜欢的开发工具,就是人性化的用户体验”,APICloud给出了这样的答案! 重磅发布“多开发工具支持策略” ...

  6. 【社交系统研发日记】如何在 Laravel 中 “规范” 的开发验证码发送功能

    顺便发个小通知:7月15日ThinkSNS+开源版发布,同时非开源的APP也走出内测阶段,体验二维码也全面发布体验. 什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统 ...

  7. 如何在 Laravel 中 “规范” 的开发验证码发送功能

    什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).Thin ...

  8. 基于flink快速开发实时TopN程序

    TopN 是统计报表和大屏非常常见的功能,主要用来实时计算排行榜.流式的TopN可以使业务方在内存中按照某个统计指标(如出现次数)计算排名并快速出发出更新后的排行榜. 我们以统计词频为例展示一下如何快 ...

  9. 如何基于 PHP-X 快速开发一个 PHP 扩展

    0x01 起步 PHP-X本身基于C++11开发,使用cmake进行编译配置.首先,你需要确定所有依赖项已安装好.包括: gcc-4.8 或更高版本 PHP7.0 或更高版本,需要php7-dev 开 ...

随机推荐

  1. 架构师入门ing

    算法竞赛水平一般,算法工程师估计遥遥无期,准备开始架构方面的学习. 单纯依靠垂直提升硬件性能来提高系统性能的时代已结束,分布式开发的时代实际上早已悄悄地成为了时代的主流. 在一个团队里,架构师充当了技 ...

  2. iis如何处理并发请求

    文章:IIS是怎么处理同时到来的多个请求的? 文章:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的... 文章:IIS最大工作进程数设置引发串 ...

  3. 2151: 种树 - BZOJ

    Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度 ...

  4. PHP:在class中定义常量注意事项

    一.不能在成员函数中定义常量,否则会引发诡异地语法错误 syntax error, unexpected 'CONST' (T_CONST) 示例 /* 错误的方式 */ class A { publ ...

  5. Access-Control-Allow-Origin设置多个域名

    Access-Control-Allow-Origin只能返回一个. 所以用以下方法实现多个白名单域名:创建一个数据,获取请求中origin,如果在数组里,就返回该origin,如果不在,就返回一个默 ...

  6. POJ3984 BFS广搜--入门题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20816   Accepted: 12193 Descriptio ...

  7. python的资源整合

    一位大牛整理的Python资源 Python基本安装: * http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站:* http://www ...

  8. Java的运算符及结合性

    优先级 运算符 结合性 1 ()[]. 从左向右 2 !+(正)-(负)~ ++ -- 从右向左 3 * / % 从左向右 4 +(加)-(减) 从左向右 5 <<      >&g ...

  9. cms .net webform去服务器控件标签化 pagebase新版本

    这是最近在干一个webform的cms的时候用起来的,原来虽然做过很多技术,什么remoting,wcf,webservice,可是弄来弄去,最后也没个收藏的地儿,全都放在笔记本儿上了,可是人又懒地可 ...

  10. SQLSever 触发器

    /*DML触发器分为: 1. after触发器(之后触发) a. insert触发器 b. update触发器 c. delete触发器*/ /*UPDATE 触发器创建触发的语法*/ CREATE ...