sendMail
でServlet
JavaMail
を実行しています。私が持っています javax.mail.AuthenticationFailedException
私の出力。誰でも助けてくれますか?ありがとう。
sendMailServletコード:
try {
String Host = "smtp.gmail.com";
String from = "[email protected]";
String pass = "pass";
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.Host", Host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
Address fromAddress = new InternetAddress(from);
Address toAddress = new InternetAddress("[email protected]");
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.setSubject("Testing JavaMail");
message.setText("Welcome to JavaMail");
Transport transport = session.getTransport("smtp");
transport.connect(Host, from, pass);
message.saveChanges();
Transport.send(message);
transport.close();
}catch(Exception ex){
out.println("<html><head></head><body>");
out.println("ERROR: " + ex);
out.println("</body></html>");
}
GlassFish 2.1での出力:
DEBUG SMTP: trying to connect to Host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP 36sm10907668yxh.13
DEBUG SMTP: connected to Host "smtp.gmail.com", port: 587
EHLO platform-4cfaca
250-mx.google.com at your service, [203.126.159.130]
250-SIZE 35651584
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 PIPELINING
DEBUG SMTP: Found extension "SIZE", arg "35651584"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO platform-4cfaca
250-mx.google.com at your service, [203.126.159.130]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
DEBUG SMTP: Found extension "SIZE", arg "35651584"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
aWpveWNlbGVvbmdAZ21haWwuY29t
334 UGFzc3dvcmQ6
MTIzNDU2Nzhf
235 2.7.0 Accepted
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
カスタム Authenticator
を実装する必要があります
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
class GMailAuthenticator extends Authenticator {
String user;
String pw;
public GMailAuthenticator (String username, String password)
{
super();
this.user = username;
this.pw = password;
}
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user, pw);
}
}
Session
で使用します
Session session = Session.getInstance(props, new GMailAuthenticator(username, password));
JavaMail FAQ も確認してください
このエラーは、Googleセキュリティからのものです...これは、安全性を低くすることで解決できます。
このリンクに移動: " https://www.google.com/settings/security/lesssecureapps "を選択して "TURN ON"にすると、アプリケーションが確実に実行されます。
下の行にこの認証子オブジェクト引数がありませんでした
Session session = Session.getInstance(props, new GMailAuthenticator(username, password));
この行で私の問題は解決しました。Javaアプリケーションを使用してメールを送信できます。残りのコードは上記のように簡単です。
問題は、transport
オブジェクトを作成し、その接続メソッドを使用して自分自身を認証することです。ただし、その後、static
メソッドを使用して、オブジェクトによる認証を無視するメッセージを送信します。
そのため、オブジェクトでsendMessage(message, message.getAllRecipients())
メソッドを使用するか、他の人が提案したオーセンティケーターを使用して、セッションを通じて認証を取得する必要があります。
Java Mail FAQ をお読みください。
あなたと共有したいだけです:
デジタルオーシャンマシン(IPアドレス)を変更した後、このエラーが発生しました。どうやらGmailはそれをハッキング攻撃として認識したようです。彼らの指示に従い、新しいIPアドレスを承認すると、コードが戻って実行されます。
新しいデバイスまたはアプリケーションからGoogleアカウントにサインインしようとすると、CAPTCHAのロックを解除する必要があります。 CAPTCHAのロックを解除するには、 https://www.google.com/accounts/DisplayUnlockCaptcha に移動してから
また、 安全性の低いアプリを許可する