[原创]Web应用中使用JavaMail发送邮件_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
4
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3916 | 回复: 3   主题: [原创]Web应用中使用JavaMail发送邮件        上一篇   下一篇 
heli.jia
注册用户
等级:少校
经验:874
发帖:21
精华:0
注册:1970-1-1
状态:离线
发送短消息息给heli.jia 加好友    发送短消息息给heli.jia 发消息
发表于: IP:您无权察看 2016-3-31 17:35:12 | [全部帖] [楼主帖] 楼主

               现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了。

步骤如下:


1.创建web项目

1.png


2.用户注册用的jsp页面(register.jsp)

代码如下

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>

<html>

  <head>

    <title>注册页面</title>

  </head>

  

  <body>

    <form action="${pageContext.request.contextPath}/servlet/RegisterServlet" method="post">

        用户名:<input type="text" name="username"><br/>

        密码:<input type="password" name="password"><br/>

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

        <input type="submit" value="注册">

    </form>

  </body>

</html>


3.消息提示页面

代码如下:

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>

<html>

  <head>

    <title>消息提示页面</title>

  </head>

  

  <body>

       ${message}

  </body>

</html>


4.开发封装用户注册信息的domain

   代码user.java如下:

package me.gacl.domain;


public class User {

    private String username;

    private String password;

    private String email;

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

}

5.编写邮件发送功能,(线程类)代码如下:

package me.gacl.web.controller;


import java.util.Properties;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import me.gacl.domain.User;


 

public class Sendmail extends Thread {

        //用于给用户发送邮件的邮箱

    private String from = "gacl@sohu.com";

        //邮箱的用户名

    private String username = "gacl";

        //邮箱的密码

    private String password = "邮箱密码";

        //发送邮件的服务器地址

    private String host = "smtp.sohu.com";

    

    private User user;

    public Sendmail(User user){

        this.user = user;

    }

    

   

    @Override

    public void run() {

        try{

            Properties prop = new Properties();

            prop.setProperty("mail.host", host);

            prop.setProperty("mail.transport.protocol", "smtp");

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

            Session session = Session.getInstance(prop);

            session.setDebug(true);

            Transport ts = session.getTransport();

            ts.connect(host, username, password);

            Message message = createEmail(session,user);

            ts.sendMessage(message, message.getAllRecipients());

            ts.close();

        }catch (Exception e) {

            throw new RuntimeException(e);

        }

    }

    

     

    public Message createEmail(Session session,User user) throws Exception{

        

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress(from));

        message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));

        message.setSubject("用户注册邮件");

        

        String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";

        message.setContent(info, "text/html;charset=UTF-8");

        message.saveChanges();

        return message;

    }

}


6.编写用于处理用户注册的servlet,代码如下:

package me.gacl.web.controller;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import me.gacl.domain.User;

import me.gacl.service.UserService;


public class RegisterServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        try{

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

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

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

            User user = new User();

            user.setEmail(email);

            user.setPassword(password);

            user.setUsername(username);

            

            System.out.println("把用户信息注册到数据库中");

            //用户注册成功之后就使用用户注册时的邮箱给用户发送一封Email

            //发送邮件是一件非常耗时的事情,因此这里开辟了另一个线程来专门发送邮件

            Sendmail send = new Sendmail(user);

            //启动线程,线程启动之后就会执行run方法来发送邮件

            send.start();

            

            //注册用户

            //new UserService().registerUser(user);

            request.setAttribute("message", "恭喜您,注册成功,我们已经发了一封带了注册信息的电子邮件,请查收,如果没有收到,可能是网络原因,过一会儿就收到了!!");

            request.getRequestDispatcher("/message.jsp").forward(request, response);

        }catch (Exception e) {

            e.printStackTrace();

            request.setAttribute("message", "注册失败!!");

            request.getRequestDispatcher("/message.jsp").forward(request, response);

        }

    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        doGet(request, response);

    }

}


7.运行效果如下:

捕获.png

捕获1.png

现在很多网站都有这样的功能,用户注册完成之后,网站根据我们注册时填写的邮箱给我们一封Email,然后点击Email中的超链接去激活我们的用户。这种功能就是这样实现的。




赞(0)    操作        顶端 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2016-4-1 9:54:23 | [全部帖] [楼主帖] 2  楼

一般网站 都会说 发送一封邮件,请在多长时间内激活,未激活则账号失效,那么怎么 控制呢?



赞(0)    操作        顶端 
arcona
注册用户
等级:少校
经验:1100
发帖:10
精华:0
注册:2015-6-1
状态:离线
发送短消息息给arcona 加好友    发送短消息息给arcona 发消息
发表于: IP:您无权察看 2016-8-10 9:53:28 | [全部帖] [楼主帖] 3  楼

实用,收藏起来~



赞(0)    操作        顶端 
ruiyu.yu
注册用户
等级:少尉
经验:331
发帖:15
精华:0
注册:1970-1-1
状态:离线
发送短消息息给ruiyu.yu 加好友    发送短消息息给ruiyu.yu 发消息
发表于: IP:您无权察看 2016-10-21 17:11:36 | [全部帖] [楼主帖] 4  楼

学习了。



赞(0)    操作        顶端 
总帖数
4
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论