項目涉及到郵箱發送的功能 ,這篇博文主要是採用spring框架內集成的工具類 (JavaMailSenderImpl ),服務器採用的是163的郵箱服務器,在此不做太多內部方法的講解,主要記錄實現的代碼。其中的注意事項,如下
需要發送人的郵箱開啓SMTP服務,例:163開啓: 登陸網頁版 ---》設置--》設置POP3/SMTP/IMAP 勾選就行。
一、硬編碼方式實現
首先通過本地main方法來跑,如需服務器上運行請往下看。硬編碼方式沒什麼太多注意事項,只要你的郵箱服務器上開啓了" SMTP "服務,下面代碼複製就能跑。
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
* 郵件發送工具類
* @author zhouhao
*
*/
public class EmailUtil {
private static final String HOST = "smtp.163.com"; // 郵箱服務器
private static final Integer PORT = 25; // 端口
private static final String USERNAME = "[email protected]"; //郵箱名
private static final String PASSWORD = "xxxx"; //密碼
private static final String EMAILFORM = "[email protected]"; //發件人(需要與郵箱名一致,不然會出現553問題)
private static JavaMailSenderImpl mailSender = createMailSender();
/**
* 郵件發送器
*
* @return 配置好的工具
*/
private static JavaMailSenderImpl createMailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(HOST);
sender.setPort(PORT);
sender.setUsername(USERNAME);
sender.setPassword(PASSWORD);
sender.setDefaultEncoding("Utf-8");
Properties p = new Properties();
p.setProperty("mail.smtp.timeout", "25000");
p.setProperty("mail.smtp.auth", "false");
sender.setJavaMailProperties(p);
return sender;
}
/**
* 發送郵件
*
* @param to 接受人
* @param subject 主題
* @param html 發送內容
* @throws MessagingException 異常
* @throws UnsupportedEncodingException 異常
*/
public static void sendHtmlMail(String to, String subject, String html) throws MessagingException,UnsupportedEncodingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 設置utf-8或GBK編碼,否則郵件會有亂碼
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(EMAILFORM, "");
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(html, true);
mailSender.send(mimeMessage);
}
public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
sendHtmlMail("[email protected]", "測試郵件", "測試");
}
}
二、服務器上運行
1、服務器上運行需要導入2個jar包,如下
<!-- 郵件發送 -->
<dependency>
<groupId>activation</groupId>
<artifactId>activation</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
2、相關的端口、服務器地址放入properties文件中(配置文件中賬號密碼建議加密,由於只是測試這裏沒有做加密處理)
######## 郵件配置 ########
#郵箱
[email protected]
#郵箱授權碼
passWord=hao123000
#發送人
[email protected]
#服務器
host=smtp.163.com
#服務器端口
port=25
#超時時間
timeOut=25000
代碼 如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
/**
* 郵件發送工具類
* @author zhouhao
* 2019-03-12
*/
@Component
public class EmailUtil {
private static final Logger logger = Logger.getLogger(EmailUtil.class);
private static final String PROPERTIES_DEFAULT = "app.properties";
private static String host;
private static Integer port;
private static String userName;
private static String passWord;
private static String emailForm;
private static String timeOut;
static{
init();
}
private static JavaMailSenderImpl mailSender = createMailSender();
/**
* 初始化
*/
private static void init() {
Properties properties = new Properties();
try{
InputStream inputStream = EmailUtil.class.getClassLoader().getResourceAsStream(PROPERTIES_DEFAULT);
properties.load(inputStream);
inputStream.close();
host = properties.getProperty("host");
port = Integer.parseInt(properties.getProperty("port"));
userName = properties.getProperty("userName");
passWord = properties.getProperty("passWord");
emailForm = properties.getProperty("emailForm");
timeOut = properties.getProperty("timeOut");
} catch(IOException e){
logger.error(e.getMessage() , e);
}
}
/**
* 郵件發送器
*
* @return 配置好的工具
*/
private static JavaMailSenderImpl createMailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(host);
sender.setPort(port);
sender.setUsername(userName);
sender.setPassword(passWord);
sender.setDefaultEncoding("Utf-8");
Properties p = new Properties();
p.setProperty("mail.smtp.timeout", timeOut);
p.setProperty("mail.smtp.auth", "false");
sender.setJavaMailProperties(p);
return sender;
}
/**
* 發送郵件
*
* @param to 接受人
* @param subject 主題
* @param html 發送內容
* @throws MessagingException 異常
* @throws UnsupportedEncodingException 異常
*/
public static void sendHtmlMail(String to, String subject, String html) throws MessagingException,UnsupportedEncodingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 設置utf-8或GBK編碼,否則郵件會有亂碼
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(emailForm, "");
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(html, true);
mailSender.send(mimeMessage);
}
public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
//sendHtmlMail("[email protected]", "測試郵件", "測試");
}
}
其中代碼大部分都是參考,只是對代碼進行了優化和對實現過程中出現的問題記錄,代碼 參考如下:https://blog.csdn.net/qq_32371887/article/details/72821291
如果需要了解更多,請參考javaMail API 、http://www.runoob.com/java/java-sending-email.html 等