将哈希密码传递给Java Mail API

时间:2013-02-03 15:21:26

标签: java email imap javamail

大家早上好,

我正在使用GWT框架为我的公司开发ERP,我会得到 使用Java Mail API的未读电子邮件数。 我可以这样做,但问题是我存储了SHA-512哈希密码 数据库,我不会将清除密码传递给Java Mail API,而只是传递密码以避免在网络上传输清除密码。

我使用此代码获取未读邮件的数量:

private static int getNumberOfUnreadMails() {
   int numberOfUnreadMails = 0;

    Properties properties = new Properties();
    properties.put("mail.imap.host", "myserver.com");
    properties.put("mail.imap.user", "developper@myserver.com");
    properties.put("mail.imap.socketFactory", 143);
    properties.put("mail.imap.socketFactory.class", "java.net.ssl.SSLSocketFactory");
    properties.put("mail.imap.port", 143);
    Session session = Session.getDefaultInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("developper@myserver.com", "mypassword");
        }
    });
    Store store;
    try {
        store = session.getStore("imap");
        store.connect();
        Folder folder = store.getFolder("Inbox");
           numberOfUnreadMails = folder.getUnreadMessageCount();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return numberOfUnreadMails;
}

我也可以使用另一种哈希算法。 如果你知道我的问题的解决方案,请事先知道。

P.S。:对不起,我的英语很差,我是法国人。

1 个答案:

答案 0 :(得分:0)

您的IMAP服务器需要未使用的密码才能进行身份验证。您可能已经在使用SSL(因为设置了mail.imap.socketFactory.class),因此您的密码永远不会以明文形式发送。

BTW:在javamail中使用带有SSL的IMAP的正确方法是使用imaps协议(并使用mail.imaps.*,而不是使用imap协议并指定SSL套接字工厂作为套接字工厂通常,带有SSL端口的IMAP是993,而不是143。