6

あるアプリケーションでは、Java を使用してメール送信ロジックを実装しました。有効な Gmail ID とパスワードを使用smtp.gmail.comしました。587 port開発環境では、すべて正常に動作しています。しかし、実稼働環境では、そのドメインで有効な電子メール ID とパスワードを使用smtp.xyz.inして、別のメール サーバーを使用する必要があります。port 25

次のコードで SSL を有効にすると、次のようになります。

エラーが発生します

Could not convert socket to TLS

SunCertPathBuilderException: Unable To Find Valid Certification Path To Requested Target

================================================== =====

final ResourceBundle rsbd=ResourceBundle.getBundle("main/ResourceBundle/Dyna");

        // -- Attaching to default Session, or we could start a new one                                            

                    props.put("mail.smtp.host", smtpServer);

                props.put("mail.smtp.auth", "true");

                props.put("mail.debug", "true");

            props.put("mail.smtp.port", port); 

                props.put("mail.smtp.starttls.enable","true");

            props.put("mail.smtp.EnableSSL.enable","true");

  Session session =Session.getInstance(props, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(admin_mail, admin_password);}});

         // -- Create a new message --
      Message msg = new MimeMessage(session);

     // -- Set the FROM and TO fields --
      msg.setFrom(new InternetAddress(from));

      msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email, false));

      msg.setSubject(subject);
      msg.setText(emailContent);

      // -- Set some other header information --
      msg.setHeader("X-Mailer", "LOTONtechEmail");
      msg.setSentDate(new Date());

        // -- Send the message --
        Transport.send(msg);

EnableSSL を削除して、次のコードを追加しようとすると:

(getting javax.mail.AuthenticationFailedException:535 5.7.3 Authentication unsuccessful)

================================================== ========================

props.put("mail.smtp.socketFactory.port","25");

  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

  props.put("mail.smtp.socketFactory.fallback", "true");


  MailSSLSocketFactory sf=new MailSSLSocketFactory();

  sf.setTrustAllHosts(true);

  props.put("mail.smtp.ssl.socketFactory", sf);

過去 3 日間で十分にグーグルで検索した結果、こちらのように信頼できる証明書を構成する必要があることを理解しました。

しかし、SSL を有効にするために、暗号化も盗用もせずに続行したいと考えています。SSL を有効にせずに、独自のドメインを介して Java プログラムで電子メールを送信する方法はありますか。どんな助けでも大歓迎です。

4

6 に答える 6

11

SSL/TLS が必要かどうかは、メール サーバーによって制御されます。それが必要な場合は、それを使用する必要があります。

mail.smtp.ssl.trust プロパティを設定して証明書の問題を無視するか、 JavaMail FAQの説明に従って修正することができます。

于 2013-06-25T17:20:47.950 に答える
1

使用している場合

        props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");

SMTP サーバーからの SSL 構成を回避するには、このスニペットを削除してください。

于 2015-11-03T09:44:58.310 に答える