41

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;
    }
}

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

DEBUG: 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

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

DEBUG SMTP: ホスト「smtp.gmail.com」に接続、ポート: 465

EHLOファチン

250-mx.google.com [175.139.198.14]

250サイズ 35882577

250-8BITMIME

250-AUTH ログイン プレーン XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN

250 拡張ステータスコード

250チャンキング

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

DEBUG SMTP: 拡張子 "8BITMIME"、arg "" が見つかりました

DEBUG SMTP: 拡張子「AUTH」、引数「LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN」が見つかりました

DEBUG SMTP: 拡張子 "ENHANCEDSTATUSCODES"、引数 "" が見つかりました

DEBUG SMTP: 拡張子 "CHUNKING"、arg "" が見つかりました

DEBUG SMTP: 認証を試みます

認証ログイン

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk=

334 ぐんぐん

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)

[標準出力] com.vlee.util.mail.SendMail.sendMailAdvance (SendMail.java:283) で

[標準出力] com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd (DoMemberLogin.java:251) で

[標準出力] com.vlee.servlet.ecommerce.DoMemberLogin.doPost (DoMemberLogin.java:72) で

4

16 に答える 16

82

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

于 2014-11-04T09:13:36.307 に答える
17

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

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

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
于 2013-09-13T04:48:00.123 に答える
8

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

于 2015-09-13T15:43:04.470 に答える
4

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

于 2016-06-20T09:32:17.043 に答える
2

長い間同じエラーが発生しています。

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

Session session = Session.getDefaultInstance(props, new GMailAuthenticator("xxxxx@gmail.com", "xxxxx"));
session.setDebug(true);

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

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

注: 私の古いパスワードは安全性が低くなります。

于 2016-01-17T09:36:51.930 に答える
0
trying to connect to host "smtp.gmail.com", port 465, isSSL false

Gmail の smtp 設定が間違っています。Gmail には SSL が必要です。Gmail SMTP 経由で Java 経由で電子メールを送信する方法に関するチュートリアルを参照してください。

于 2013-09-13T04:24:33.313 に答える
0

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

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

于 2015-12-25T20:12:36.320 に答える
0

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

于 2016-09-12T19:09:54.400 に答える