Java发送附件到邮箱
生活随笔
收集整理的這篇文章主要介紹了
Java发送附件到邮箱
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.配置
導入依賴以及在yml中寫好郵箱的配置信息
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency> mail:host: smtp.exmail.qq.com //QQ 郵件服務器 username: 用戶名password: 密碼properties.mail.smtp.port: 465from: 發件人郵箱properties.mail.smtp.starttls.enable: trueproperties.mail.smtp.starttls.required: trueproperties.mail.smtp.ssl.enable: truedefault-encoding: utf-82.獲取自己的附件
這一步根據自己的業務代碼獲取需要發送郵件的附件文件,(流的格式)
ByteArrayOutputStream byteArrayOutputStream = fileUtilService.getFile(fileName); //將獲取的文件流轉換為郵件service方法的參數ByteArrayInputStream格式 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());3.文件名參數拼接
//發送的文件名為:`附件名稱-20220101.pdf` Calendar calendar = Calendar.getInstance(); StringBuilder timeString = new StringBuilder();timeString.append(“附件名稱”);timeString.append("-");timeString.append(calendar.get(Calendar.YEAR));timeString.append(calendar.get(Calendar.MONTH)+1);timeString.append(calendar.get(Calendar.DATE));timeString.append(".pdf");4.調用emailService發送郵件的方法
// 參數分別為: 發送郵箱,郵件主題,郵件正文,郵件名稱,附件流 Boolean isSuccess = emailService.sendAttachmentsMail(getEmail(), EMAIL_SUBJECT,EMAIL_CONTENT_NAMEPREFIX + name + EMAIL_CONTENT,timeString.toString(), byteArrayResource);5.發送郵箱業務層代碼Impl
@Service @Log public class EmailServiceImpl implements EmailService,EmailRpcService {//靜態代碼塊用于設置附件名編碼和長度自動切割的問題,可以解決文件名后綴錯誤(***.bin)問題static {System.setProperty("mail.mime.splitlongparameters", "false");System.setProperty("mail.mime.charset", "UTF-8");}@Autowiredprivate JavaMailSender javaMailSender;//value注解讀取yml文件的郵箱配置信息@Value("${spring.mail.from}")private String from;@Value("${spring.mail.host}")private String host;@Value("${spring.mail.username}")private String username;@Value("${spring.mail.password}")private String password;@Value("${spring.mail.properties.mail.smtp.port}")private String port;@Overridepublic void sendSimpleMail(String to, String subject, String content) {}@Overridepublic void sendHtmlMail(String to, String subject, String content) {}@Overridepublic Boolean sendAttachmentsMail(String to, String subject, String content,String fileName ,ByteArrayResource byteArrayResource) {log.info("==========================發送郵件==========================");MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper;try {messageHelper = new MimeMessageHelper(message,true,"utf-8");messageHelper.setFrom(from);messageHelper.setTo(to);messageHelper.setSubject(subject);messageHelper.setText(content,true);filePath.substring(filePath.lastIndexOf(File.separator))messageHelper.addAttachment(MimeUtility.encodeText(fileName,"utf-8","B"),byteArrayResource);javaMailSender.send(message);log.info("郵件發送成功!");return true;} catch (MessagingException e) {log.info("發送失敗:"+e);return false;} catch (UnsupportedEncodingException e) {e.printStackTrace();log.info("發送失敗:"+e);return false;}}6.注意在emailService上的static靜態代碼塊里的內容,這個是設置文件名編碼和文件名分割內容的設置,挺必要的,因為我一開始寫出來的時候,自己測試沒有出現什么問題,當時也沒有加這兩行設置,但是測試人員測試的時候發現,文件名可能會因為文件名過長或者存在某些特殊字符使得最后郵件內附件的文件名不完全正確,后綴變成了亂碼+.bin,造成文件打不開的原因。。。加上這兩行配置代碼后功能實現就正常了!
總結
以上是生活随笔為你收集整理的Java发送附件到邮箱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于win10X64 连接oracle
- 下一篇: 【厚积薄发】Crunch压缩图片的Ass