基于SpringBoot的邮件回复与邮件提醒系统

本系统的基本功能

在管理端对用户进行邮件回复。
系统使用邮件提醒管理员

使用场景

我的个人博客系统半个月前,有人评论求助,但是我直到最近才登陆后台。然后邮件回复了该用户。
于是我抽空对博客进行了一次升级。

实现思路

回复用户没什么说的,直接发送邮件就行了。关键是邮件提醒管理员。最开始我的思路很简单,只要用户评论就触发邮件系统。这在用户量少的时候没有什么影响的。我又进行了后续的升级。大概就是有一个全局变量,只要有人评论,该变量加一,然后使用spring的定时任务,每天检查一次变量,只要变量大于一。激活邮件系统,该变量置为0。我选择了最简单的实现方法,使用数据库。

邮件发送工具类

本邮件系统基于QQ邮箱

package com.wip.utils;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

public class SendQMail {
    //私聊  qq 给 其他邮箱发
    public static boolean sendMail(String Mail,String emailMsg) throws AddressException, MessagingException  {
        final String serverHost = "smtp.qq.com";                       //发送方邮件服务器
       
        final String from = "***********";  //发件人地址
       
        final String shouqunma = "*****邮件授权码******";
        Properties properties = new Properties();
        properties.put("mail.smtp.host", serverHost);
        properties.put("mail.smtp.auth", "true");//true 一定要用引号引起来
        properties.put("mail.transport.protocol", "smtp");
        properties.put("mail.smtp.port", "465"); //因为QQ邮箱的端口和人家的不一样,所以要指定
        //设置安全提供者
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", "false");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getDefaultInstance(properties); //不使用Auth命令认证
        session.setDebug(true);
        //创建并设置消息内容
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(from));
        msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(Mail));
        Transport transport = session.getTransport("smtp");
        msg.setSubject("PreferBlog"); // 设置邮件主题
        String fen= "\n-----------------正文部分-----------------\n";
        msg.setText("非常感谢您对本博客的支持,回复不及时请见谅"+fen+emailMsg+"\n-----------------个人网站推广-----------------\npd导航(preferdoor.top/nav)\n发送时间: "+new Date().toString());
        transport.connect(serverHost,from, shouqunma ); //发送主机服务器,账号,授权码,例如:(QQ:qwuhxadj,163:自己设置)
        transport.sendMessage(msg,msg.getAllRecipients());

        transport.close();
        return true;
    }

    public static boolean msgMail(String Mail,String emailMsg) throws AddressException, MessagingException  {
        final String serverHost = "smtp.qq.com";                       //发送方邮件服务器
        final String from = "***********";  //发件人地址
       
        final String shouqunma = "*****邮件授权码******";
        Properties properties = new Properties();
        properties.put("mail.smtp.host", serverHost);
        properties.put("mail.smtp.auth", "true");//true 一定要用引号引起来
        properties.put("mail.transport.protocol", "smtp");
        properties.put("mail.smtp.port", "465"); //因为QQ邮箱的端口和人家的不一样,所以要指定
        //设置安全提供者
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", "false");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getDefaultInstance(properties); //不使用Auth命令认证
        session.setDebug(true);
        //创建并设置消息内容
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(from));
        msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(Mail));
        Transport transport = session.getTransport("smtp");
        msg.setSubject("PreferBlog用户评论"); // 设置邮件主题
        msg.setText("有用户评论你了\n"+emailMsg+"\n赶紧上线处理,抓紧时间回复哦");
        transport.connect(serverHost,from, shouqunma ); //发送主机服务器,账号,授权码,例如:(QQ:qwuhxadj,163:自己设置)
        transport.sendMessage(msg,msg.getAllRecipients());

        transport.close();
        return true;
    }
}

定时工具类

因为我这里使用了数据库所以有toMailService。 @Scheduled(cron = “0 59 13 * * ?”)这个的意思是每天13点59分定时启动。

package com.wip.utils;

import com.wip.model.ToMailDomain;
import com.wip.service.nav.ToMailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

@Component
public class MailTask {

    @Autowired
    private ToMailService toMailService;

    private Logger logger = LoggerFactory.getLogger(getClass());
    private int i;

    @Scheduled(cron = "0 59 13 * * ?")
    public void execute() {
        logger.info("thread id:{},FixedPrintTask execute times:{}", Thread.currentThread().getId(), ++i);
        ToMailDomain toMailDomain = toMailService.queryNumber("1975781737@qq.com");
        int number = toMailDomain.getNumber();
        try {
            if(number>0){
                String msg = "当前有"+number+"位用户评论了您的博客";
                SendQMail.msgMail("1975781737@qq.com",msg);
                toMailDomain.setNumber(0);
                toMailService.updateNumber(toMailDomain);
            }
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

}

用户评论时自动加一

ToMailDomain toMailDomain = toMailService.queryNumber("1975781737@qq.com");
int number = toMailDomain.getNumber();
number++;
toMailDomain.setNumber(number);
toMailService.updateNumber(toMailDomain);

在SpringBoot启动类里加上注解

@EnableCaching // 启用缓存功能
@EnableScheduling // 开启定时任务功能
@SpringBootApplication
@MapperScan("com.wip.dao")
//@EnableCaching
public class MyBlogApplication {

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值