1、完整的邮件发送代码
1.1、依赖包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-support</artifactId> <version>2.0.8</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
主要用到了两个jar包:mail-1.4.7.jar、spring-support-2.0.8.jar.
1.2、邮件发送类
package com.autonavi.utils; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import com.autonavi.constants.Constant; public class EmailUtils { private static final Logger logger = LoggerFactory.getLogger(EmailUtils.class); public static boolean sendHtmlMail(String subject,String content,String receiver){ boolean result = true; try{ JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); // 设定mail server senderImpl.setHost("smtp.abcdefg.com"); senderImpl.setPort(345); senderImpl.setUsername(Constant.email); // 根据自己的情况,设置发件邮箱地址 senderImpl.setPassword(Constant.email_password); // 根据自己的情况, 设置password senderImpl.setDefaultEncoding("UTF-8"); Properties prop = new Properties(); prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确 prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); senderImpl.setJavaMailProperties(prop); // 建立邮件消息,发送简单邮件和html邮件的区别 MimeMessage mailMessage = senderImpl.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage); // 设置收件人,寄件人 messageHelper.setTo(receiver); messageHelper.setFrom(Constant.email); messageHelper.setSubject(subject); // true 表示启动HTML格式的邮件 messageHelper.setText(content,true); // 发送邮件 senderImpl.send(mailMessage); } catch (MessagingException e) { // TODO Auto-generated catch block result = false; logger.info("EmailUtils.method [sendHtmlMail]: email send result-" + result +",error message-" + e); } return result; } }
以上设置中,有几个点需要注意:
第一点:
senderImpl.setUsername(Constant.email); senderImpl.setPassword(Constant.email_password);
上面两个方法是用来设置发件的邮箱,邮箱地址要写全,如aba@abc.com。
如果设置得不对,会提示权限错误。
第二点:
senderImpl.setDefaultEncoding(“UTF-8”);
这个一定记得设置,否则会邮件发出去会是下面这种结果。
第三点:
Properties prop = new Properties(); prop.put(“mail.smtp.auth”, “true”); prop.put(“mail.smtp.ssl.enable”, “true”); prop.put(“mail.smtp.socketFactory.class”, “javax.NET.ssl.SSLSocketFactory”); senderImpl.setJavaMailProperties(prop);
一定要记得配置Properties,且上述配置缺一不可,如果没配置,大家会看见各种奇怪的异常。
1.3、邮件正文处理,使用HTML模版
下面的getHtmlStr()方法用来将待发送的内容处理为HTML模版。
public static String getHtmlStr(JSONArray data,String receiver,int day){ JSONObject json = data.getJSONObject(0); String title = json.getString("task_tittle"); // NO.1、获取收件人名 String receiverName = getEmailStr(receiver); // NO.2、获取邮件表格 String emailTable = getTableStr(data); // NO.3、获取邮件时间 String emailDate = Date2Str.getCurrentDate2(); String html = "<html><head></head><body>" + "<p>" +receiverName+" 您好,</p>" + "<p> 生产日程-<font size=\"4\" color=\"#FF0000\" face=\"Verdana\" >"+title+"</font>中的下列任务将于<font size=\"4\" color=\"#FF0000\" face=\"Verdana\" >"+day+"</font>天后开始启动,请关注:</p>" + "<div style=\"padding-left:20px\">" + "<table border=\"1px\" cellspacing=\"0px\" style=\"border-collapse:collapse\">" + "<tr>" + "<td>任务名</td><td>启动时间</td><td>结束时间</td>" + "</tr>" + emailTable + "</table></div>" + "<p> 每项任务的详细情况,请登陆 " + "<a href=\"http://100.78.205.244:8080\"><font size=\"4\" color=\"#FF0000\">项目综合管理&评价系统</font></a> 查看!</p>" + "<p>项目综合管理&评价系统</br>"+emailDate+"</p>" + "</body></html>"; return html; }
应用改模版后,发出的邮件显示效果如下:
至于具体业务场景,你想定义什么样的模版都行。
2、常见异常
503异常
2016-04-13-16-48 [scheduler-3] [org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler] [ERROR] - Unexpected error occurred in scheduled task. org.springframework.mail.MailSendException; nested exception details (1) are: Failed message 1: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 503 RCPT account isn't a local account at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1862) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1118) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:388) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:332) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:328) at com.autonavi.utils.EmailUtils.sendHtmlMail(EmailUtils.java:50) at com.autonavi.method.gaokuai.IssueForward.action(IssueForward.java:81) at com.autonavi.task.ScheduledTasks.executeAutoAssignTask(ScheduledTasks.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 503 RCPT account isn't a local account at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1715) ... 21 more
如果运行过程中报上述异常,请再次核对收发邮件的邮箱账号是否有效。
3、总结
SpringBoot邮件发送主要是利用已封装好的两个jar包:mail-1.4.7.jar、spring-support-2.0.8.jar,使得配置邮件发送不再复杂。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
Linux 中的服务数量非常多,我们在学习时一直使用 apache 服务作为实例。很多人会产生困惑:其他的服务都是干什么的呢?它们有什么作用呢?是不是必须启动的呢? 本节,我们就来介绍 Linux 中常见服务及它们各自的作用。 在生产服务器上,安装完 Linux 之后有一步重要的工作,就是服务优化。也就是关闭不需要的服务,只开启需要的服务。因为服务启动得越多,占用的系统资源就越多,而且被攻击的可能
1. org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool异常的原因? SDK中HttpClient连接池设置的大小不够。修改EMQClientFactory.generateHttpClient(10, 10)方法的参数即可。 2.java.net.SocketT
本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起
下面是我的代码: 这里有个例外: 对象“users”中字段“salary”上的字段错误:拒绝值[null];代码[NotNull.Users.Salary,NotNull.Salary,NotNull.java.lang.Integer,NotNull];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码
本文向大家介绍详解C#编程中异常的创建和引发以及异常处理,包括了详解C#编程中异常的创建和引发以及异常处理的使用技巧和注意事项,需要的朋友参考一下 创建和引发异常 异常用于指示在运行程序时发生了错误。此时将创建一个描述错误的异常对象,然后使用 throw 关键字“引发”该对象。然后运行时搜索最兼容的异常处理程序。 当存在下列一种或多种情况时,程序员应引发异常: 方法无法完成其中定义的功能。 例如,
本文向大家介绍Java异常处理运行时异常(RuntimeException)详解及实例,包括了Java异常处理运行时异常(RuntimeException)详解及实例的使用技巧和注意事项,需要的朋友参考一下 Java异常处理运行时异常(RuntimeException)详解及实例 RuntimeException RunntimeException的子类: ClassCastException
虽然Python通过 smtplib 库使得发送email变得很简单,Scrapy仍然提供了自己的实现。 该功能十分易用,同时由于采用了 Twisted非阻塞式(non-blocking)IO ,其避免了对爬虫的非阻塞式IO的影响。 另外,其也提供了简单的API来发送附件。 通过一些 settings 设置,您可以很简单的进行配置。 简单例子 有两种方法可以创建邮件发送器(mail sender)