zoukankan      html  css  js  c++  java
  • 在线支付、邮件

    第一步:找一个第三方支付公司开一个账号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();
            }
        }
    
    }
  • 相关阅读:
    手机开发中的AP与BP的概念
    pk8和x509.pem转换成keystore
    android系统release签名
    java读取pfx或P12格式的个人交换库公私钥
    使用IntelliJ IDEA查看类的继承关系图形
    Java日志框架与日志系统
    Java常见加密技术的密钥与加密串长度
    quartz的持久化任务调度使用应用的dataSource
    敏感数据脱敏
    Jquery的Ajax中contentType和dataType的区别
  • 原文地址:https://www.cnblogs.com/sunhan/p/3542127.html
Copyright © 2011-2022 走看看