云e办(后端)——邮件发送(员工入职时发送邮件)

云e办(后端)——邮件发送(员工入职时发送邮件)

邮件服务的业务逻辑:
例如:新员工入职时,会填写个人信息。当添加成功后,系统会给该员工发送一封欢迎邮件。包含:工号、职称、职位等信息。

一、前提准备:开通smtp

MAP是什么?

IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议

我是通过网易邮箱进行注册办理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、在yeb-project中搭建邮件项目:

1、创建module

在这里插入图片描述
在这里插入图片描述

2.创建springboot Application
package com.xxxx.mail;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MailApplication {
    public static void main(String[] args) {
        SpringApplication.run(MailApplication.class,args);
    }
}

3、yml文件

在main下创建resources /conf/application.yml

server:
  # 端口
  port: 8082
spring:
  # 邮件配置
  mail:
    # 邮件服务器地址
    host: smtp.163.com
    # 协议
    protocol: smtp
    # 编码格式
    default-encoding: utf-8
    # 授权码(在邮箱开通服务时获取)
    password: meqxqfgkoowh*agd
    # 发送者邮箱地址
    username: 
    # 端口(不同邮箱端口号不同)
    port: 22
      # rabbitmq配置
      rabbitmq:
        # 用户名
        username: guest
        # 密码
        password: guest
        # 服务器地址
        host:  
        # 端口
        port: 5672

4、邮件模板:resources/templates/mail.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.theymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>入职欢迎邮件</title>
</head>
<body>
欢迎 <span th:text="${name}"></span> 加入 XXXX 大家庭,您的入职信息如下:

<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${name}"></td>
    </tr>
    <tr>
        <td>职位</td>
        <td th:text="${posName}"></td>
    </tr>
    <tr>
        <td>职称</td>
        <td th:text="${joblevelName}"></td>
    </tr>
    <tr>
        <td>部门</td>
        <td th:text="${departmentName}"></td>
    </tr>
</table>

<p>我们公司的工作忠旨是严格,创新,诚信,您的加入将为我们带来新鲜的血液,带来创新的思维,以及为
    我们树立良好的公司形象!希望在以后的工作中我们能够齐心协力,与时俱进,团结协作!同时也祝您在本公
    司,工作愉快,实现自己的人生价值!希望在未来的日子里,携手共进!</p>
</body>
</html>


三、yeb-server邮件发送的功能:

1、yeb-server添加依赖 / 修改配置文件
    <!--rabbitmq 依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
---
spring:
  # rabbitmq配置
 rabbitmq:
    # 用户名
   username: guest
    # 密码
   password: guest
    # 服务器地址
   host: 192.168.10.100
    # 端口
   port: 5672

2、添加员工成功后,发送邮件:
package com.xxxx.server.service.impl;

 /**
     * 添加员工
     * @param employee
     * @return
     */
    @Override
    public RespBean insertEmployee(Employee employee) {
        //处理合同期限,保留2位小数
        //获取合同开始的时间
        LocalDate beginContract = employee.getBeginContract();
        //获取合同结束的时间
        LocalDate endContract = employee.getEndContract();
        //计算有多少天
        long days = beginContract.until(endContract, ChronoUnit.DAYS);
        // 将天数保留两位小数点
        DecimalFormat decimalFormat = new DecimalFormat("##.00");
        employee.setContractTerm(Double.parseDouble(decimalFormat.format(days/365.00)));
     //判断 数据是否添加成功
        if (1==employeeMapper.insert(employee)) {
            /**
             * 添加数据成功后,获取新增用户的完整信息:
             *      getEmployee.getId() 根据刚新增的id号,进行查询该用户的所有信息
             *          getEmployee这个方法是“分批导出”时遗留的:根据Id可以导入,List<Employee> getEmployee(Integer id);
             *              mapperxml:<if test="null!=id">AND e.id = #{id}</if>
     *       *      虽然查询后只有一条数据,但是由于返回的是List列表形式,所以得需要 .get(0)
             */

        
  		   //2.发送消息(路由key,emp:新插入这个人的用户信息)
            rabbitTemplate.convertAndSend("mail.welcome",emp);
            return RespBean.success("添加成功!");
        }
        return RespBean.error("添加失败!");
    }

四、yeb-serve将用户信息发给yeb-mail,yeb-mail负责发送邮件功能

1、消息接收者,然后发送邮件
 package com.xxxx.mail;

import com.xxxx.server.pojo.Employee;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Date;

/**
 * 消息接收者
 *
 */
//component 被spring容器进行管理
@Component
public class MailReceiver {
    //logger进行打印日志
    private static final Logger LOGGER = LoggerFactory.getLogger(MailReceiver.class);

    @Autowired
    private JavaMailSender javaMailSender;
    // 邮件配置
    @Autowired
    private MailProperties mailProperties;
    //模板 引擎---->//templateEngine会从下面的context拿相应的数据。(从context拿到相应内容,放到mail)
    // 从而前端会拿到相应的数据。
    @Autowired
    private TemplateEngine templateEngine;

    /**
     * 接收发送命令:
     * 邮件发送
     */
    // 有了这个RabbitListener注解后,会根据路由,会将接收到发送端的消息“给该用户发送邮件的信息”
    //employee就是需要发送邮件的信息
    @RabbitListener(queues = "mail.welcome")
    public void handler(Employee employee){
        //创建消息
        MimeMessage msg = javaMailSender.createMimeMessage();
        System.out.println("创建消息:====》"+msg);

        //
        MimeMessageHelper helper = new MimeMessageHelper(msg);
        try {
            //发件人
            helper.setFrom(mailProperties.getUsername());
            //收件人
            helper.setTo(employee.getEmail());
            //主题
            helper.setSubject("入职欢迎邮件");
            //发送日期
            helper.setSentDate(new Date());
            //邮件内容
            Context context= new Context();
            context.setVariable("name",employee.getName());
            context.setVariable("posName",employee.getPosition().getName());
            context.setVariable("joblevelName",employee.getJoblevel().getName());
            context.setVariable("departmentName",employee.getDepartment().getName());
            //templateEngine会从context拿相应的数据。(从context拿到相应内容,放到mail)
            String mail = templateEngine.process("mail", context);
            helper.setText(mail,true);

            //发送邮件
            javaMailSender.send(msg);
        } catch (MessagingException e) {
            LOGGER.error("邮件发送失败=====>{}", e.getMessage());
        }
    }
}


在这里插入图片描述

2、启动类:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MailApplication {
    public static void main(String[] args) {
        SpringApplication.run(MailApplication.class,args);
    }

    @Bean
    public Queue queue(){
        return new Queue("mail.welcome");
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真真最可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值