参考:
https://www.cnblogs.com/zhaideyou/p/5851219.html
https://blog.csdn.net/qq_44913138/article/details/91439510
https://www.cnblogs.com/xdp-gacl/p/4209586.html
https://www.cnblogs.com/ysocean/p/7666061.html
第一步:引入mail包
通过maven来引入或者下载javax.mail包然后引入
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
第二步:编写mail类
下面附一个简单版本的,在实例测试中附单例模式的
需要注意在new PasswordAuthentication时,用户名为邮箱号,密码一般需要去获取邮箱授权码,不然会报535错误
QQ邮箱授权码可以参考QQ授权码
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class MailUtils {
/**
*
* @param email 接收者邮箱
* @param subject 邮件主题
* @param emailMsg 邮件内容
* @throws AddressException
* @throws MessagingException
*/
public static void sendMail(String email, String subject,String emailMsg)
throws AddressException, MessagingException {
//创建配置文件
Properties props = new Properties();
//设置发送时遵从SMTP协议
props.setProperty("mail.transport.protocol", "SMTP");
/*
* 发送邮件的域名
* smtp.xx.com
* smtp.qq.com则代表发送邮件时使用的邮箱域名来自qq
* smtp.163.com则代表发送邮件时使用的邮箱域名来自163
*/
props.setProperty("mail.host", "smtp.qq.com");
//设置用户的认证方式auth
props.setProperty("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//return new PasswordAuthentication("用户名", "密码");
//注意qq邮箱需要去qq邮箱的设置中获取授权码,并将授权码作为密码来填写
return new PasswordAuthentication("xxxxx@qq.com", "nilbnqjekzmtbcgd");
}
};
//创建session域
Session session = Session.getInstance(props, auth);
Message message = new MimeMessage(session);
//设置邮件发送者,与PasswordAuthentication中的邮箱一致即可
message.setFrom(new InternetAddress("xxxxx@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
//设置邮件主题
message.setSubject(subject);
//设置邮件内容
message.setContent(emailMsg, "text/html;charset=utf-8");
//发送邮件
Transport.send(message);
}
}
第三步:测试
public class EmailTest {
public static void main(String[] args) throws MessagingException {
MailUtils.sendMail("xxxxxx@qq.com", "阿里Offer", "恭喜你成功入职阿里");
}
}
附:实战案例
进行用户注册发送邮件确认案例
注意:
①在邮件中发送超链接的时候链接一定要加上http://
②在阿里云等服务器上,一定要改变port端口号为465,而不要再使用25端口(因为阿里云等默认禁用25号端口)
public class MailUtil {
private static Session session;
private static MailUtil mailUtil;
public static MailUtil getMailUtil() {
//第一次创建mailUtil时进行配置
if (mailUtil == null) {
Properties props = new Properties();
// 发送邮件的服务器的IP和端口
//设置发件人的SMTP的服务器地址
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", 465);
props.put("mail.smtp.ssl.enable", "true");
//设置传输协议
props.setProperty("mail.transport.protocol", "smtp");
//设置用户的认证方式auth
props.setProperty("mail.smtp.auth", "true");
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
} catch (GeneralSecurityException e1) {
e1.printStackTrace();
}
props.put("mail.smtp.ssl.socketFactory", sf);
props.put("mail.smtp.socketFactory.port", 465);
session = Session.getDefaultInstance(props, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
//发件人邮件用户名、密码,xxxx自己设置
return new PasswordAuthentication("xxxxxx@qq.com", "nilbnqjekzmtbcgd");
}
});
session.setDebug(true);
mailUtil = new MailUtil();
}
return mailUtil;
}
//发送邮件
public void sendEmail(String email, String subject, String content) {
try {
// 设置session,和邮件服务器进行通讯。
MimeMessage message = new MimeMessage(session);
// 设置邮件主题
message.setSubject(subject);
// 发送 HTML 消息, 可以插入html标签
message.setContent(content, "text/html;charset=UTF-8");
// 设置邮件发送日期
message.setSentDate(new Date());
//设置发送邮件使用的邮箱地址
Address address = new InternetAddress("941794689@qq.com");
message.setFrom(address);
// 设置邮件接收方的地址
Address toAddress = new InternetAddress(email);
message.addRecipient(Message.RecipientType.TO, toAddress);
// 发送邮件
Transport.send(message);
System.out.println("send ok!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
//注册验证
public String registerUser(String email, String name, String pass) {
BmbUser userEntity = bmbUserMapper.isExist(email);
String result;
if (userEntity == null) {
System.out.println("不存在");
userEntity = new BmbUser();
userEntity.setEmail(email);
userEntity.setName(name);
userEntity.setPass(pass);
String code = RandomUtil.getRandom(); //生成随机字符串
userEntity.setVerifyCode(code);
userEntity.setCreateTime(TimeUtil.getCurrentTime());
userEntity.setUpdateTime(TimeUtil.getCurrentTime());
userEntity.setIsVerify(0);
userService.saveOrUpdate(userEntity);
//发送邮件
MailUtil mailUtil = MailUtil.getMailUtil();
//内容中使用html
mailUtil.sendEmail(email,"【BmbHome】身份验证邮件(请不要回复此邮件)",
"<p>尊敬的用户:</p>\n" +
"<p>我们诚挚的欢迎您加入“平衡之家”,为追求身心平衡而努力!为自己的幸福而努力,给自己带来快乐和意义!</p>\n" +
"<p>“平衡之家”帮助您获得身心平衡,为您提供一条和谐医患关系的平衡之道!</p>\n" +
"<p>“平衡之家”提供如下功能:</p>\n" +
"<p>①您可以对网站文章进行评论和讲诊疗经历发表到网站上与大家分享;</p>\n" +
"<p>②您可以通过网站获取自己的电子病历;</p>\n" +
"<p>③您可以通过网站与医生实时互动;</p>\n" +
"<p>④您可以通过网站接受远程预约诊疗,接受医师的远程诊断或者心理辅导、进行心理咨询。 更多功能正在建设中。</p>\n" +
"<p>请点击下面链接完善个人资料,完成注册:</p>\n" +
"<a href=" + "\"" + Config.Url + "/user/activate?email=" + email + "&code=" + code + "\"" + ">点击此处完成注册</a>\n" +
"<p>平衡之家 </p>");
result = "注册成功,请到邮箱点击链接激活";
} else {
result = "该用户已注册";
System.out.println("存在");
}
return result;
}