项目涉及到邮箱发送的功能 ,这篇博文主要是采用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 = "xxxxx@163.com"; //邮箱名
private static final String PASSWORD = "xxxx"; //密码
private static final String EMAILFORM = "xxxxx@163.com"; //发件人(需要与邮箱名一致,不然会出现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("xxxx@qq.com", "测试邮件", "测试");
}
}
二、服务器上运行
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文件中(配置文件中账号密码建议加密,由于只是测试这里没有做加密处理)
######## 邮件配置 ########
#邮箱
userName=pubu1234@163.com
#邮箱授权码
passWord=hao123000
#发送人
emailForm=pubu1234@163.com
#服务器
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("123456789@qq.com", "测试邮件", "测试");
}
}
其中代码大部分都是参考,只是对代码进行了优化和对实现过程中出现的问题记录,代码 参考如下:https://blog.youkuaiyun.com/qq_32371887/article/details/72821291
如果需要了解更多,请参考javaMail API 、http://www.runoob.com/java/java-sending-email.html 等