最近项目需要实现一个发送邮件功能,踩了一些坑,最终实现了。
在此写一下心得
开始做的时候一塌糊涂,觉得挺难的,但是做完之后发现其实简单的一批,接下来我就来写一下实现流程。
1、准备好拿来发送邮件的账号,发邮件的时候需要用到(这里拿网易126邮箱为例)。
好,点击开启后,发送验证短信就拿到了,这里已经完成了一大半了。
2、接下来去配置我们的后台。
2.1、pom.xml 引入 jar
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>
2.2 开始编写代码(我这里拿带附件的为例子、我这里配置的动态的,根据传入的发送人信息和收件人信息进行发送)
/*** 带附件的邮件* @param record 配置发件人授权码 等信息* @param emailTo 收件人* @param emailSubject 主题* @param emailContent 内容* @param uploadPDF uploadEXECL uploadCAD附件*/@Overridepublic int sendAttachmentsMail(String emailHost,String emailUsername,String emailPassword,String emailTo, String emailSubject, String emailContent,String uploadPDF,String uploadEXECL,String uploadCAD) {//创建实例JavaMailSenderImpl sender = new JavaMailSenderImpl();//设置发送的服务器(这里的属性 qq和网易的不一样)qq:smtp.qq.com 网易:smtp.126.comsender.setHost(emailHost);//当前发送人邮箱(也就是自己)sender.setUsername(emailUsername);//授权码 (不是邮箱密码 是上面咱们的准备工作获取的那个码)sender.setPassword(emailPassword);//设置端口(这里用456、默认的25 在阿里云服务器上未开放,推荐我们设置456)sender.setPort(456);//然后设置456需要设置底下一些东西、之前这写我写到yml里,就是不清楚该怎么去修改。Properties p = new Properties();p.setProperty("mail.smtp.auth", "true");p.setProperty("mail.smtp.ssl", "true");p.setProperty("mail.smtp.socketFactory.port", "465");p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");p.setProperty("mail.smtp.starttls.enable", "true");p.setProperty("mail.smtp.starttls.required", "true");sender.setJavaMailProperties(p);MimeMessage message = sender.createMimeMessage();//解决-发送邮件时附件名太长会被截取掉或者中文乱码问题System.getProperties().setProperty("mail.mime.splitlongparameters", "false");try {//这里的utf-8解决 邮件 内容乱码MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");//当前发送人邮箱(也就是自己)helper.setFrom(emailUsername);//发送到的邮箱地址helper.setTo(emailTo);//邮件主题、标题helper.setSubject(emailSubject);//类容helper.setText(emailContent, true);//这里赋值的是附件及名称 attachmentsMailNameDisposehelper.addAttachment(attachmentsMailNameDispose(uploadPDF), file);//多个这样创建 // helper.addAttachment(attachmentsMailNameDispose(uploadEXECL), file);// helper.addAttachment(attachmentsMailNameDispose(uploadCAD), file);sender.send(message);//日志信息logger.info("邮件已经发送。");return 200;} catch (MessagingException e) {logger.error("发送邮件时发生异常!", e);return 500;}}