spring mvc版本
jar包
通過maven引入jar包
<javax.mail.version>1.5.0-b01</javax.mail.version>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>${javax.mail.version}</version>
</dependency>
引入成功後,就可以在代碼裡面引入
java代碼
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
/**
* @Project xiangweihui
* @PackageName com.xiangweihui.core.bean
* @ClassName SendEmailMessageBean
* @Author jiahong.xing
* @Date 2019/7/19 11:44
* @Description 發送郵件對象
*/
@ToString
@Getter
@Setter
public class SendEmailMessageBean {
//發送位址
private String toMail;
//标題
private String title;
//發送内容
private String cont;
//檔案對象
private List<EmailFileBean> fileList;
//發送備注/作用
private String info;
public SendEmailMessageBean() {
}
public SendEmailMessageBean(String toMail, String title, String cont, String info) {
this.toMail = toMail;
this.title = title;
this.cont = cont;
this.info = info;
}
}
檔案對象
import lombok.Getter;
import lombok.Setter;
import java.io.File;
/**
* @Project suishoukai-invoice
* @PackageName com.suishoukai.invoice.core.bean
* @ClassName EmailFileBean
* @Author jiahong.xing
* @Date 2019/5/6 17:57
* @Description 郵件檔案對象
*/
@Getter
@Setter
public class EmailFileBean {
//名稱
private String name;
//檔案
private File file;
}
發送郵件核心代碼
/**
* 根據所有資訊發送郵件,支援代理,直接發送,不異步
*
* @return
*/
public static void sendEmail(SendEmailMessageBean sendEmailMessageBean) {
//發送位址
String toMail = sendEmailMessageBean.getToMail();
//标題
String title = sendEmailMessageBean.getTitle();
//發送内容
String cont = sendEmailMessageBean.getCont();
// 2017.5.24因為不支援代理改變寫法
if (!RegularUtil.testByRegular(toMail, RegularUtil.email_verify)) {
throw new Exceptions("郵件位址格式錯誤:" + toMail);
}
EmailSetting emailSetting = SettingUtil.getEmailSetting();
//SMTP伺服器位址
String smtpHost = emailSetting.getSmtpHost();
//SMTP伺服器位址(端口)
String smtpPort = emailSetting.getSmtpPort();
//發件人
String smtpFromMail = emailSetting.getSmtpFromMail();
//SMTP使用者名
String smtpUsername = emailSetting.getSmtpUsername();
//SMTP密碼
String smtpPassword = emailSetting.getSmtpPassword();
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
javaMailSender.setHost(smtpHost);
javaMailSender.setPort(Integer.parseInt(smtpPort));
javaMailSender.setUsername(smtpUsername);
javaMailSender.setPassword(smtpPassword);
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
mimeMessageHelper.setFrom(MimeUtility.encodeWord(emailSetting.getEmail_name()) + " <" + smtpFromMail + ">");
mimeMessageHelper.setSubject(title);
mimeMessageHelper.setTo(toMail);
//處理檔案
if (CollectionUtils.isNotEmptyCollection(sendEmailMessageBean.getFileList())) {
for (EmailFileBean emailFileBean : sendEmailMessageBean.getFileList()) {
mimeMessageHelper.addAttachment(emailFileBean.getName(), emailFileBean.getFile());
}
}
mimeMessageHelper.setText(cont, true);
log.info("向" + toMail + "發送了一封郵件,标題為:" + title + ",内容為:" + cont);
javaMailSender.send(mimeMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
這裡可以用異步線程或者mq消息異步發送
效果
已完成了郵件發送
springboot版本
需要在Configuration裡進行spring注入即可
注入同時加入了靜态引用
@Bean
public JavaMailSender javaMailSender() {
JavaMailSender javaMailSender = new JavaMailSenderImpl();
Properties javaMailProperties = new Properties();
javaMailProperties.setProperty("mail.smtp.auth", "true");
javaMailProperties.setProperty("mail.smtp.timeout", "5000");
javaMailProperties.setProperty("mail.smtp.starttls.enable", "false");
javaMailProperties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
((JavaMailSenderImpl) javaMailSender).setJavaMailProperties(javaMailProperties);
return javaMailSender;
}
@PostConstruct
public void init() {
//郵件
JavaMailSenderImpl javaMailSender = (JavaMailSenderImpl) javaMailSender();
EmailUtil.javaMailSender = javaMailSender;
}
調用java代碼和上面保持一緻的
可以進行線程異步發送和mq消息發送,這兩個的使用見以後的文章