邮箱服务&javaMail

本文详细介绍JavaMail的使用方法,包括如何通过JavaMail发送邮件、封装邮件发送过程为工具类,以及使用网易邮箱发送邮件的步骤。同时,探讨了邮箱验证业务的实现,包括数据库设计、邮件验证链接的生成及后端验证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1 邮箱服务

 

1.1 邮箱服务器的基本概念

邮件的客户端:可以只安装在电脑上的也可以是网页形式的

邮件服务器:起到邮件的接受与推送的作用

邮件发送的协议:

协议:就是数据传输的约束

接受邮件的协议:POP3   IMAP

发送邮件的协议:SMTP


 

1.2 邮件的发送过程

1.3 邮箱服务器的安装

傻瓜式安装。

安装完成:

服务器设置:

 

添加账户(注册邮箱用户):

 

 

 

1.4 邮箱客户端的安装

正常安装:

在邮件客户端添加用户:

 

创建两个账户测试邮件服务

 

2 javaMail

2.1使用javaMail发送邮件

JavaMail就是一套API,没有特殊的概念。

直接案例:

添加javamail的jar

package com.igeek.mailtest;

 

import java.util.Properties;

 

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.Message.RecipientType;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

 

import org.junit.Test;

 

 

public class MailTest {

    @Test

    public void testSendMail() throws Exception {

       // 使用properties类进行相关配置

       Properties props = new Properties();

       // 设置发送邮件的协议

       props.setProperty("mail.transport.protocol", "SMTP");

       // 设置发送邮件的服务器

       props.setProperty("mail.host", "localhost");

       // 设置进行用户验证

       props.setProperty("mail.smtp.auth", "true");

       // 创建验证器

       Authenticator auth = new Authenticator() {

           public PasswordAuthentication getPasswordAuthentication() {

              //

              return new PasswordAuthentication("tom", "123123");

           }

       };

       //根据上面的Properties的配置和验证器打开一个session

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

       //创建message对象

       Message message = new MimeMessage(session);

       //设置邮件标题

       message.setSubject("tom发送给jerry的测试邮件");

       //设置邮件内容(有多个API,可以满足多各种需求)

       message.setText("我就是测试邮件!!!");

       //设置发送者地址

       message.setFrom(new InternetAddress("tom@igeek.com"));

       //这只接受者地址

       message.setRecipient(RecipientType.TO, new InternetAddress("jerry@igeek.com"));

       //发送

       Transport.send(message);

    }

}

2.2将发送邮件的过程封装为工具类

public class MailUtil {

    //发送者的邮箱地址

    private String fromAddress = "tom@igeek.com";

    public void setFromAddress(String fromAddress) {

       this.fromAddress = fromAddress;

    }

    //发送者邮箱密码

    private String fromPass = "123123";

    public void setFromPass(String fromPass) {

       this.fromPass = fromPass;

    }

 

 

    public void sendMaill(String title,String content,String toAddress) throws Exception {

       // 使用properties类进行相关配置

       Properties props = new Properties();

       // 设置发送邮件的协议

       props.setProperty("mail.transport.protocol", "SMTP");

       // 设置发送邮件的服务器

       props.setProperty("mail.host", "localhost");

       // 设置进行用户验证

       props.setProperty("mail.smtp.auth", "true");

       // 创建验证器

       Authenticator auth = new Authenticator() {

           public PasswordAuthentication getPasswordAuthentication() {

              String name = fromAddress.substring(0, fromAddress.indexOf("@"));

              return new PasswordAuthentication(name, fromPass);

           }

       };

       //根据上面的Properties的配置和验证器打开一个session

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

       //创建message对象

       Message message = new MimeMessage(session);

       //设置邮件标题

       message.setSubject(title);

       //设置邮件内容(有多个API,可以满足多各种需求)

       message.setText(content);

       //设置发送者地址

       message.setFrom(new InternetAddress(fromAddress));

       //这只接受者地址

       message.setRecipient(RecipientType.TO, new InternetAddress(toAddress));

       //发送

       Transport.send(message);

    }

}

 

2.3使用网易邮箱发送邮件

进入邮箱做相关的设置:

可以使用第三方独立授权码发送邮件:

    @Test

    public void testSendMail1() throws Exception {

       // 使用properties类进行相关配置

       Properties props = new Properties();

       // 设置发送邮件的协议

       props.setProperty("mail.transport.protocol", "SMTP");

       // 设置发送邮件的服务器

       props.setProperty("mail.host", "smtp.163.com");

       // 设置进行用户验证

       props.setProperty("mail.smtp.auth", "true");

       // 创建验证器

       Authenticator auth = new Authenticator() {

           public PasswordAuthentication getPasswordAuthentication() {

              //

              return new PasswordAuthentication("15852508901@163.com", "igeek234567");

           }

       };

       //根据上面的Properties的配置和验证器打开一个session

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

       //创建message对象

       Message message = new MimeMessage(session);

       //设置邮件标题

       message.setSubject("研发会议通知");

       //设置邮件内容(有多个API,可以满足多各种需求)

       message.setContent("明天上午10点整大会议室开会,准备好会议资料。","text/plain;charset=utf-8");

       //设置发送者地址

       message.setFrom(new InternetAddress("158****8901@163.com"));

       //这只接受者地址

       message.setRecipient(RecipientType.TO, new InternetAddress("27*****3@qq.com"));

       //发送

       Transport.send(message);

    }

2.4 邮箱验证业务

用户输入邮箱注册,服务器发送邮件给邮箱,在邮箱中点击链接再次请求服务器验证。

链接中必须携带唯一标识符。

[1]数据库

Igeek_user

create table igeek_user(

   id int primary key auto_increment,

   Email varchar(20) not null,

   checked int default '0',

   code varchar(50)

);

创建项目,添加相关配置

添加实体类:

public class IgeekUser {

    private int id;

    private String email;

    private int checked;

    private String code;

}

DAO

注册的方法

验证的方法

public class IgeekDAOImpl implements IIgeekDAO {

    private QueryRunner qr = new QueryRunner(JDBCUtils.getDateSource());

    @Override

    public int reg(IgeekUser iu) {

       String sql  = "insert into igeek_user(email,checked,code) values(?,default,?)";

       try {

           return qr.update(sql,iu.getEmail(),iu.getCode());

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return -1;

    }

    @Override

    public int checked(String code) {

       String sql = "update igee_user set checked = 1 where code = ?";

       try {

           return qr.update(sql,code);

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return -1;

    }

 

}

Service实现:

public class IgeeUserServiceImpl implements IIgeekUserService {

    private IIgeekDAO igeekDAO;

    public void setIgeekDAO(IIgeekDAO igeekDAO) {

       this.igeekDAO = igeekDAO;

    }

 

    public int reg(IgeekUser iu) {

       //生成唯一标识符

       String code = UUID.randomUUID().toString().replaceAll("-", "");

       iu.setCode(code);

       return igeekDAO.reg(iu);

    }

 

    @Override

    public int checked(String code) {

       return igeekDAO.checked(code);

    }

}

Service和dao的配置  beans.xml

    <bean id="igeekUserDAO" class="com.igeek.dao.impl.IgeekDAOImpl"/>

   

    <bean id="igeekUserService" class="com.igeek.service.impl.IgeeUserServiceImpl">

       <property name="igeekDAO" ref="igeekUserDAO"/>

    </bean>

 

Servlet开发:

@WebServlet("/igeekUser")

public class IgeekUserServlet extends BaseServlet {

    private IIgeekUserService igeekUserService = (IIgeekUserService) BeansFactory.getBean("igeekUserService");

   

    public void reg(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       //获取请求参数

       String email = request.getParameter("email");

       IgeekUser user = new IgeekUser();

       user.setEmail(email);

       igeekUserService.reg(user);

       response.setCharacterEncoding("utf-8");

       response.getWriter().write("请进入邮箱验证");

    }

 

    public void check(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       String code = request.getParameter("code");

       int result = igeekUserService.checked(code);

       response.setCharacterEncoding("utf-8");

       if(result == 1) {

           response.getWriter().write("验证通过");

       }else {

           response.getWriter().write("验证失败");

       }

    }

}

在service中添加发送邮件的程序:

public int reg(IgeekUser iu) {

       //生成唯一标识符

       String code = UUID.randomUUID().toString().replaceAll("-", "");

       iu.setCode(code);

       //发送验证的邮件

       MailUtil mu = new MailUtil();

       mu.setFromAddress("tom@igeek.com");

       mu.setFromPass("123123");

       StringBuffer sb = new StringBuffer();

       sb.append("这里是邮箱验证,请点击");

       sb.append("[<a href='http://127.0.0.1:8888/ day12_demo1/igeekUser?op=check&code="+code+"'></a>]进行验证");

       sb.append("<br/>如果点击之后没有反应,请将下面的连接复制到浏览器中验证.<br/>");

       sb.append("http://127.0.0.1:8888/ day12_demo1/igeekUser?op=check&code="+code);

       sb.append("祝您验证成功!");

       try {

           mu.sendMaill("邮箱验证", sb.toString(), iu.getEmail());

       } catch (Exception e) {

           e.printStackTrace();

        }

      

       return igeekDAO.reg(iu);

    }

添加注册页面:

<body>

    <form action="igeekUser" method="post">

       邮箱:<input type="emial" name="email"/>

       <input type="submit" value="走你"/>

    </form>

</body>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值