/**
* 创建邮件
*
* @param session Session用于收集JavaMail运行过程中的环境信息
* @param myEmailAccount 发件人
* @param receiveMailAccount 收件人
* @param msgModelEo 模板
* @param plcMainVo 保单信息
* @return
*/
private MimeMessage createMimeMessage(Session session, String myEmailAccount, String receiveMailAccount, SflMsgModel msgModelEo, PlcMainVo plcMainVo) {
MimeMessage message = new MimeMessage(session);
try {
logger.info("发件邮箱为:" + myEmailAccount);
//发件人邮箱,发件人名称
//TODO 发送者的邮箱名可替换
message.setFrom(new InternetAddress(myEmailAccount, "发送者的邮箱名"));
//收件人,收件人邮箱,收件人名称
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount));
//发件主题
logger.info("邮件主题为:" + msgModelEo.getEmailSubject());
message.setSubject(msgModelEo.getEmailSubject(), "UTF-8");
String content = RenderString.renderString(msgModelEo.getMsgModelContent(), plcMainVo);
// Map<List<String>, Map<String, List<String>>> imgInfo = getBytes(content);
// Set<List<String>> bytes = imgInfo.keySet();
// 图片转换为字节数组后加密的list
// List<String> imgBytes = bytes.stream().findFirst().orElse(null);
// //要截取的内容以及图片名称
// Map<String, List<String>> imgInfos = imgInfo.get(imgBytes);
// Set<String> replaceString = imgInfos.keySet();
// //要从内容中剔除的内容
// String replaceStrings = replaceString.stream().findFirst().orElse(null);
// //图片名称
// List<String> imgNames = imgInfos.get(replaceStrings);
// // 设置消息体
// Multipart multipart = new MimeMultipart();
// BodyPart bodyPart = new MimeBodyPart();
//
// // 邮件信息内容
// bodyPart.setText(replaceStrings);
// multipart.addBodyPart(bodyPart);
// if (CollectionUtils.isNotEmpty(imgBytes)&&CollectionUtils.isNotEmpty(imgNames)&&imgBytes.size()==imgNames.size()){
// for (int i = 0; i < imgBytes.size(); i++) {
// bodyPart = new MimeBodyPart();
// String imgName = imgNames.get(i);
// String[] split = imgName.split(".");
// String type=split[1];
// String contentType="application/"+type;
// DataSource source = new ByteArrayDataSource(Base64.getDecoder().decode(imgBytes.get(i)), contentType);
// bodyPart.setDataHandler(new DataHandler(source));
// bodyPart.setFileName(MimeUtility.encodeText(imgName));
// multipart.addBodyPart(bodyPart);
// }
// }
//字符串替换
logger.info("邮件内容为:" + content);
//邮件内容
message.setContent(content, "text/html;charset=UTF-8");
// 邮件发送时间
message.setSentDate(new Date());
message.saveChanges();
} catch (MessagingException e) {
logger.error("邮件赛值错误", e);
} catch (UnsupportedEncodingException e) {
logger.error("收件人/发件人地址错误", e);
}
return message;
}
发送邮件
Properties props = new Properties(); // 参数配置
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", host); //发件人的邮箱的 SMTP 服务器地址
// props.setProperty("mail.smtp.auth", "false"); // 需要请求认证
// props.put("mail.smtp.ssl.enable", true);//是否需要加密
props.setProperty("mail.smtp.port", "25");
Session session = Session.getInstance(props);
session.setDebug(true);
String receiveMailAccount = plcMainVo.getReceiveMailAccount();
logger.info("邮箱收件人为" + receiveMailAccount);
if (null == receiveMailAccount) {
sendResult.setCode("000");
sendResult.setMsg("邮箱收件人为空");
return sendResult;
} else if (null == sflMsgModel.getEmailSubject()) {
sendResult.setCode("000");
sendResult.setMsg("邮件主题为空");
return sendResult;
}
//获取到邮件
MimeMessage message = createMimeMessage(session, username, plcMainVo.getReceiveMailAccount(), sflMsgModel, plcMainVo);
try {
Transport transport = session.getTransport();
transport.connect(username, password);
transport.sendMessage(message, message.getAllRecipients());
sendResult.setCode("999");
sendResult.setMsg("邮件发送成功");
transport.close();
} catch (NoSuchProviderException e) {
logger.error("发送邮件出错", e);
sendResult.setMsg("发送邮件出错");
sendResult.setCode("999");
} catch (MessagingException e) {
sendResult.setMsg("发送邮件出错");
sendResult.setCode("999");
}
本文详细介绍了如何使用Java编程语言通过SMTP协议发送电子邮件,包括配置SMTP服务器信息、设置邮件内容和附件等步骤。
2万+

被折叠的 条评论
为什么被折叠?



