1.先引入maven依赖,在pom.xml文件中添加:
<!-- 引入邮箱插件-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
注意里面我使用的是log4j日志对信息进行记录,不懂得同学们可以点击此处快速学习
2.创建javaSocket类
import com.sun.mail.util.MailSSLSocketFactory;
import com.talent.api.commonApi.ContenConfig;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class JavaSocket {
private static final String EMAIL_SEND = "自己的邮箱";
private static final String EMAIL_KEY = "16位的授权码";
public static void sendEmail(EmailModel emailModel) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host", "smtp.qq.com");
// 设置QQ邮件服务器
prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码
// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//使用JavaMail发送邮件的5个步骤
//创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getDefaultInstance(prop, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//发件人邮件用户名、授权码
return new PasswordAuthentication(EMAIL_SEND, EMAIL_KEY);
}
});
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2、通过session得到transport对象
Transport ts = session.getTransport();
//3、使用邮箱的用户名和授权码连上邮件服务器
ts.connect("smtp.qq.com", EMAIL_SEND, EMAIL_KEY);
//4、创建邮件
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress(EMAIL_SEND));
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress(emailModel.getEmailReciver()));
//邮件的标题
message.setSubject(emailModel.getTitle());
//邮件的文本内容
message.setContent(emailModel.getMessage(), "text/html;charset=UTF-8");
//5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
// re=ts
ts.close();
}
}
不会获取邮箱检验码的点击此处
emailModel
public class EmailModel {
private String title;//邮件标题
private String message;//邮件内容
private String emailReciver;//邮件的收件人
public EmailModel(String title, String message, String emailReciver) {
this.title = title;
this.message = message;
this.emailReciver = emailReciver;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getEmailReciver() {
return emailReciver;
}
public void setEmailReciver(String emailReciver) {
this.emailReciver = emailReciver;
}
}
如何使用呢,我们可以创建一个工具类MailUtils
public class MailUtils {
private static final JavaSocket javaSocket = new JavaSocket();
/**
* 发送邮件
* 发送成功:true
* 发送失败:fasle
*
* @param title 邮件主题
* @param message 邮件内容
* @return
*/
public static Boolean senEmail(String title, String message, String emailReceiver) {
Boolean re = false;
try {
javaSocket.sendEmail(new EmailModel(title, message, emailReceiver));
re = true;
} catch (Exception e) {
re = false;
e.printStackTrace();
}
return re;
}
public static void main(String[] args) {
Boolean re = senEmail("测试数据", "测试内容", "649623649");
System.out.println(re);
}
}
上面只是实现了发送纯文本类型的邮件,更多类型的邮件服务可以参考以下方式:
import java.io.File;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SocketTest {
@Autowired
private JavaMailSenderImpl mailSender;
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 发送包含简单文本的邮件
*/
@Test
public void sendTxtMail() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// 设置收件人,寄件人
String receiver="177@qq.com";
simpleMailMessage.setTo(new String[] {receiver});
simpleMailMessage.setFrom("176@163.com");
simpleMailMessage.setSubject("Spring Boot Mail 邮件测试【文本】");
simpleMailMessage.setText("这里是一段简单文本测试邮件。!!!!!请忽略!!!!!");
// 发送邮件
mailSender.send(simpleMailMessage);
logger.info("邮件已经发送到账户"+receiver);
System.out.println("邮件已发送");
}
/**
* 发送包含HTML文本的邮件
* @throws Exception
*/
@Test
public void sendHtmlMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
String receiver="177@qq.com";//接收者账户
String postCount="176@163.com";//发送者账户
mimeMessageHelper.setTo(receiver);
mimeMessageHelper.setFrom("176@163.com");
mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【HTML】");
StringBuilder sb = new StringBuilder();
sb.append("<html><head></head>");
sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p></body>");
sb.append("</html>");
// 启用html
mimeMessageHelper.setText(sb.toString(), true);
// 发送邮件
mailSender.send(mimeMessage);
logger.info("邮件已经从"+postCount+"->发送到账户"+receiver);
System.out.println("邮件已发送");
}
/**
* 发送包含内嵌图片的邮件
* @throws Exception
*/
@Test
public void sendAttachedImageMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// multipart模式
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
String receiver="177@qq.com";//接收者账户
String postCount="176@163.com";//发送者账户
mimeMessageHelper.setTo(receiver);
mimeMessageHelper.setFrom(postCount);
mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【图片】");
StringBuilder sb = new StringBuilder();
sb.append("<html><head></head>");
sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p>");
// cid为固定写法,imageId指定一个标识
sb.append("<img src='https://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_272x92dp.png'></body>");
sb.append("</html>");
// 启用html
mimeMessageHelper.setText(sb.toString(), true);
// 设置imageId
FileSystemResource img = new FileSystemResource(new File("D:/壁纸/21.jpg"));
mimeMessageHelper.addInline("imageId", img);
// 发送邮件
mailSender.send(mimeMessage);
logger.info("邮件已经从"+postCount+"->发送到账户"+receiver+",发送内容为:"+img);
System.out.println("邮件已发送");
}
/**
* 发送包含附件的邮件
* @throws Exception
*/
@Test
public void sendAttendedFileMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// multipart模式
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
String receiver="177@qq.com";//接收者账户
String postCount="176@163.com";//发送者账户
mimeMessageHelper.setTo(receiver);
mimeMessageHelper.setFrom(postCount);
mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【附件】");
StringBuilder sb = new StringBuilder();
sb.append("<html><head></head>");
sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail annex test</p></body>");
sb.append("</html>");
// 启用html
mimeMessageHelper.setText(sb.toString(), true);
// 设置附件
FileSystemResource file = new FileSystemResource(new File("D:/简历/个人简历 朱旭.docx"));
mimeMessageHelper.addAttachment("PersonalInformation.docx", file);
// 发送邮件
mailSender.send(mimeMessage);
logger.info("邮件已经从"+postCount+"->发送到账户"+receiver+",发送内容为:"+file);
System.out.println("邮件已发送");
}
}
具体更多的java有邮件设置可以参考此处,不过个人认为上面提到的这些已经可以满足大部分人的需求了