赞
踩
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。JavaMail是由Sun定义的一套收发电子邮件的API,它可以方便地执行一些常用的邮件传输,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。
厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:
- SMTP:单间邮件传输协议,用于发送电子邮件的传输协议
- POP3:用于接受电子邮件的标准协议
- IMAP:互联网消息协议,是POP3的替代协议
这三种协议都有对应SSL加密传输协议,分别是SMTPS,POP3S和IMAPS。除JavaMail服务提供程序之外,JavaMail还需要JAF(JavaBeans Activation Framework)来处理不是纯文本的邮件内容,这包括MIME(多用途互联网邮件扩张)、URL页面和文件附件等内容。
由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多注入服务器地址、端口、用户名、密码等信息,JavaMail通过Properties对象封装这些属性对象
Session是一个很容易被误解的类,这归咎于混淆视听的类名。千万不要以为这里的Session像HttpSession一样代表真实的交互会话,但创建Session对象时,并没有对应的物理连接,它只不过是一对配置信息的集合。
Session的主要作用,包括两方面:
邮件操作只有发送或接受两种处理方式,JavaMail将这两种操作描述为传输(javax.mail.Transport)和存储(javax.mail.Store),传输对应邮件的发送,而存储对应邮件的接口。
一旦获得Session对象,就可以继续创建要发送的消息。这由Message类来完成。因为Message是个抽象类,您必须用一个子类,多数情况为javax.mail.internet.MimeMessage。MimeMessage是个能理解MIME类型和头的电子邮件消息。
一旦你创建了Session和Message,并将内容填入消息后,就可以用Address确定信件地址了。和Messege一样,Address也是个抽象类。你用的是javax.mail.internet.InternetAddress类。
与java类一样,JavaMail API也可以利用Authenticator通过用户名和密码访问受保护的资源。对于含电子邮件地址,只要传递电子邮件地址到构造器就行了。与java类一样,JavaMail API也可以利用Authenticator通过用户名和密码访问受保护的资源。对于JavaMail API来说,这些资源就是邮件服务器。JavaMail Authenticator在javax.mail包中,而且它和java.net中同名的类Authenticator不同。两者并不共享同一个Tuthenticator,因为JavaMail API用于Java 1.1,它没有java.net类别。要使用Authenticator,先创建一个抽象类的子类,并从getPasswordAuthentication()方法中返回PasswordAuthentication 实例。创建完成后,您必需向session注册 Authenticator。然后,在需要认证的时候,就会通知Authenticator。您可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,将它们作为PasswordAuthentication对象返回给调用程序。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring: mail: host: smtp.163.com port: 465 username: xxxxxxxxxxx@163.com password: 不是邮箱密码 授权码 protocol: smtps properties: mail: debug: true smtp: from: xxxxxxxx@163.com #默认发送者邮箱 ssl: enabled: true socketFactory: fallback: false class: javax.net.ssl.SSLSocketFactory auth: true starttls: enabled: true required: true default-encoding: utf-8
@Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String from; /** * 发送纯文本邮件. * * @param to 目标email 地址 * @param subject 邮件主题 * @param text 纯文本内容 */ public void sendMail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); //如有配置 可不填 message.setFrom(from); message.setTo(to); message.setSubject(subject); message.setText(text); javaMailSender.send(message); }
@Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String from; /** * 发送附件邮件. * * @param to 目标email 地址 * @param subject 邮件主题 * @param text 纯文本内容 * @param filePath 附件的路径 当然你可以改写传入文件 */ public void sendAttachMail(String to, String subject, String text, String filePath) throws javax.mail.MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true, StandardCharsets.UTF_8.name()); helper.setTo(to); helper.setFrom(from); helper.setSubject(subject); //是否以html格式解析 helper.setText(text, true); Path path = Paths.get(filePath); if(Files.exists(path)){ helper.addAttachment(path.getFileName().toString(),new FileSystemResource(path.toFile())); } javaMailSender.send(mimeMessage); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。