JavaMail

作者: 指尖轻敲 | 来源:发表于2019-02-09 18:14 被阅读28次

    相关概念

    1. 邮箱服务器

    就想web要有web服务器一样(tomcat等),邮件也有对应的邮件服务器

    2. SMTP协议

    用户发送邮件到邮件服务器的协议,处理该请求的服务器称之为SMTP服务器。和POP3协议都属于TCP/IP协议的一员。

    3. POP3协议

    该协议是用户从邮件服务器接收邮件要遵循的协议,当然处理该请求的服务器称之为POP3服务器。

    4. 邮件收发过程

    现有场景如下:我要用qq邮箱给小明的163邮箱发一封邮件,首先我要先登录我的邮箱发一封邮件,此时我qq邮箱对应的SMTP服务器接收到我的邮件之后,发送给163邮箱对应的SMTP服务器。这时,小明登录连接163邮箱的POP3服务器就可以接受到邮件了。

    环境搭建

    安装邮件服务器

    这里使用的易邮邮件服务器,安装完成之后,点击工具,选择系统设置进行邮箱域名配置。

    image.png

    然后新建两个用来测试的账号,账号处填user,默认就会在后面自动添加刚才设置的邮箱域名@junwei.com

    image.png
    邮箱客户端安装

    这里使用的是Foxmail,安装完成之后,把我们刚才新建的用户添加进入。

    新建账号.png

    然后需要注意一点,要填写服务器的地址,如果是线上正式的邮箱服务器(163等)就要填它们对应的服务器地址。这里我们是本地的服务器所以填localhost

    image.png

    代码实现发送邮件

    // 要连接的服务器,因为是本地所以不用设置主机名
    Properties properties = new Properties();
    // 创建连接对象,连接邮箱服务器
    Session session = Session.getInstance(properties, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            // 设置用于发送邮件的账号和密码
            return new PasswordAuthentication("user1@junwei.com","123456");
        }
    });
    
    // 创建邮件对象
    Message message = new MimeMessage(session);
    try {
        // 设置发件人,这里需要传入一个地址对象,而不是地址的字符串,所有用InternetAddress转一下
        message.setFrom(new InternetAddress("user1@junwei.com"));
    
        // 设置收件人,TO:收件人,CC:抄送人,BCC:秘密抄送人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("user2@junwei.com"));
    
        // 设置邮件主题
        message.setSubject("我是测试邮件的主题");
        // 设置正文
        message.setContent("<h1>我是正文</h1>", "text/html; charset=UTF-8");
        Transport.send(message);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    
    用户激活邮件实现步骤
    1. 用户点击注册,服务端向服务器存一个用户对象,该对象包含用户填写的信息和是否激活的状态(初始设为0未激活),还应该有一个用户对应的激活码(服务端生成)

    2. 通过上面的代码想用户填写的邮箱发送一封激活邮件。该邮件包含一个激活链接(带有激活码参数的)。

    3. 用户点击激活链接,服务端接收到这个激活码,然后取数据库查找。如果查到了该用户,就把该用户的激活状态修改为(1已激活)。

    4. 修改完激活状态之后,说明该用户可以登录了,服务端进行页面跳转,跳转到登录页面。

    相关文章

      网友评论

          本文标题:JavaMail

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