前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring使用e-mail

spring使用e-mail

作者头像
逍遥壮士
发布2020-11-09 15:37:45
7720
发布2020-11-09 15:37:45
举报
文章被收录于专栏:技术趋势技术趋势

邮件协议有哪些?

常用的电子邮件协议有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

代码语言:javascript
复制
email.smtp=smtp.163.com
email.username=besthong999@163.com
email.to=718231657@qq.com
email.password=xxx

com.hong.email.AppConfig

代码语言:javascript
复制
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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档