基于springBoot框架的发邮件项目

日常项目开发中需要做一个发送邮件的服务,供一些系统调用发送一些通知类的邮件。了解完需求之后,便着手使用springBoot框架构建整个项目,详细项目代码如下:

1)构建项目结构,如下图:

2)构建springboot项目,引入相关涉及到的jar包

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

3)根据需求(发送邮件需要收件人地址,邮件主题,邮件正文,发件人地址,发件人密码五个参数)封装实体对象

@Data
public class MailBean implements Serializable {
    /**
     * 发送地址,可以是多个,逗号分隔
     */
    private  String [] toAddressList;
    /**
     * 发送邮箱用户
     */
    private  String userName;
    /**
     * 发送邮箱用户密码
     */
    private  String password;
    /**
     * 邮件主题
     */
    private  String subject;
    /**
     * 邮件内容
     */
    private  String content;
}

4)定义实现的接口方法

public interface MailService {
    /**
     * 发送普通格式邮件
     * @param mailBean
     */
    public boolean sendSimpleMail(MailBean mailBean);

    /**
     * 发送HTML格式邮件
     * @param mailBean
     */
    public boolean sendHtmlMail(MailBean mailBean);
}

5)然后就是接口的具体实现。具体实现代码如下,实现步骤注释都有详细说明

@Service
@Slf4j
public class MailServiceImpl implements MailService {
    @Value("${spring.mail.host}")
    private String host;

    @Value("${spring.mail.port}")
    private int port;

    /**
     * 校验用户名和密码
     * @param mailBean
     * @return
     */
    private JavaMailSenderImpl checkUsernameAndPwd(MailBean mailBean){
        JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
        senderImpl.setHost(host);
        senderImpl.setPort(port);
        senderImpl.setUsername(mailBean.getUserName());
        senderImpl.setPassword(mailBean.getPassword());
        Properties prop = new Properties();
        prop.put(" mail.smtp.auth ", " true ");
        prop.put(" mail.smtp.timeout ", " 25000 ");
        senderImpl.setJavaMailProperties(prop);
        return senderImpl;
    }

    /**
     * 发送简单的文本邮件
     * @param mailBean
     */
    @Override
    public boolean sendSimpleMail(MailBean mailBean){
        boolean flag=false;
        log.info("发送邮件开始。相关参数:{}",mailBean.toString());
        try{
            /**
             * 1)调用校验用户名和密码
             */
            JavaMailSenderImpl senderImpl=checkUsernameAndPwd(mailBean);
            /**
             * 2)拼接发送邮件的参数
             */
            SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
            //收件人
            String[] toAddressList = mailBean.getToAddressList();
            simpleMailMessage.setTo(toAddressList);
            //邮件主题
            simpleMailMessage.setSubject(mailBean.getSubject());
            //邮件内容
            simpleMailMessage.setText(mailBean.getContent());
            //发件人
            simpleMailMessage.setFrom(mailBean.getUserName());
            //发送时间
            simpleMailMessage.setSentDate(new Date());
            /**
             * 3)发送邮件
             */
            senderImpl.send(simpleMailMessage);
            flag=true;
            log.info("发送邮件成功!");
        }catch (Exception e){
           log.error("发送邮件失败:{}",e.getMessage());
        }
        return flag;
    }



    /**
     * 发送HTML格式的邮件
     * @param mailBean
     */
    @Override
    public boolean sendHtmlMail(MailBean mailBean){
        boolean flag=false;
        log.info("发送邮件开始。相关参数:{}",mailBean.toString());
        try{
            /**
             * 1)调用校验用户名和密码
             */
            JavaMailSenderImpl senderImpl=checkUsernameAndPwd(mailBean);
            /**
             * 2)拼接发送邮件的参数
             */
            MimeMessage mimeMessage=senderImpl.createMimeMessage();
            MimeMessageHelper mimeMessageHelper=new MimeMessageHelper(mimeMessage,true,"GBK");
            //收件人
            String[] toAddressList = mailBean.getToAddressList();
            mimeMessageHelper.setTo(toAddressList);
            //邮件主题
            mimeMessageHelper.setSubject(mailBean.getSubject());
            //邮件内容
            mimeMessageHelper.setText(mailBean.getContent(),true);
            //发件人
            mimeMessageHelper.setFrom(mailBean.getUserName());
            //发送时间
            mimeMessageHelper.setSentDate(new Date());
            /**
             * 3)发送邮件
             */
            senderImpl.send(mimeMessage);
            flag=true;
            log.info("发送邮件成功!");
        }catch (Exception e){
            log.error("发送邮件失败:{}",e.getMessage());
        }
        return flag;
    }
}

核心逻辑就是前端通过传参,获取到发件人的用户名和密码,校验用户名和密码件是否可以成功登陆邮件服务器;然后通过【SimpleMailMessage】或者【MimeMessageHelper】封装邮件的发送实体,最后调用发送邮件的方法即可

6)因为是作为一个供其他程序调用的服务,所以需要提供访问的路径,提供action

@Controller
@RequestMapping("/mail")
public class SendMailMainAction {

    @Autowired
    private MailServiceImpl mailServiceImpl;

    /**
     * 对前端发送邮件的参数做实体封装
     * @param toAddressList
     * @param userName
     * @param password
     * @param subject
     * @param content
     * @return
     */
    private MailBean getMailBean(String [] toAddressList,String userName,String password,String subject,String content){
        MailBean mailBean=new MailBean();
        mailBean.setToAddressList(toAddressList);
        mailBean.setUserName(userName);
        mailBean.setPassword(password);
        mailBean.setSubject(subject);
        mailBean.setContent(content);
        return mailBean;
    }

    /**
     * 发送普通邮件
     * @return
     */
    @RequestMapping(value = "/sendTextMail",method = {RequestMethod.POST})
    @ResponseBody
    public CommonReturnType sendTextMail(@RequestParam(name="toAddressList")String [] toAddressList ,@RequestParam(name="userName")String userName,
                                         @RequestParam(name="password")String password,@RequestParam(name="subject")String subject,
                                         @RequestParam(name="content")String content)  {
        CommonReturnType commonReturnType=null;
        if (toAddressList.length==0 || StringUtils.isEmpty(userName) ||StringUtils.isEmpty(password) || StringUtils.isEmpty(subject) || StringUtils.isEmpty(content)){
            commonReturnType=CommonReturnType.create("调用参数不能为空(必传参数:收件人,发件人,密码,主题,正文五个参数)","false");
        }else{
            /**
             * 1)根据传参获取封装的实体
             */
            MailBean mailBean= getMailBean(toAddressList,userName,password,subject,content);
            /**
             * 2)调用底层发送邮件的方法
             */
            boolean flag =mailServiceImpl.sendSimpleMail(mailBean);
            if (flag){
                commonReturnType=CommonReturnType.create("邮件发送成功!","success");
            }else{
                commonReturnType=CommonReturnType.create("邮件发送失败!","false");
            }
        }
        return commonReturnType;
    }


    /**
     * 发送HTML格式的邮件
     * @return
     */
    @RequestMapping(value = "/sendHtmlMail",method = {RequestMethod.POST})
    @ResponseBody
    public CommonReturnType sendHtmlMail(@RequestParam(name="toAddressList")String [] toAddressList ,@RequestParam(name="userName")String userName,
                                         @RequestParam(name="password")String password,@RequestParam(name="subject")String subject,
                                         @RequestParam(name="content")String content)  {
        CommonReturnType commonReturnType=null;
        if (toAddressList.length==0 || StringUtils.isEmpty(userName) ||StringUtils.isEmpty(password) || StringUtils.isEmpty(subject) || StringUtils.isEmpty(content)){
            commonReturnType=CommonReturnType.create("调用参数不能为空(必传参数:收件人,发件人,密码,主题,正文五个参数)","false");
        }else{
            /**
             * 1)根据传参获取封装的实体
             */
            MailBean mailBean= getMailBean(toAddressList,userName,password,subject,content);
            /**
             * 2)调用底层发送邮件的方法
             */
            boolean flag =mailServiceImpl.sendHtmlMail(mailBean);
            if (flag){
                commonReturnType=CommonReturnType.create("邮件发送成功!","success");
            }else{
                commonReturnType=CommonReturnType.create("邮件发送失败!","false");
            }
        }
        return commonReturnType;
    }
}

7)程序基本完成,下面用postman测试一下

程序完成

完整项目代码详见:https://download.csdn.net/download/weixin_36898373/16267783

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值