java中邮件发送技术
- 使用场景
- 注册、验证、激活账号
- 通过注册邮箱找回密码
- 系统监控告警
- 网站直销
- 邮件发送的协议
- 邮件传输协议:STMP、POP3和IMAP协议
- POP3协议是邮局协议的第三个版本它规定怎样将个人计算机连接到邮件服务器和下载电子邮件的电子协议允许用户把服务器上的邮件存储到本地,同时删除保存在邮件服务器上的邮件,用来接收电子邮件。
- SMTP简单邮件传输协议,它是一组有原目的地址到目标地地址传输邮件的规范,通过它来控制邮件的中转方式。他属于TCP/IP协议族它帮助每一个计算机发送邮件并且找到下一个目的地址。它遵循了SMTP协议。
- IMAP协议,是交互式邮件存储协议,它跟POP3类似不同的是开启了IMAP协议后您的电子邮件客户端在接收邮件时依然保存在邮件服务器,同时在客户端上的操作都会反馈到服务器上,如:删除邮件、标记已读、服务器上的邮件也会做出相应的反映动作,所以无论在浏览器登录邮箱还是在客户端登录邮箱看到的邮件的状态都是一致的。
- java发送邮件 用SMTP
- 接收邮件 POP3、IMAP
- java里面发送邮件的类是javamail需要跟springboot整合。
- 邮件传输协议:STMP、POP3和IMAP协议
- 开发java发送邮件步骤:
- 设置开启邮件发送和收取权限
Java代码实现
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置文件 二选一
spring:
mail:
host: smtp.163.com
username: 你的邮箱
password: 密码
spring.mail.host=smtp.163.com
spring.mail.username=你的邮箱
spring.mail.password=密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
3.发送普通的文本信息邮件
@Autowired
private JavaMailSender mailSender;
public void sendSimpleMail() {
//声明一个邮件消息
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//主题
simpleMailMessage.setSubject("我的第一封java邮件");
//设置文本内容
simpleMailMessage.setText("这是我的第一封通过Java发送的邮件");
//邮件从哪里来
simpleMailMessage.setFrom("你的邮箱");
//发到哪去
simpleMailMessage.setTo("[email protected]");
mailSender.send(simpleMailMessage);
}
4.发送Html邮件
@Value("${spring.mail.username}")
private String Sender; //读取配置文件中的参数
private static final String SEND_TO = "你的邮箱";
public void sendHtmlMail() throws MessagingException {
//声明富文本消息
MimeMessage message = mailSender.createMimeMessage();
//创建富文本消息helper
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(Sender);
messageHelper.setTo(SEND_TO);
messageHelper.setSubject("标题:发送Html内容");
StringBuffer sb = new StringBuffer();
sb.append("<h1>大标题-h1</h1>")
.append("<a href='http://www.baidu.com'>http://www.baidu.com</a>")
.append("</br>")
.append("<p style='color:#F00'>红色字</p>")
.append("<p style='text-align:right'>右对齐</p>");
messageHelper.setText(sb.toString(), true);
mailSender.send(message);
}
5.发送带附件的邮件
public void sendAttachmentsMail() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(Sender);
helper.setTo(SEND_TO);
helper.setSubject("主题:带附件的邮件");
helper.setText("带附件的邮件内容"); //#这里必须要填内容,不然会报错
FileSystemResource file = new FileSystemResource("D:\\Data\\Pictures\\2.jpg");
helper.addAttachment("图片.jpg", file);
mailSender.send(message);
}
6.发送带静态资源的邮件
public void sendInlineMail() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(Sender);
helper.setTo(SEND_TO);
helper.setSubject("主题:带静态资源的邮件");
//第二个参数指定发送的是HTML格式,同时cid:是固定的写法
helper.setText("<html><body>带静态资源的邮件内容 图片:<img src='cid:picture' /></body></html>", true);
FileSystemResource file = new FileSystemResource("D:\\Data\\Pictures\\2.jpg");
helper.addInline("picture", file);
mailSender.send(message);
}
7.发送thymeleaf模板邮件
@Autowired
private TemplateEngine templateEngine;
public void sendTemplateMail() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(Sender);
helper.setTo(SEND_TO);
helper.setSubject("主题:thymeleaf模板邮件");
Context context = new Context();
context.setVariable("username", "Manaphy");
//要在templates目录中放入thymeleaf.html文件
String info = templateEngine.process("thymeleaf", context);
helper.setText(info, true);
mailSender.send(message);
}
8.发送freemarker模板邮件
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
public void sendTemplateMail2() throws Exception {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(Sender);
helper.setTo(SEND_TO);
helper.setSubject("主题:freemarker模板邮件");
Map<String, Object> model = new HashMap<>();
model.put("username", "Manaphy");
Template template = freeMarkerConfigurer.getConfiguration().getTemplate("freemarker.html");
String info = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
helper.setText(info, true);
mailSender.send(message);
}