邮件的配置类:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mail")
public class MailProperties {
private String from;
private String pwd;
private String host;
private String subject;
private String port;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
配置参数:
spring.mail.password=
spring.mail.host=101.91.21.234
spring.mail.username=administrator@XXXX.com
spring.mail.port=35
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
mail.from=${spring.mail.username}
mail.pwd=${spring.mail.password}
mail.host=${spring.mail.host}
mail.port=${spring.mail.port}
mail.subject=【XXX系统邮件通知】
mail.onOff = false
service代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
import javax.mail.*;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
* 邮件服务接口实现类 Uinfor
*
* @author
*/
@Service
public class MailServiceImpl implements MailService {
@Autowired
private MailProperties mailProperties;
private static Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Value("${mail.onOff}")
private boolean onOff;
@Override
public void SendSimpleMail(String to, String subject, String text) {
if (!onOff) {return ;}
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(mailProperties.getFrom());
mailMessage.setTo(to);
mailMessage.setSubject(subject);
mailMessage.setText(text);
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
senderImpl.setUsername(mailProperties.getFrom());
senderImpl.setPassword(mailProperties.getPwd());
senderImpl.setHost(mailProperties.getHost());
senderImpl.setPort(Integer.valueOf(mailProperties.getPort()));
senderImpl.send(mailMessage);
if (mailProperties.getPwd() == null || mailProperties.getPwd().length() == 0) {
sendEmail(mailProperties.getSubject() + subject, to.split(";"), null, text, null, true);
} else {
sendEmail(mailProperties.getSubject() + subject, to.split(";"), null, text, null, false);
}
} catch (Exception e) {
logger.error("SendSimpleMail error: {}", e.getMessage());
}
}
@Override
public void SendTcMail() {
}
@Override
public void sendHtmlMail(String to, String[] ccs, String subject, String html) {
logger.info("sendMail to := " + to + "-->subject := " + subject);
logger.info("sendMail to := " + to + "-->html := " + html);
if (mailProperties.getPwd() == null || mailProperties.getPwd().length() == 0) {
sendEmail(mailProperties.getSubject() + subject, to.split(";"), ccs, html, null, true);
} else {
sendEmail(mailProperties.getSubject() + subject, to.split(";"), ccs, html, null, false);
}
}
public void sendEmail(String subject, String[] tos, String[] ccs, String content, File[] attachments,
boolean isAnonymousEmail) {
if (subject == null || subject.length() == 0) {
subject = "Auto-generated subject";
}
if (tos == null || tos.length == 0) {
throw new IllegalArgumentException("At lease 1 receive address is required.");
}
if (content == null && (attachments == null || attachments.length == 0)) {
throw new IllegalArgumentException("Content and attachments cannot be empty at the same time");
}
logger.info("sendMail to := " + tos[0] + "-->subject := " + subject);
logger.info("sendMail to := " + tos[0] + "-->content := " + content);
if (attachments != null && attachments.length > 0) {
List<File> invalidAttachments = new ArrayList<>();
for (File attachment : attachments) {
if (!attachment.exists() || attachment.isDirectory() || !attachment.canRead()) {
invalidAttachments.add(attachment);
}
}
if (invalidAttachments.size() > 0) {
String msg = "";
for (File attachment : invalidAttachments) {
msg += "\n\t" + attachment.getAbsolutePath();
}
logger.error("sendMail error message := ", msg);
//throw new IllegalArgumentException("The following attachments are invalid:" + msg);
}
}
Session session;
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
if (isAnonymousEmail) {
// only anonymous email needs param smtpHost
props.put("mail.smtp.host", mailProperties.getHost());
props.put("mail.smtp.port", mailProperties.getPort());
props.put("mail.smtp.auth", "false");
session = Session.getInstance(props, null);
} else {
// normal email does not need param smtpHost and
// uses the default host SMTPServer
props.put("mail.smtp.host", mailProperties.getHost());
props.put("mail.smtp.port", mailProperties.getPort());
props.put("mail.smtp.auth", "true");
session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(mailProperties.getFrom(), mailProperties.getPwd());
}
});
}
try {
MimeMessage message = new MimeMessage(session);
InternetAddress fromAddress = new InternetAddress(mailProperties.getFrom());
message.setFrom(fromAddress);
for (String to : tos) {
System.out.println("to := " + to);
if (to != null && to.length() > 0 && to.contains("@")) {
message.addRecipient(RecipientType.TO, new InternetAddress(to));
}
}
if (ccs != null) {
for (String cc : ccs) {
System.out.println("cc := " + cc);
if (cc != null && cc.length() > 0 && cc.contains("@")) {
message.addRecipient(RecipientType.CC, new InternetAddress(cc));
}
}
}
message.setSubject(subject);
message.setContent(content, "text/html;charset=gb2312");
message.setSentDate(new Date());
message.saveChanges();
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
logger.error("", e);
}
}
/**
* HTML 文本邮件
*
* @param to 接收者邮件
* @param cc 抄送
* @param subject 邮件主题
* @param contnet HTML内容
* @throws MessagingException
*/
// public void sendHtmlMail(String to, String[] cc, String subject, String contnet) {
// JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
// senderImpl.setUsername(mailProperties.getFrom());
// senderImpl.setPassword(mailProperties.getPwd());
// senderImpl.setHost(mailProperties.getHost());
// MimeMessage message = senderImpl.createMimeMessage();
// try {
// MimeMessageHelper helper = new MimeMessageHelper(message, true);
// helper.setTo(to);
// helper.setSubject("PLM集成提醒:" + subject);
// helper.setText(contnet, true);
// helper.setFrom(mailProperties.getFrom());
// if(cc != null && cc.length > 0) {
// helper.setCc(cc);
// }
// senderImpl.send(message);
// }catch(Exception e) {
// e.printStackTrace();
// }
//
//
senderImpl.setPort(mailProperties.getPort());
//
// }
}