spring boot 邮件发送基础详解(4种邮件超级详细)

本文将介绍spring boot邮件发送
将介绍以下几个方面:

  1. 邮件使用场景
  2. 邮件发送原理
  3. 邮件发送流程
  4. 邮件发送步骤

1. 邮件发送使用场景:

  • 注册验证 注册各种账户
  • 网站营销 给邮件发送邮件广告
  • 身份安全验证 验证你的身份修改密码
  • 提醒 监控告警
  • 工作邮件

2. 邮件发送原理:

  • 邮件传输协议: SMTP协议和POP3协议
    SMTP协议:
    简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准。
    SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
    POP3协议
    POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

后来又出现了:

  • IMAP协议(对Pop3协议的补充)和Mime协议

3. 邮件发送流程:

image.png

4. 邮件发送实战步骤:

  • 第一步首先是创建一个简单的spring boot项目,你可以到官网spring boot去生成一个简单的项目,然后用IDEA开发工具导入,也可以直接在IDEA中新建一个spring boot项目.

这里以QQ邮箱为例子进行简单的邮件发送:

  • 在pom.xml中引入依赖:
<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency> 
  • 在application.yml中配置邮箱参数:
spring:
      mail:
        host: smtp.qq.com
        username: xxx@qq.com  #发送方的邮箱
        password: xxxxxxxxxx  # 设置密码,该处的密码是发送方QQ邮箱开启SMTP的授权码而非QQ密码 

那么如何开启QQ邮箱的授权码呢?

  • 打开QQ邮箱,设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-->打开下图我标出的服务:


    开启授权码
  • 创建一个类SendEmailService :
@Service
public class SendEmailService {
    @Autowired
    JavaMailSender jms;

    public String send(String sender,String receiver,String title,String text){
        //建立邮件消息
        SimpleMailMessage mainMessage = new SimpleMailMessage();
        //发送方
        mainMessage.setFrom(sender);
        //接收方
        mainMessage.setTo(receiver);
        //发送的标题
        mainMessage.setSubject(title);
        //发送的内容
        mainMessage.setText(text);
        jms.send(mainMessage);
        return "success";
    }
}

然后创建一个controller:

@RestController
public class mail {
    @Autowired
    private SendEmailService sendEmailService;

    @GetMapping("/send")
    public String send(){

        String sender="846973430@qq.com";   //这个是发送人的邮箱
        String receiver="943088439@qq.com";  //这个是接受人的邮箱
        String title="66万漏油奔驰";    //标题
        String text="【坐在引擎盖上哭】“ 66万买辆奔驰,还没开出店门就漏油,请问这种车去哪里买呢,我也想要一辆。";

        String result=sendEmailService.send(sender, receiver, title, text);
        return result;
    }
}

这样,一个简单的邮件发送步骤就结束了,现在启动项目服务,运行代码,检测是否成功!
成功截图:

success

通知
邮件详情

可以看出,已经成功了,是不是很简单!

发送html模板邮件:

同样,我们在刚才的SendEmailService下再写一个发送html的方法:

public String sendHtml(String sender,String receiver,String subject, String content) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        jms.send(message);
        return "sendHtml success";
    }

然后在刚才的controller中进行测试:

/**
     * HTML邮件发送
     * @return
     */
    @RequestMapping("/htmlEmail")
    public String sendHtml() throws MessagingException {
        String content = "<html>\n"+
                "<body>\n"+
                "<h2>这是一封有历史意义的HTML邮件,请注意查收!!!</h2>\n"+
                "</body>\n"+
                "</html>";
        String html = sendEmailService.sendHtml(sender,receiver,title,content);
        return html;
        }

开启tomcat服务,输入http://localhost:8080/htmlEmail,结果为:

success

邮件弹出的通知:


通知

邮件内容:


i内容

含有附件的邮件发送:

同样,我们在刚才的SendEmailService下再写一个发送含有附件邮件的方法:

/**
     * 发送含有附件的邮件
     * @param sender
     * @param receiver
     * @param subject
     * @param content
     * @param filePath
     * @return
     * @throws MessagingException
     */
    public String sendAttachment(String sender,String receiver,String subject, String content, String filePath) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        //邮件的附件
        FileSystemResource file = new FileSystemResource(new File(filePath));
        //获取附件的文件名
        String fileName = file.getFilename();
        helper.addAttachment(fileName,file);
        jms.send(message);
        return "sendAttachment success";
    }

然后在刚才的controller中进行测试:

/**
     * 含有附件的邮件发送
     * @return
     * @throws MessagingException
     */
    @RequestMapping("/attachment")
    public String sendAttachment() throws MessagingException {
        String filePath = "E:\\IDEA使用方法\\yml知识.txt";
        String content = "我的这封邮件可是很厉害的,因为它可以带附件呦!!!";
        String attachment = sendEmailService.sendAttachment(sender,receiver,title,content,filePath);
        return attachment;
    }

结果:

邮件通知

邮件内容:


内容

含有图片的邮件发送:

同样,我们在刚才的SendEmailService下再写一个发送含有图片邮件的方法:

 /**
     * 含有图片的邮件
     * @param sender
     * @param receiver
     * @param subject
     * @param content
     * @param picPath
     * @param picId
     * @return
     * @throws MessagingException
     */
    public String sendPicture(String sender,String receiver,String subject, String content,
                              String picPath,String picId) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        //邮件的图片
        FileSystemResource file = new FileSystemResource(new File(picPath));
        helper.addInline(picId,file);
        jms.send(message);
        return "sendPicture success";
    }

然后在刚才的controller中进行测试:

/**
     * 含有图片的邮件
     * @return
     * @throws MessagingException
     */
    @RequestMapping("/picture")
    public String sendPicture() throws MessagingException {
        String picPath = "C:\\Users\\asus\\Downloads\\壁纸\\全军.jpg";
        String picId = "PIC001";
        String content = "<html><body>我的这封邮件可是很厉害的,因为它可以显示图片呦!!!\n" +
                "<img src=\'cid:"+picId+"\'></img></body></html>";
        String picture = sendEmailService.sendPicture(sender,receiver,title,content,picPath,picId);
        return picture;
    }

成功:


图片邮件通知

邮件内容:


内容

怎么样,喜欢的话,麻烦帅哥们点个赞可以吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容