【问题标题】:Java - How to fetch email address from phpMyAdmin and send using javamailJava - 如何从 phpMyAdmin 获取电子邮件地址并使用 javamail 发送
【发布时间】:2018-04-06 23:23:05
【问题描述】:

我在 NetBeans IDE 8.2 上设计了 ForgotMyPassword.java jFrame 表单 其中我使用 phpMyAdmin 从中获取注册用户的电子邮件地址,并使用 JavaMail 通过 MYSQL 数据库将其发送到他们的电子邮件地址

我基本上想从中获取注册用户的电子邮件地址,并使用 JavaMail 作为一次性密码 (OTP) 恢复选项通过 MYSQL 数据库将其发送到他们的电子邮件地址

这里是源代码:

    String username = usrnmfield.getText();
    String email = emailID.getText();
    String[] to = {"emailaddr@gmail.com"};

    Connection conn=null;
    PreparedStatement pstn = null;

    try {

        Class.forName("com.mysql.jdbc.Driver");

        Connection db = DriverManager.getConnection("jdbc:mysql://localhost:3307/app" , "xxxx" , "xxxx");
        pstn=db.prepareStatement("select * from register where USERNAME=? and EMAIL=?");

        pstn.setString(1,username);
        pstn.setString(2,email);

        ResultSet i=pstn.executeQuery();

        if(i.next())

        {


    if(JavaMail.send
    ("abc@gmail.com", 
    "xxxx",
    to,
    "Hello world",
    "Thank you for reading my post"))

    {

        JOptionPane.showMessageDialog(null , " Please Check out your Inbox for any Password sent by us to you ");

        }

        }

        else if (usrnmfield != i && emailID != i)

        {

           JOptionPane.showMessageDialog(null, "Wrong Username or E-Mail ID");

        }     

    } catch(HeadlessException | ClassNotFoundException | SQLException e) {
        JOptionPane.showMessageDialog(null, e);

    }


}                                        

【问题讨论】:

  • 请说明问题
  • 是的,我的意思是我如何从 MySQL 数据库 (PhpMyAdmin) 获取电子邮件地址的每个注册用户,即(在我的 Java 应用程序和我的 MySQL 数据库 (PhpMyAdmin) 中注册帐户的用户) ) 使用 Java JDBC 并将他们每个人的特定加密密码发送到他们的电子邮件帐户,以便仅使用 JavaMail 进行恢复过程,一旦他们收到加密密码,它可以帮助恢复他们忘记的密码,以便可以恢复忘记的密码轻松例如:s1.postimg.org/8d0r91udqn/screenshot_120.png

标签: java mysql email phpmyadmin jakarta-mail


【解决方案1】:

一些可能有帮助的评论和调整:

  1. 关于您的应用程序设计,您应该强烈考虑另一种架构。出于安全考虑,不建议让客户端(桌面)应用程序直接使用 SQL 数据库。在客户端实现整个安全性显然是一个坏主意(并且很容易被绕过),而且它将难以管理。考虑在提供最先进的身份验证和授权机制(例如,通过 HTTPS 上的 REST-API)的远程安全服务器上使用集中式安全数据库。服务端安全框架包括Keycloak、SpringSecurity、Apache Shiro、JaaS……通过搜索Web你会发现你的设计并不那么普遍。此外,对于 OTP,使用 Web 服务器或简单的远程交换似乎很明显(您将需要它们)。您也可以考虑通过集中式 LDAP 服务器实现日志记录。

  2. 在选择语句中命名您的字段。例如。 "select password from register where ..." 以便您知道您对订单的期望或在使用 select * 时使用字段名称:

    ResultSet rs = ... String myValue = rs.getString(1); String myValueBis = rs.getString("password");

  3. 始终使用 try-finally 块包围您的数据库查询,以关闭您的 ResultSet、准备好的语句和最终的连接(如果未重用),最好按此顺序。

  4. 我不明白这个条件的目的:

    else if (usrnmfield != i && emailID != i) { ...

    您正在将文本字段与 ResultSet 进行比较,但既不是文本中包含的值,也不是 ResultSet 当前行的值(参见 1)。这毫无意义。

  5. 如果您想允许您的用户根据用户名或电子邮件来检索其密码,您应该考虑在 SQL 语句中使用“OR”(而不是“and”)。

  6. 使用 JavaMail 时,您必须确保您的会话包含足够的信息来发送电子邮件。创建javax.mail.Session 对象通常是任何JavaMail 应用程序的第一步。所以你需要配置 smtp 服务器或中继,最终配置端口和身份验证。由于您没有显示 JavaMail 类的代码,因此如果您对此有任何问题,我建议您将其放在原始问题中并澄清问题所在(如果有的话)。

  7. 一般来说,如果您考虑将此应用程序用于商业用途或某些严肃目的,您还应该快速考虑以加密方式(例如 SHA-256)存储您的密码。并且还考虑不通过电子邮件发送密码(如果您只存储用户密码的哈希值,它会自然而然地出现......)而是建议他们使用一种安全的方式来重置/更新它。

  8. 我认为您应该使用更多代码更新您的问题(最好更最终和更清晰),并对您的问题更准确。如果版主将您的问题标记为过于“笼统”或晦涩难懂,我不会感到惊讶。

【讨论】:

  • 感谢您的回复,我一定会确保以下几点,但我想从我的 PhpMyAdmin 获取注册用户的电子邮件地址,并使用 MYSQL 数据库将其发送到他们的电子邮件地址立即将 JavaMail 作为一次性密码 (OTP) 恢复选项”
  • 我很抱歉,但实际上我不明白。你的问题对我来说似乎不清楚。 “从我的 PhpMyAdmin 获取注册用户的电子邮件地址”是什么意思? PhpMyAdmin 只是 MySQL 上的 Web UI,因此您的用户存在于 MySQL 数据库中。所以我猜你的意思是“从 MySQL db 获取”?其次,您的确切问题是什么?您是否需要有关如何实现所有这些的指示,或者您在实现邮件获取部分或 OTP 或...时是否有(非常)特殊的问题?
  • 是的,我的意思是我如何从 MySQL 数据库 (PhpMyAdmin) 中获取每个注册用户,即(在我的 Java 应用程序和我的 MySQL 数据库 (PhpMyAdmin) 中注册帐户的用户)的电子邮件地址) 使用 Java JDBC 并将他们每个人的特定加密密码发送到他们的电子邮件帐户,以便仅使用 JavaMail 进行恢复过程,一旦他们收到加密密码,它可以帮助恢复他们忘记的密码,以便可以恢复忘记的密码轻松例如:s1.postimg.org/8d0r91udqn/screenshot_120.png
  • 嗡嗡声作为一个问题仍然有点宽泛。但首先,尝试select EMAIL from register,然后在 ResultSet 上进行迭代,其中 `getString("EMAIL")" 将为您提供每个用户的电子邮件地址。然后为每个用户生成一个随机密码并将其作为链接发送和/或使用他们下次进入时需要输入的 OTP 密码更新您的数据库(或通过使用包含此密码的链接隐含地)。然后:其余的......
  • 顺便说一下(这很重要):我强烈建议您修改您的设计,因为在(桌面)客户端以这种方式实施安全性会很快让您陷入困境。换句话说,您应该拥有一个客户端-服务器架构(如果您想要体面的安全性),并在服务器上运行一个安全框架(最终绑定到其本地数据库),并且在桌面应用程序中只有一个(Web)身份验证器。现在有一个 Swing 应用程序直接访问 MySQL 数据库进行身份验证是很奇怪的! (如果它不集中和安全怎么办?)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2011-03-09
  • 2012-10-29
  • 1970-01-01
  • 2015-12-07
  • 2013-12-16
相关资源
最近更新 更多