spring实现java的邮件发送

spring实现java的邮件发送

分类:Util

由于项目需要使用邮件发送,所以最近学习了一下利用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形式的内容。

测试截图:

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

上一篇申请信用卡窍门

顶1踩0

正如我总是意犹未尽的想起你。

spring实现java的邮件发送

相关文章:

你感兴趣的文章:

标签云: