spring实现java的邮件发送

由于项目需要使用邮件发送,所以最近学习了一下利用spring机制来发送邮件。这里大致记录一下其实现。

首先,需要在项目中导入两个包,一个是mailapi-XX.jar,一个是smtp-xx.jar。其中xx代表版本号。倘若使用maven更简单了,直接添加:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.4</version>
</dependency>

然后就是我们的邮件发送的方法了。倘若要把这个做成工具类,完全可以将其改成静态方法。

 private static EmailDetails emailDetails;

    public static void resetEmailDetails(){
        emailDetails = null;
        logger.info("EmailService:重置emailDetails=null");
    }
 public  void sendMail(String toEmail, String subject, String htmlContent) {
            if(emailDetails == null){
                emailDetails = iSysConfigService.getEmailDetails();
                logger.info("EmailService:重置emailDetails={}", JSONArray.fromObject(emailDetails));
            }

            if(StringUtil.isEmpty(toEmail)||StringUtil.isEmpty(subject)||StringUtil.isEmpty(htmlContent)){
                throw new BusinessException("需要发送的信息(目标邮箱、主题、内容)不完整");
            }
            JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
            // 发送邮箱的邮件服务器
            senderImpl.setHost(emailDetails.getHost());
            // 建立邮件消息,发送简单邮件和html邮件的区别
            MimeMessage mailMessage = senderImpl.createMimeMessage();
            // 为防止乱码,添加编码集设置
            MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, "UTF-8");
           // System.out.println("发件人地址1:"+SystemConfig.getGuestUsername());
            try {
                // 接收方邮箱
                messageHelper.setTo(toEmail);
            } catch (MessagingException e) {
                throw new RuntimeException("收件人邮箱地址出错!");
            }
            try {
                // 发送方邮箱
                messageHelper.setFrom(emailDetails.getFrom());
            } catch (MessagingException e) {
                throw new RuntimeException("发件人邮箱地址出错!");
            }
            try {
                messageHelper.setSubject(subject);
            } catch (MessagingException e) {
                throw new RuntimeException("邮件主题出错!");
            }
            try {
                // true 表示启动HTML格式的邮件
                messageHelper.setText(htmlContent, true);
            } catch (MessagingException e) {
                throw new RuntimeException("邮件内容出错!");
            }

            Properties prop = new Properties();
            // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确
            prop.put("mail.smtp.auth", "true");
            // 超时时间
            prop.put("mail.smtp.timeout", "25000");

            // 添加验证
//            MyAuthenticator auth = new MyAuthenticator(SystemConfig.getEmailUsername(),
//                    SystemConfig.getEmailPassword());
            MyAuthenticator auth = new MyAuthenticator(emailDetails.getUsername(),
                   emailDetails.getPassword());
            Session session = Session.getDefaultInstance(prop, auth);
            senderImpl.setSession(session);
            // senderImpl.setJavaMailProperties(prop);
            // 发送邮件
            try {
                senderImpl.send(mailMessage);
                logger.info("发送邮件成功,收件人:{},主题:{}",toEmail,subject);
            } catch (Exception e){
               throw new BusinessException("发送邮件失败!");
            }
        }

这里我们还需要一个验证的类,用来验证你提供的发送方的信息是否正确(其实是163获取qq等服务器验证你提供的信息,验证不通过人家不给你发送。)这个类你可以放在上面方法的并列位置作为一个邮件发送工具类的内部类。

//验证发送方的用户名和密码,验证成功后,邮箱服务器才允许发送邮件
    class MyAuthenticator extends Authenticator{
        private String username;
        private String password;
        public MyAuthenticator(String username,String password){
            super();
            this.username=username;
            this.password=password;
        }

        protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication(username, password);
        }
    }

当然有了这些群发自然变成很简单的事情了(重载即可):

//群发
    public  void sendMail(List<String> toEmailList, String subject, String htmlContent){
        for(String toEmail:toEmailList){
            sendMail(toEmail,subject,htmlContent);
        }
     }

这样就可以实现邮件的发送了。

这里说明一下参数:发送方参数:from:发送方邮箱;host:发送服务器(如果你发送方是163邮箱,则为smtp.163.com这种);username:发送方邮箱的用户名;password:发送方邮箱密码。我这里因为是在数据库中以json形式存储,所以用一个类来管理的,就是emailDetails,可以自己配置。

发送数据:toEmail:收件邮箱;subject:主题;htmlContent:html形式的内容。

测试截图:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 11:10:24

spring实现java的邮件发送的相关文章

java mail 邮件发送实例【搬】

说明:转自国外博客:欢迎查阅原作 该实例较新,简明易懂,值得新手借鉴 以gmail为例,注意: 1.通过TLS方式发送 1 package com.mkyong.common; 2 3 import java.util.Properties; 4 5 import javax.mail.Message; 6 import javax.mail.MessagingException; 7 import javax.mail.PasswordAuthentication; 8 import java

java mail邮件发送(带附件) 支持SSL

java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.util.Vector; public class MailSenderInfo { // 发送邮件的server的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 pr

java mail邮件发送(带附件)

java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.util.Vector; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 priva

java实现邮件发送验证码

建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬间就好了.所以去申请个别的邮箱吧. 用邮件发送验证码,首先需要jar包.我写的代码只需要mail.jar,没有的话可以给我留言,我给你发个. 废话不说了直接上代码(这个代码就是个工具类直接用就好) package com.itheima.utils; import java.util.Properties; import ja

纯java实现邮件发送服务(亲测好用)

今天自己测试了一下用java代码实现发送有限的服务,非常简单.直接贴代码: import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.GeneralSecurityException; import java.u

Java Mail邮件发送的简单实现

1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方面. 2.邮件发送的大致过程 1.构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法.此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利. 2.构建一个properties文件,该文件中存放SMTP服务器

java SpringMVC 邮件发送配置及Code

首先是spring中的配置:(我里面使用了FreeMarker模板引擎) <!--邮件发送实现类-->     <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">         <property name="host" value="smtp.qq.com"/>  

工具类学习-java实现邮件发送激活码

问题:用java实现服务器发送激活码到用户邮件. 步骤一:如果是个人的话,确保在本地安装邮件服务器(易邮服务器)和邮件客户端(foxmail). 步骤二:导入jar包  mail.jar,其他的需要什么协议导什么jar. package cn.itcast.store.utils; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.M

Java实现邮件发送功能

import java.util.Properties; import javax.mail.Address; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class Sen