web-dev-qa-db-ja.com

エラーjavax.mail.AuthenticationFailedExceptionを解決します

私は、Javaでメールを送信するためのこの機能に慣れていません。パスワードをリセットするためのメールの送信中にエラーが発生します。あなたが私に解決策を与えることができることを願っています。

以下は私のコードです:

public synchronized static boolean sendMailAdvance(String emailTo, String subject, String body)
{
    String Host = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ADDRESS");
    String userName = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-USERNAME");
    String password = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PASSWORD");
    String port = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PORT");
    String starttls = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-STARTTLS");
    String socketFactoryClass = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-SOCKET-CLASS");
    String fallback = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ALLOW-FALLBACK");                         

    try
    {
        Java.util.Properties props = null;
        props = System.getProperties();
        props.put("mail.smtp.user", userName);
        props.put("mail.smtp.Host", Host);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.debug", "true");

        if(!"".equals(port))
        {
            props.put("mail.smtp.port", port);
            props.put("mail.smtp.socketFactory.port", port);
        }

        if(!"".equals(starttls))
            props.put("mail.smtp.starttls.enable",starttls);

        if(!"".equals(socketFactoryClass))                   
            props.put("mail.smtp.socketFactory.class",socketFactoryClass);

        if(!"".equals(fallback))
            props.put("mail.smtp.socketFactory.fallback", fallback);

        Session session = Session.getDefaultInstance(props, null);
        session.setDebug(true);

        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(userName));
        msg.setSubject(subject);                
        msg.setText(body, "ISO-8859-1");
        msg.setSentDate(new Date());
        msg.setHeader("content-Type", "text/html;charset=\"ISO-8859-1\"");
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
        msg.saveChanges();

        Transport transport = session.getTransport("smtp");
        transport.connect(Host, userName, password);
        transport.sendMessage(msg, msg.getAllRecipients());
        transport.close();
            return true;
    }
    catch (Exception mex)
    {
        mex.printStackTrace();
        return false;
    }
}

次のエラーをスローします。

デバッグ:setDebug:JavaMailバージョン1.4.1ea-SNAPSHOT

DEBUG: getProvider() returning   javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

SMTPのデバッグ:useEhlo true、useAuth true

デバッグSMTP:ホスト「smtp.gmail.com」、ポート465、isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38-gsmtpに接続しようとしています

デバッグSMTP:ホスト "smtp.gmail.com"に接続、ポート:465

EHLOファチン

サービスの250-mx.google.com、[175.139.198.14]

250-サイズ35882577

250-8BITMIME

250-AUTHログインPLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN

250の強化されたステータスコード

250チャンキング

デバッグSMTP:拡張機能「SIZE」、引数「35882577」が見つかりました

デバッグSMTP:拡張機能「8BITMIME」、引数「」が見つかりました

デバッグSMTP:拡張機能「AUTH」、引数「LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN」が見つかりました

デバッグSMTP:拡張機能「ENHANCEDSTATUSCODES」、引数「」が見つかりました

デバッグSMTP:拡張機能「CHUNKING」、引数「」が見つかりました

SMTPのデバッグ:認証の試行

AUTHログイン

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk =

334 UGFzc3dvcmQ6

Ymxvb21pbmc = 535-5.7.8ユーザー名とパスワードは受け入れられません。 535 5.7.8で詳細をご覧ください http://support.google.com/mail/bin/answer.py?answer=14257

m4sm5929870pbg.38-gsmtp

[STDOUT] javax.mail.AuthenticationFailedException

[STDOUT] at javax.mail.Service.connect(Service.Java:319)

[STDOUT] at javax.mail.Service.connect(Service.Java:169)

[STDOUT] at com.vlee.util.mail.SendMail.sendMailAdvance(SendMail.Java:283)

[STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.Java:251)

[STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.doPost(DoMemberLogin.Java:72)

32
Fatin Az

ポートを587に変更する必要があります。コードをテストしましたが、正常に動作しています

それでもエラーが発生する場合は、セッション変数を次のコードに変更してください。

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
14
Ha Nguyen

この問題は、Gmailアカウントの保護が原因である可能性があります。下のリンクをクリックして、セキュリティ設定を無効にしてください。動作します。 https://www.google.com/settings/security/lesssecureapps

76
Raj008
20
Anil Amane

デフォルトでは、Gmailアカウントは高度に保護されています。 Gmail以外のツールからGmail SMTPを使用すると、メールがブロックされます。ローカル環境でテストするには、Gmailアカウントの安全性を低くします

  1. Gmailにログインします。
  2. https://www.google.com/settings/security/lesssecureapps としてURLにアクセスします
  3. [オンにする]を選択します
10
amitkumar

ほとんどのAuthenticationFieldExceptionエラーは、サインインが妨げられたときに発生します。最初にGmailにログインし、 https://www.google.com/settings/security/lesssecureapps にアクセスして、オンにします。このようにしてこの種の問題を解決しました。

8
sawpyae

これを変更します(安全性の低いアプリを設定します): https://www.google.com/settings/security/lesssecureapps

4
Do Nhu Vy

新しいアプリケーションまたはデバイスからGmailアカウントにログインしている場合、Googleはそのデバイスをブロックしている可能性があります。次の手順に従ってください:

アカウントを保護するために、Googleがあなたでないと疑われる場合、アカウントへのログインが困難になる場合があります。たとえば、旅行中または新しいデバイスからアカウントにサインインしようとすると、Googleはユーザー名とパスワード以外の追加情報を要求する場合があります。

以前にGoogleアカウントへのアクセスに使用した別のデバイスから https://g.co/allowaccess に移動し、指示に従います。ブロックされたアプリからもう一度サインインしてみてください。

4
Mate Šimović

私は長い間同じエラーを受け取っています。

セッションデバッグをtrueに変更したとき

Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);

ヘルプURL https://support.google.com/mail/answer/78754 をコンソールからjavax.mail.AuthenticationFailedExceptionとともに取得しました。

リンクの手順から、各手順を実行しました。驚いたことに、文字、数字、記号を組み合わせてパスワードを変更したとき、メールは認証例外なしで生成されました。

注:私の古いパスワードはより安全性が低かった。

2
Vino

2つの考えられる理由:

  • ユーザー名には、メールID「[email protected]」全体が必要な場合があります
  • 最も明らかなのは、パスワードが間違っていることです。使用されているパスワードが正しいかどうかを確認するためにデバッグします。
1
Kedar

私のために働く解決策には2つのステップがあります。

  1. 最初の一歩

    package com.student.mail;
    
    import Java.util.Properties;
    
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     *
     * @author jorge santos
     */
    public class GoogleMail {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("mail.smtp.Host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465"); 
            Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("[email protected]","Silueta95#");
                }
            });
    
        try {
    
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("[email protected]"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("[email protected]"));
            message.setSubject("Testing Subject");
            message.setText("Test Mail");
    
            Transport.send(message);
    
            System.out.println("Done");
    
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
    
    }
    
  2. Gmailセキュリティを有効にする

    https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none
    
1

誰かがこの問題の解決策を探している場合に備えて。

認証の問題は、使用中のアカウントに対してGoogleの2段階認証を有効にし、アプリ固有のパスワードを作成することで軽減できます。 OPと同じ問題がありました。 2ステップの有効化が機能しました。

0
Anil Muppalla

私もこの問題を抱えていましたが、ソリューションはコーディングとは何の関係もありませんでした。 Gmailに接続できることを確認してください。 smtp.gmail.comにPingします。返信がない場合は、ファイアウォールの設定を確認してください。また、プロキシ設定の問題である可能性があります。

0
FCoffee
trying to connect to Host "smtp.gmail.com", port 465, isSSL false

GmailのSMTP設定が間違っています。 GmailにはSSLが必要です。 Gmail SMTP経由でJava経由でメールを送信する方法に関するチュートリアルを参照してください。例: http://www.mkyong.com/Java/javamail-api-sending-email-via-gmail- smtp-example /

0
gerrytan