邮件协议有哪些?
常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。
SMTP协议
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。-百度百科
参考:https://baike.baidu.com/item/SMTP/175887?fromtitle=SMTP%E5%8D%8F%E8%AE%AE&fromid=421587
POP3协议
POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
参考:https://baike.baidu.com/item/POP3/175122
IMAP4 协议
IMAP4(Internet Message Access Protocol 4) 即 交互式数据消息访问协议第四个版本。IMAP协议是由斯坦福大学的Mark Crispin教授在1986年开发的,后期版本是华盛顿州立大学进行开发的,IMAP4是TCP/IP协议族中的一员,现在的版本是“IMAP第四版第一次修订版”(IMAP4rev1)。
邮件配置(基于163)
需要在163授权密码,这个密码是以下email.password
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
源码实现
项目目录
email.properties
email.smtp=smtp.163.com
email.username=besthong999@163.com
email.to=718231657@qq.com
email.password=xxx
com.hong.email.AppConfig
package com.hong.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@Configuration
@ComponentScan(basePackages = { "com.hong.email" })
@PropertySource(value = "classpath:email.properties",ignoreResourceNotFound = false)
public class AppConfig {
@Autowired
private Environment environment;
public static String FROM ;
public static String TO;
public static String SUBJECT = "Spring Email Test";
public static String TEXT = "Hello i am hong";
public static String FILE_PATH = "spring_email/image/test.png";
/**
* 配置邮件发送器
* @return
*/
@Bean
public MailSender mailSender() {
FROM= environment.getProperty("email.username");
TO= environment.getProperty("email.to");
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(environment.getProperty("email.smtp"));//指定用来发送Email的邮件服务器主机名
mailSender.setPort(25);//默认端口,标准的SMTP端口
mailSender.setUsername(environment.getProperty("email.username"));//用户名
mailSender.setPassword(environment.getProperty("email.password"));//密码
return mailSender;
}
}
com.hong.email.SpringMailTest
package com.hong.email;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
*
* 功能描述:邮件测试
*
* @param:
* @return:
* @auther: csh
* @date: 2020/11/3 18:15
*/
@RunWith(SpringJUnit4ClassRunner.class)
@PropertySource("email.properties")
@ContextConfiguration(classes = { AppConfig.class })
public class SpringMailTest extends AppConfig{
@Autowired
private JavaMailSender mailSender;
/**
* 发送文本邮件
*/
@Test
public void sendSimpleEmail() {
SimpleMailMessage message = new SimpleMailMessage();// 消息构造器
message.setFrom(FROM);// 发件人
message.setTo(TO);// 收件人
message.setSubject(SUBJECT);// 主题
message.setText(TEXT);// 正文
mailSender.send(message);
System.out.println("邮件发送完毕");
}
/**
* 发送带有附件的email
*
* @throws MessagingException
*/
@Test
public void sendEmailWithAttachment() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(FROM);// 发件人
helper.setTo(TO);// 收件人
helper.setSubject(SUBJECT);// 主题
helper.setText(TEXT);// 正文
// 添加附件
FileSystemResource image = new FileSystemResource(new File(FILE_PATH));
System.out.println(image.exists());
// 添加附加,第一个参数为添加到Email中附件的名称,第二个人参数是图片资源
helper.addAttachment("test.png", image);
mailSender.send(message);
System.out.println("邮件发送完毕");
}
/**
* 发送富文本内容的Email
*
* @throws MessagingException
*/
@Test
public void sendRichEmail() throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(FROM);// 发件人
helper.setTo(TO);// 收件人
helper.setSubject(SUBJECT);// 主题
helper.setText("<html><body><h4>Hello hong!</h4>"
+ "Welcome to <a href='https://www.baidu.com'>baidu!</a></body></html>", true);
// 添加附件
FileSystemResource image = new FileSystemResource(new File(FILE_PATH));
System.out.println(image.exists());
// 添加附加,第一个参数为添加到Email中附件的名称,第二个人参数是图片资源
helper.addAttachment("test.png", image);
mailSender.send(message);
System.out.println("邮件发送完毕");
}
}
结果:
文本文件
附件测试
带a标签
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
最后
spring很好的整合了email的相关协议,并且提供的api也很容易上手,可以在这个基础上完善自己发送邮件的功能或后台,如有疑问可以留言讨论或私聊。
参考文章:
https://www.jianshu.com/p/13b3d22dfdac
https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#mail