javaEmail发送邮件

效果如下:
javaEmail发送邮件_第1张图片
javaEmail发送邮件_第2张图片

一.电子邮件协议:

SMTP 简单邮件传输
SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议。该协议定义了邮件客户端软件和SMTP服务器之间,以及两台SMTP服务器之间的通信规则。在Java Mail API中,基于Java Mail的程序将与本公司或Internet服务提供商(ISP)的SMTP服务器通信,该SMTP服务器将会把消息转发给用于接收消息的SMTP服务器,最后用户可通过POP或IMAP协议获取该消息。由于支持身份验证,所以不需要SMTP服务器是一种开放的转发器,但需要确保SMTP服务器配置正确。Java Mail API中没有集成用于处理配置服务器以转发消息或添加/删除电子邮件账户等功能。

POP3邮局协议
POP3是Post Office Protocol 3的简称,即邮局协议第3版,该协议是在RFC 1939中定义的。它是Internet电子邮件的第一个离线协议标准,也就是说,POP3是一个简单而实用的邮件信息传输协议。目前在Internet上,大多数人都采用POP3来接收邮件。POP3为每个用户的每个邮箱提供支持,但是POP3并不支持查看邮件信息及统计新邮件的功能,因此,在使用Java Mail API时,如果想获取这些信息,需要自己进行计算。

IMAP 接收邮件协议
IMA P的含义是Internet消息访问协议,当前版本是第4版,也称作IMAP4,该协议是在RFC 2060中定义的。IMAP是接收消息的更加高级协议。使用IMAP时,所用邮件服务器必须支持该协议,但是如果所有邮件服务器只支持该协议,并不能使用全部IMAP协议,为了能够支持全部IMAP协议,所用邮件服务器还应该支持POP协议。在Java Mail程序通过IMAP协议可以在服务器上拥有包括多个文件夹的用户,并且这些文件夹可以被多个用户共享。
虽然IMAP协议具有更高级的功能,但是也不要让每个用户都使用,这是因为IMAP需要服务器接收新消息,发送消息给请求的用户,并在多个文件夹中为每个用户维护消息、备份信息,这会加重邮件服务器的负荷。

MIME
MIME是多用途的网际邮件扩充协议的简称。它不是一种邮件传输协议,而是用于定义传输内容(如消息的格式、附件等)的协议。许多文档都对MIME协议作了描述(包括RFC 2045、RFC 2046和RFC 2047)。MIME是对RFC 822的扩充,RFC 822规定了内容只包括采用ASCII编码的纯文本的邮件格式,而MIME允许在邮件中包含附件。作为Java Mail API的用户,一般不需要担心这些格式。

二.采用pop3发送邮件

1.创建springboot项目,目录结构如下
javaEmail发送邮件_第3张图片
2.配置依赖

    
    
        org.springframework.boot
        spring-boot-starter-thymeleaf
    
    
    
        org.springframework.boot
        spring-boot-devtools
        true
    
    
    
        org.springframework.boot
        spring-boot-starter-mail
    

3.在application.yml进行配置

spring:
  mail:
    #邮件协议smtp
    host: smtp.qq.com
    #发送者的邮件的用户名
    username: [email protected]
    #使用的编码
    default-encoding: utf-8
    #移动端客户授权码(在邮箱中设置)
    password: xxxxxxxxxxx

4.发送邮件,我主要分为简单邮件和带附件的邮件(附件可以是文件和图片,可以多个)

(4.1)新建IEmailService接口,包含简单邮件,和带附件接口
javaEmail发送邮件_第4张图片

(4.2)新建EmailService实现类,实现IEmailService接口。

@Service
public class EmailService implements IEmailService {

//从application.properties配置文件中注入发送者的邮件地址
@Value("${spring.mail.username}")
private String fromEmail;

//注入spring发送邮件的对象
@Autowired
private JavaMailSender javaMailSender;

@Override
public boolean sendAttachmentMail(String to, String subject, String content) {
	SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
	simpleMailMessage.setTo(to);
	simpleMailMessage.setFrom(fromEmail);
	simpleMailMessage.setSubject(subject);
	simpleMailMessage.setText(content);	
	try {
		javaMailSender.send(simpleMailMessage);  		//执行发送
	} catch (Exception e) {
		return false;
	}
	return true;
}

@Override
public boolean sendAttachmentMail(String to, String subject, String content, List filepath) {
	MimeMessage mimeMessage = javaMailSender.createMimeMessage();
	try {
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
		helper.setTo(to);
		helper.setSubject(subject);
		helper.setText(content);
		helper.setFrom(fromEmail);
		if(filepath.size()>0){						//读取附件文件(传入文件路径)
			for (Object string : filepath) {		//遍历文件数组,实现多个附件的添加
				FileSystemResource file = new FileSystemResource(string.toString());
				String fileName = file.getFilename();//获取文件名
				helper.addAttachment(fileName, file);//参数:文件名,文件路径
			}
			try {
				javaMailSender.send(mimeMessage);		//发送邮件
			} catch (Exception e) {
				return false;						//发送出现异常(或者文件路径不对)
			}
			return true;							//成功发送
		}else {
			return false;    						//没有附件文件(中断发送)
		}
	} catch (MessagingException e) {
		e.printStackTrace();
		//捕获到创建MimeMessageHelper的异常
//			return false;
		}
		return true;
	}

}

5.在发送带附件邮件的时候,需要先把附件传到服务器,不过我没有服务器,就先把附件传到本地项目的静态资源file文件里。

(5.1)在util新建FileUtil类,处理文件上传。如下:
javaEmail发送邮件_第5张图片
6.接下来写前台界面

(6.1)经过不懈努力终于写完了

(6.3)效果如下:
javaEmail发送邮件_第6张图片
附上项目源码:https://github.com/luo205499/javaemaildemo

你可能感兴趣的:(学习笔记,教程,java)