在线支付、邮件

第一步:找一个第三方支付公司开一个账号yeepay

开户以后可以获取以下信息:

1:自己的开户账号

2:支付密码 = 双向加密。

3:给一个示例代码。Java.asp.net

p1_MerId=10001126856 - 账号

keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl = 密码

第二步:开发支付页面

<form action="<c:url value='/BuyServlet'/>" method="post">
        订单号:<input type="text" name="p2_Order"/><br/>
        金额:<input type="text" name="p3_Amt"/><br/>
        银行:
        <input type="radio" name="pd_FrpId" value="BOCO-NET-B2C">交通银行<br/>
        <input type="radio" name="pd_FrpId" value="CMBC-NET-B2C">民生银行<br/>
        <input type="submit" value="支付"/>
</form>

第三步:开发buySerlvet,组成参数

第四步:加密

PaymentUtiuls

邮件

目标:通过Java代码发送邮件。

邮件协议:

    发邮件的:SMTP (Simple Mail Transport Protocal)

    收邮件的协议:pop3 (Post Office Protocal 3)

    IMAP 新协议 发邮件也可以收邮件。

(一步步的与服务器交互)

SMTP :

Ehlo<空格><你的域名><回车>

Ehlo - 与服务器

Auth<SP>Login<CRLF>

请求登录

Mail<SP>From:<reverse-path><CRLF>

发件人的email:www@aa.com

Rcpt<SP>To:<forword-path><CRLF>

收件的地址:eee@aa.com

Data<CRLF>

以下是数据

Quit<CRLF>

退出

收发邮件的过程:

一般情况下,smtp和pop3是两个服务器(主机)。

Smtp邮件的端口为25。

POP3 端口 为110。

发邮件示例

安装foxmail:

clip_image002

发邮件时,要对用户名和密码进行base64编码

//对用户名和密码进行base64编码
    @Test
    public void base64(){
        String name = "wj_leaf12345";
        String pwd = "1qaz2wsx";
        BASE64Encoder en = new BASE64Encoder();
        name = en.encode(name.getBytes());
        pwd = en.encode(pwd.getBytes());
        System.err.println(name);
        System.err.println(pwd);
    }

通过java代码发邮件

用java发邮件,必须要导入新的包

mail.jar – 发邮件的核心包

activation.jar – 对用户和密码加密.

在mail.jar中有三个核心类:

Javax.mail.Session – 是指与邮件服务器会话。整个项目中只要一个就可以了.

Javax.mail.Message(接口) - 准备发送数据信息。

MimeMessage - 可以设置类型的数据信息。

Transport – 它拥有一个方法可以发送Message。

第一步;导入两个jar包

第二步;发简单的邮件

@Test
    public void sendMail() throws Exception{
        //第一步:声明properties对象放信息
        Properties prop = new Properties();
        //设置连接哪一台服务器
        prop.setProperty("mail.host","smtp.126.com");
        //设置是否验证
        prop.setProperty("mail.smtp.auth", "true");
        //第二步:声明用户名和密码
        Authenticator auth = new Authenticator() {
            //此访求返回用户和密码的对象
            public PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa = 
                        new PasswordAuthentication("wj_leaf12345", "1qaz2wsx");
                return pa;
            }
        };
        ////第二步:获取Session对象
        Session session = 
                Session.getDefaultInstance(prop,auth);
        //设置session的调试模式
        session.setDebug(true);
        //第三步:声明信息
        MimeMessage mm1 = 
                new MimeMessage(session);
        
        //第四步:设置发件人email
        Address from = new InternetAddress("wj_leaf12345@126.com");
        mm1.setFrom(from);
        //第五步:设置收件人
        mm1.setRecipient(RecipientType.TO,new InternetAddress("wj_leaf12345@163.com"));
        mm1.setRecipient(RecipientType.CC, new InternetAddress("549051701@qq.com"));
        mm1.setRecipient(RecipientType.BCC, new InternetAddress("wj@itcast.cn"));
        //第六步:设置主题
        mm1.setSubject("这是用Java发的邮件3");
        mm1.setContent("你好,这是用java发的邮件,3333再试一下", "text/plain;charset=UTF-8");
        
        //第七步:
        Transport.send(mm1);
        
    }

第三步:发带有超连接的邮件

mm1.setSubject("这是用Java发的邮件sfasdf3");
        mm1.setContent("你好,这是用java发的邮件,<a href='http://www.baidu.com'>传智</a>", "text/html;charset=UTF-8");
        
        //第七步:
        Transport.send(mm1);

第四步:符件的邮件

@Test
    public void sendFile() throws Exception{
        Properties p = new Properties();
        p.setProperty("mail.host","smtp.163.com");
        p.setProperty("mail.smtp.auth","true");
        Session s = Session.getDefaultInstance(p,new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("wj_leaf12345", "1qaz2wsx");
            }
        });
        s.setDebug(true);
        
        
        //声明MimeMessage
        MimeMessage msg = new MimeMessage(s);
        msg.setFrom(new InternetAddress("wj_leaf12345@163.com"));
        msg.setRecipient(RecipientType.TO, new InternetAddress("wj_leaf12345@126.com"));
        msg.setSubject("图片的");
        
        //第一步:声明多处理的Part
        MimeMultipart mm = new MimeMultipart();
        
        //第二步:声明
        MimeBodyPart body1 = new MimeBodyPart();
        //第三步:设置符件
        DataSource ds = new FileDataSource(new File("./img/a.jpg"));
        DataHandler dh = new DataHandler(ds);
        body1.setDataHandler(dh);
        //必须要设置名称
        body1.setFileName(MimeUtility.encodeText("美女.jpg"));
        
        
        MimeBodyPart body2 = new MimeBodyPart();
        //第三步:设置符件
        DataSource ds2 = new FileDataSource(new File("./img/b.jpg"));
        DataHandler dh2 = new DataHandler(ds2);
        body2.setDataHandler(dh2);
        //必须要设置名称
        body2.setFileName(MimeUtility.encodeText("美女2.jpg"));
        
        MimeBodyPart body3 = new MimeBodyPart();
        //第三步:设置符件
        DataSource ds3 = new FileDataSource(new File("./img/m.mp3"));
        DataHandler dh3 = new DataHandler(ds3);
        body3.setDataHandler(dh3);
        //必须要设置名称
        body3.setFileName(MimeUtility.encodeText("世纪末.mp3"));
        
        //将body1添加到mm
        mm.addBodyPart(body1);
        mm.addBodyPart(body2);
        mm.addBodyPart(body3);
        
        msg.setContent(mm);
        
        //发送
        Transport.send(msg);
        
    }

项目示例-通过邮件激活账号

关键点就在于:

根据用户的给出的email,给这个email发送一个邮件。这个邮件中应该带有一个激活码?(32位UUID,64位UUID)。

提供以下功能:注册功能 - 只要用户注册成功,就给他发邮件。 RegServlet

接收以下信息:Name,pwd,email

提供用户激活功能 .
接收以下信息:只接收激活码。

提供用户登录功能:用户只有激活账号以后才可以登录。

第一步:创建数据结构

Uid  activecode 
create database active character set utf8;
use active;
create table users(
 id varchar(32) primary key,
 name varchar(30),
 pwd  varchar(32),
 email varchar(50)
);
create table active(
  uid varchar(32) primary key,
  code varchar(64),
  constraint a_fk foreign key(uid) references users(id)
);

创建javaBean:

package cn.itcast.domain;

public class User {
    private String id;
    private String name;
    private String pwd;
    private String email;
    private String code;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
                + ", email=" + email + ", code=" + code + "]";
    }
}

第二步:设计

注册页面:

<hr/>
    <p>主页</p>
    <form name="xx" action="" method="post">
        Name:<input type="text" name="name"/><br/>
        Pwd:<input type="text" name="pwd"/><br/>
        Email:<input type="text" name="email"/><br/>
        <input type="button" onclick="_login();" value="登录"/>
        <input type="button" onclick="_reg();" value="注册"/> 
    </form>
  </body>
  <script type="text/javascript">
      function _reg(){
          document.forms[0].action="<c:url value='/RegServlet'/>";
          document.forms[0].submit();
      }
    function _login(){
          document.forms[0].action="<c:url value='/LoginServlet'/>";
          document.forms[0].submit();
      }
  </script>

第三步:注册的Servlet-RegServlet

注册成功以后给用户发邮件:

public class RegServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        String mail = request.getParameter("email");
        //声明对象
        User u = new User();
        u.setName(name);
        u.setPwd(pwd);
        u.setEmail(mail);
        //调用后台的serice保存
        Connection con = null;
        try{
            con = DataSourceUtils.getDatasSource().getConnection();
            u.setId(UUID.randomUUID().toString().replace("-", ""));
            u.setCode(UUID.randomUUID().toString().replace("-", "")
                    +UUID.randomUUID().toString().replace("-", ""));
            con.setAutoCommit(false);
            //先保存user表
            String sql = "insert into users values(?,?,?,?)";
            QueryRunner run = new QueryRunner();
            run.update(con, sql,u.getId(),u.getName(),u.getPwd(),u.getEmail());
            //
            sql = "insert into active values(?,?)";
            run.update(con,sql,u.getId(),u.getCode());
            con.commit();
        }catch(Exception e){
            try {
                con.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            throw new RuntimeException(e);
        }finally{
            try {
                con.close();
                DataSourceUtils.remove();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("你已经注册成功,请去激活,如果没有收到邮件,请等一会再收.");
        new SendThread(u).start();
    }
}
//声明一个线程专门发邮件
class SendThread extends Thread{
    private User user;
    public SendThread(User u) {
        this.user=u;
    }
    @Override
    public void run() {
        try{
            Properties p = new Properties();
            p.setProperty("mail.host","127.0.0.1");
            p.setProperty("mail.smtp.auth", "true");
            Session s = Session.getDefaultInstance(p,new Authenticator() {
                public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("one", "1234");
                };
            });
            s.setDebug(true);
            MimeMessage mm = new MimeMessage(s);
            mm.setFrom(new InternetAddress("one@wj.com"));
            mm.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
            mm.setSubject("请去激活");
            //声明url
            String url = "http://192.168.1.100:6666/day21_active/ActiveServlet?id="+user.getCode();
            String html ="你好:"+user.getName()+"<br/>请激活:<a href='"+url+"'>激活</a>,你可以Copy这个连接:"+url;
            mm.setContent(html,"text/html;charset=UTf-8");
            
            Transport.send(mm);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

第四步:激活的ActiveSerlvet

public class ActiveServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String code = request.getParameter("id");
        try{
            String sql = "delete from active where code=?";
            QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
            int effect = run.update(sql,code);
            if(effect==0){
                response.getWriter().print("Active Failed...");
            }else{
                response.getWriter().print("Active Successfully");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }

}

第五步登录的serlvet – LoingSerlvet

public class LoginSerlvet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
        String pwd  = request.getParameter("pwd");
        //如果
        try{
            String sql = "SELECT id,name,pwd,email,code"+
                         " FROM users LEFT JOIN active ON users.id=active.uid"+
                         " WHERE name=? and pwd=?";
            QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
            User u = run.query(sql,new BeanHandler<User>(User.class),name,pwd);
            if(u==null){
                out.print("你的用户名或是密码错误..");
            }else{
                if(u.getCode()==null){
                    out.print("你登录成功、。。。");
                }else{
                    out.print("你还没有激活...");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}
原文地址:https://www.cnblogs.com/sunhan/p/3542127.html