美文网首页
使用java程序模拟本地发送邮件+案例:服务器自动发送生日祝福

使用java程序模拟本地发送邮件+案例:服务器自动发送生日祝福

作者: VICTORY_小色 | 来源:发表于2019-01-26 19:23 被阅读0次

首先,我们需要准备一些工作,在本地安装邮件服务器跟客户端
这里我安装的是foxmail的客户端、易游的邮件服务器
使用的发送与接收协议与市场上的邮箱相同,分别是:
接受邮件的协议:POP3 IMAP
发送邮件的协议:SMTP


image.png

接着我们在易游的邮件服务器上建立两个新的用户:


image.png
再在foxmail上添加这两个用户:
image.png

现在我们就可以在本地模拟手动发送邮件了,但是我们是要用程序代码完成发送操作:
因为实现邮件发送操作的相关接口在外部的jar包里,我们先工程里导入相关jar包:


image.png

再编写相关类文件代码:

package com.zys.mail;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {

    //email:邮件发给谁 subject:主题 emailMsg:邮件的内容
    public static void sendMail(String email, String subject, String emailMsg)
            throws AddressException, MessagingException {
        
        // 1.创建一个程序与邮件服务器会话对象 Session
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "SMTP");//发邮件的协议
        props.setProperty("mail.host", "localhost");//发邮件的服务器地址
        props.setProperty("mail.smtp.auth", "true");// 指定验证为true

        // 创建验证器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("victory@zys.com", "12345");//发邮件的账号验证
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.创建一个Message,它相当于是邮件内容
        Message message = new MimeMessage(session);

        message.setFrom(new InternetAddress("victory@zys.com")); // 设置发送者

        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者

        message.setSubject(subject);//邮件的主题

        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.创建 Transport用于将邮件发送

        Transport.send(message);
    }
}

最后在主函数中编写运行代码,就可以实现邮件发送了:

package com.zys.mail;

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

public class SendMailTest {
    
    public static void main(String[] args) throws AddressException, MessagingException {
        
        MailUtils.sendMail("iverson@zys.com", "测试代码发送邮件", "好的,现在我们成功实现通过代码发送邮件!");
        
    }
}

案例:服务器自动发送生日祝福

通过配置监听器ServletContextListener,在服务器启动时就初始化
实现代码如下:

package com.zys.birthday;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;

import com.zys.domain.User;
import com.zys.mail.MailUtils;

public class BirthdayListaner implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO 自动生成的方法存根
        
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // 当web应用启动 开启任务调动---功能在用户的生日当天发送邮件
        //开启一个定时器
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {
                // 为当天生日的用户发邮件
                //1、获得今天过生日的人
                //获得今天的日期
                SimpleDateFormat format = new SimpleDateFormat("MM-dd");
                String currentDate = format.format(new Date());
                //根据当前时间从数据库中擦寻今天过生日的人
                QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
                String sql="select * from user where birthday like ?";
                List<User> userList = null;
                try {
                    userList = runner.query(sql, new BeanListHandler<User>(User.class), "%"+currentDate+"%");
                } catch (SQLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }//01-26
                //2、发邮件
                if(userList!=null&&userList.size()>0){
                    for(User user : userList){
                        String emailMsg = "亲爱的:"+user.getName()+",今天是您的生日,祝您生日快乐哦!";
                        try {
                            MailUtils.sendMail(user.getEmail(), "生日祝福", emailMsg);
                            System.out.println(user.getName()+"邮件发送完毕!");
                        } catch (AddressException e) {
                            // TODO 自动生成的 catch 块
                            e.printStackTrace();
                        } catch (MessagingException e) {
                            // TODO 自动生成的 catch 块
                            e.printStackTrace();
                        }
                    }
                }
            }
        }, new Date(), 1000*60);
        //实际开发中起始时间是一个固定的时间
        //实际开发中间隔时间是1天,每天给过生日的用户发送
        
    }
    
    
    
}

相关文章

  • 使用java程序模拟本地发送邮件+案例:服务器自动发送生日祝福

    首先,我们需要准备一些工作,在本地安装邮件服务器跟客户端这里我安装的是foxmail的客户端、易游的邮件服务器使用...

  • smtp发送邮件

    使用python发送邮件的流程: 1、获得smtp服务 2、连接服务器 3、模拟客户端登录 4、实现邮件发送 5、...

  • python自动发送生日祝福邮件

    最近刚开学,班里的事也挺多,大多都涉及到excel的使用。本来我excel用得不是很熟,很多高级的操作都不会。比如...

  • 自动发送邮件案例

    一、打开python编辑工具,导入相关模块 二、登录发送邮件的客户端 登录邮箱后,前往邮箱协议设置,开启SMTP服...

  • Jenkins集成Maven项目自动发送邮件设置

    Jenkins集成Maven项目自动化测试,不想使用自带的发送邮件的功能,使用扩展的邮件插件自动发送邮件。具体步骤...

  • Python入门系列--邮件--day02

    参考地址: Python发送邮件给多人 Python邮件功能 - 使用163邮箱SMTP服务器发送邮件

  • 阿里云 - 25端口封禁解决

    使用JavaMail发送邮件在阿里云服务器邮件发送失败 问题发现 问题产生: SpringBoot使用JavaMa...

  • Django——发送邮件和缓存

    发送邮件 概述:Django 中内置了邮件发送功能,发送邮件需要使用 SMTP服务,常用的免费服务器有:163、1...

  • java发送邮件

    使用java mail forAndroid实现发送邮件 1.邮件发送协议smtp协议 smtp用户连接上邮件服务...

  • 邮件发送

    开通了,qq企业邮箱发送邮件。在本地正常发送,放到其中一台服务器时,发送失败。使用的是非SSL方式25端口。在服务...

网友评论

      本文标题:使用java程序模拟本地发送邮件+案例:服务器自动发送生日祝福

      本文链接:https://www.haomeiwen.com/subject/cazijqtx.html