私のアプリケーションは、Javamail を使用して電子メールを送信します。電子メール サーバーで認証するには、現在、アプリケーション構成ファイルのどこかにパスワードを保存する必要があります。パスワードのハッシュのみを保存することで、少なくとも少しのセキュリティを提供して、これを回避したいと思います。
ウィキペディアの記事http://en.wikipedia.org/wiki/Digest_access_authenticationによると、アプリケーションが username:realm:password の MD5 ハッシュのみを使用して認証できるようにする DIGEST-MD5 認証を使用して、これを達成できるはずです。クリアテキストのパスワードを知る必要はありません。
Javamail で DIGEST-MD5 を使用する方法に関する明確な例が見つかりません。クラス com.sun.mail.smtp.DigestMD5 への参照がいくつか見られますが、これは最新の javamail パッケージには存在せず、その理由についての説明が見つかりません。
以下のコードは、私ができる限りのものです。電子メールは正常に送信されましたが、DIGEST-MD5 が許可された唯一のメカニズムであると指定したにもかかわらず、デバッグ出力はまだ SASL を介した PLAIN 認証を使用していることを示しているようです。
さらに、transport.connect メソッドの引数として平文のパスワードを指定していますが、代わりにハッシュ化された username:realm:password を提供したいと考えています。
Javamail で DIGEST-MD5 を使用する実際の例を教えてもらえますか? ありがとう!
以下のコードでは、try/catch ブロックが削除されています...
Properties properties=new Properties();
properties.put("mail.smtp.starttls.enable","true");
properties.put("mail.smtp.timeout",3000); // 3 second timeout establishing connection
properties.put("mail.smtp.auth.mechanisms","DIGEST-MD5");
Session session=Session.getInstance(properties);
session.setDebug(true);
Message message=new MimeMessage(session);
message.setFrom(constructAddress(myGmailAddress,"my name"));
message.addRecipient(Message.RecipientType.TO,constructAddress(recipientEmailAddress,"Recipient Name"));
message.setSubject("test email");
message.setText("...");
SMTPTransport transport=(SMTPTransport)session.getTransport("smtp");
transport.setSASLEnabled(true);
transport.setSASLRealm("gmail.com");
transport.connect("smtp.gmail.com",587,myGmailAddress,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
(切り捨てられた)デバッグ出力は次のとおりです。
DEBUG: setDebug: JavaMail version 1.5.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP pb7sm87689296pac.10 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
EHLO laptop-mj
250-mx.google.com at your service, [(my ip address)]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 CHUNKING
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO laptop-mj
250-mx.google.com at your service, [(my ip address)]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Authenticate with SASL
DEBUG SMTP: SASL AUTH command trace suppressed
DEBUG SMTP: SASL Mechanisms:
DEBUG SMTP: LOGIN
DEBUG SMTP: PLAIN
DEBUG SMTP: XOAUTH
DEBUG SMTP: XOAUTH2
DEBUG SMTP: PLAIN-CLIENTTOKEN
DEBUG SMTP:
DEBUG SMTP: SASL callback length: 2
DEBUG SMTP: SASL callback 0: javax.security.auth.callback.NameCallback@55f6efd2
DEBUG SMTP: SASL callback 1: javax.security.auth.callback.PasswordCallback@46faf015
DEBUG SMTP: SASL client PLAIN
DEBUG SMTP: use8bit false
MAIL FROM:<(my gmail address)>
250 2.1.0 OK pb7sm87689296pac.10 - gsmtp
... continues on with successful email transmission