一 需求:
1 java实现邮件发送
2 发送内容:
① 正文: 图片说明和图片
② 附件一: 图片作为附件发送
③ 附件二: Excel表格
二 思路:
1首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程
2邮件创建步骤:
配置连接邮件服务器的参数( 邮件服务器SMTP, 是否需要SMTP验证 )
创建一个邮件对象( MimeMessage )
设置发件人,收件人 ( 可增加多个收件人,抄送人,密送人 )
设置邮件标题, 正文 , 附件等
设置显示的发送时间
三 操作:
(一). 在pom.xml中添加依赖
举例: 添加1.4版本的javax.mail ,如下图
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version>
</dependency>
(二) 代码
在Controller层
/*** sendEmail 发邮件* * @param to 参数to为收件人,只能为单个收件人* @return* @throws UnsupportedEncodingException* @throws MessagingException*/
@RequestMapping(value = "/sendEmail",method = RequestMethod.GET)
public ResponseEntity<?> sendEmail( @RequestParam(value = "to") String to)throws UnsupportedEncodingException, MessagingException{topicService.sendMail(to);return Utility.ok();
}
在TopicService中:
/** The logger 日志. */
private Logger logger = LoggerFactory.getLogger(this.getClass());/*** sendMail 发邮件* * @param to 收件人* @throws MessagingException * @throws UnsupportedEncodingException */public void sendMail(String to) throws UnsupportedEncodingException, MessagingException {//1.创建邮件对象Properties properties = new Properties();properties.put("mail.smtp.host", "smtp.51testing.com"); // 指定SMTP服务器properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证Session session = Session.getInstance(properties);MimeMessage message =new MimeMessage(session);//2.设置发件人// InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码message.setFrom(new InternetAddress("tang@51testing.com","tang","UTF-8"));//3.设置收件人//To收件人 CC 抄送 BCC密送 message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to,"xin","UTF-8"));// message.addRecipient(MimeMessage.RecipientType.CC,new InternetAddress("409****1@qq.com","xinyuezi","UTF-8"));//4.设置标题message.setSubject("测试邮件" ,"UTF-8");//message.setContent("Test Content:这是一封测试邮件...","text/html;charset=UTF-8");//5.设置邮件正文//一个Multipart对象包含一个或多个bodypart对象,组成邮件正文MimeMultipart multipart = new MimeMultipart();//读取本地图片,将图片数据添加到"节点"MimeBodyPart image = new MimeBodyPart();DataHandler dataHandler1 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\flower.jpg"));image.setDataHandler(dataHandler1);image.setContentID("image_flower");//创建文本节点MimeBodyPart text = new MimeBodyPart();text.setContent("这张图片是花<br/><img src='cid:image_flower'/>","text/html;charset=UTF-8");//创建附件节点 读取本地文件,并读取附件名称MimeBodyPart file1 = new MimeBodyPart();DataHandler dataHandler2 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\growing.png"));file1.setDataHandler(dataHandler2);file1.setFileName(MimeUtility.encodeText(dataHandler2.getName()));MimeBodyPart file2 = new MimeBodyPart();DataHandler dataHandler3 = new DataHandler(new FileDataSource("E:\\Tang\\topics.xlsx"));file2.setDataHandler(dataHandler3);file2.setFileName(MimeUtility.encodeText(dataHandler3.getName()));//将文本和图片添加到multipartmultipart.addBodyPart(text);multipart.addBodyPart(image);multipart.addBodyPart(file1);multipart.addBodyPart(file2);multipart.setSubType("mixed");//混合关系message.setContent(multipart);message.setSentDate(new Date());message.saveChanges();Transport transport = session.getTransport("smtp");transport.connect("smtp.51testing.com","tang@51testing.com","(需修改,填写自己的邮箱密码)");transport.sendMessage(message,message.getAllRecipients());transport.close();logger.info(Calendar.getInstance().getTime()+" : # Send mail to "+" success #");System.out.println("sendMail-----结束了");
}
(三) 结果显示
注: 本文中参数to只适合单个收件人, 不适合群发邮件
但是如果需要发送多个, 可以多选抄送CC