基于JavaWeb实现ATM机模拟取款系统实战(添加邮件操作接收银行卡账户信息)

 一:相关jar包介绍

 在项目中实现邮件发送功能

 主要为这俩个jar包实现发送邮件功能

前提概要

需要有一个邮箱账户,并且开启pop3/smtp功能

 这里我以申请163账号为例

 这里地址填一个自己记得住的

然后完成注册

 然后打开你的设置开启这个功能,按照那个要求发送短信,会给你一个登录密码,

注意这个密码只会显示一次

 如何使用以及示例代码

首先创建一个配置文件mail.properties将你的 邮箱,密码,邮箱服务的端口,等等写道配置类当中

#邮箱服务器地址

mail.smtp.host=smtp.163.com

#对应邮箱的服务端口
mail.smtp.port=25

#开启认证
mail.smtp.auth=true

#加密传输
mail.smtp.starttls.enable=true

#你的邮箱
senderEmail=zbzlytop@163.com

#对应的密码
senderPassword=*****************

 相关邮件服务器对应的端口

网易163邮箱(mail.163.com)

新浪sina邮箱(mail.sina.com.cn)

腾讯Foxmail邮箱(mail.qq.com)

网易126邮箱(mail.126.com)

移动139邮箱(mail.10086.cn)

腾讯QQ邮箱(mail.qq.com)

POP3服务器地址:pop.163.com(端口:110)

SMTP服务器地址:smtp.163.com(端口:25)

腾讯QQ企业邮箱(exmail.qq.com) :

POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)

SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)

谷歌Gmail邮箱(mail.google.com):

POP3服务器地址:pop.gmail.com(SSL启用 端口:995)

SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)

 创建一个邮件发送工具类EmailUtils

public class MailUtils {
    public static void sendEmail(String email, String subject, String content){
        //读取配置文件
        InputStream resourceAsStream = MailUtils.class.getClassLoader().getResourceAsStream("mail.properties");
        Properties properties = new Properties();
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 邮件发送者和收件人的电子邮件地址
        String senderEmail =properties.getProperty("senderEmail");
        String senderPassword = properties.getProperty("senderPassword");
        // 创建身份验证对象
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(senderEmail, senderPassword);
            }
        };

        // 创建会话
        Session session = Session.getDefaultInstance(properties, authenticator);
        try {
            // 创建邮件消息
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(senderEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
            message.setSubject(subject);
            message.setText(content);

            // 发送邮件
            Transport.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            System.out.println("邮件发送失败:" + e.getMessage());
        }
    }
}

写一个demo测试邮件功能

public class MailDemo {
    public static void main(String[] args) {
        MailUtils.sendEmail("3065400350@qq.com","ATM模拟系统通知邮箱","你好");
    }
}

运行效果

 成功发送邮件

 二:项目中使用

创建对应的三层代码

dao

    /**
     *获取卡号对应的邮件
     */
    public String getEmailByIcno(String icno){
        String sql ="select email from user_email where icno = ?";
        try {
          return  queryRunner.query(sql, new ScalarHandler<>(), icno);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

service

    /**
     * 获取email
     * @param icno 卡号
     * @return 邮箱地址
     */
    String getEmailByIcno(String icno);

   /**
     * 获取email
     *
     * @param icno 卡号
     * @return 邮箱地址
     */
    @Override
    public String getEmailByIcno(String icno) {
        return userDao.getEmailByIcno(icno);
    }
/**
 * 模拟用户取款
 */
@WebServlet("/UserFetch")
public class UserFetchServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();
    private RunMessageService runMessageService=new RunMessageServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String fetchNum = req.getParameter("fetchNum");
        String icno = null;
        if (req.getSession().getAttribute("ua")!=null){
            User user=(User)req.getSession().getAttribute("ua");
            icno = user.getIcno();
        }
        double userBalance = userService.getUserBalance(icno);
        int money=0;
        if (fetchNum != null){
            money=Integer.parseInt(fetchNum);
        }
        if (money==0){
            req.getSession().setAttribute("error2","取款不能为0");
            resp.sendRedirect("/changepage/UserStore.jsp");
        }else if (money>2000){
            req.getSession().setAttribute("error2","取款不能大于2000");
            resp.sendRedirect("/changepage/UserStore.jsp");
        }else if (money%50!=0){
            req.getSession().setAttribute("error2","取款为50的倍数");
            resp.sendRedirect("/changepage/UserStore.jsp");
        }else if(money>userBalance){
            req.getSession().setAttribute("error2","取款金额不能大于剩余金额");
            resp.sendRedirect("/changepage/UserStore.jsp");
        }else {
            boolean result=userService.FetchMoney(money,icno);
            //保存交易记录
            RunMessage runMessage = new RunMessage();
            runMessage.setIcno(icno);
            runMessage.setRm_date(new Date().toString());
            runMessage.setRm_balance(-Double.parseDouble(String.valueOf(money)));
            runMessage.setRm_rest(userService.getUserBalance(icno));
            runMessage.setRm_currency("RMB");
            runMessageService.addRunMessage(runMessage);
                if (result){
                    String email = userService.getEmailByIcno(icno);
                    String content="您的卡号为:"+icno+" 的账户取款"+money+"\n 剩余金额为:"+userService.getUserBalance(icno);
                    MailUtils.sendEmail(email,"ATM模拟系统取款",content);
                    resp.sendRedirect("/UserSerch");
                }else {
                    req.getSession().setAttribute("error2","取款失败");
                    resp.sendRedirect("/changepage/UserStore.jsp");
                }
        }
    }
}

三:运行结果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZLY_2004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值