1

パラメータに基づいて電子メールを送信するメソッドを作成しようとしていますが、CentOS と OSX で完全に動作します。ただし、このメソッドは Windows (Windows で再コンパイルした場合でも) やその他の Linux OS では正しく機能せず、MessagingException がスローされます。Windowsで動作するようにこれを修正する方法について誰かアイデアがありますか? ありがとう!

private static void sendEmail(String towhom, String subject, String body) {
  String host = "smtp.gmail.com", from = "myemail", pass = "mypassword";
  Properties props = System.getProperties();
  Scanner scan = new Scanner(System.in);

  try {
     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");

     Session session = Session.getDefaultInstance(props, null);
     MimeMessage message = new MimeMessage(session);
     message.setFrom(new InternetAddress(from));

     InternetAddress toAddress = new InternetAddress(towhom);

     message.addRecipient(Message.RecipientType.TO, toAddress);
     message.setSubject(subject);
     message.setText(body);

     Transport transport = session.getTransport("smtp");
     transport.connect(host, from, pass);
     transport.sendMessage(message, message.getAllRecipients());
     transport.close();
  }
  catch(AddressException e) {
     System.out.println("Invalid Email Address.");
  }
  catch(MessagingException e) {
     System.out.print("\nInvalid Email Address, please reenter it: ");
     sendEmail(scan.nextLine(), subject, body);
  }
}
4

2 に答える 2

2

コードに問題はありません。よさそうです。

JavaMail FAQによると、. 以下が問題になる可能性があります-

  • リクエストを傍受しているファイアウォールまたはウイルス対策プログラムがあります。
  • JDK のインストールに問題があり、信頼できる認証局の証明書を見つけることができません。
  • JDK の信頼できる認証局のリストを上書きしたアプリケーション サーバーで実行しています。

ファイアウォールやウイルス対策を無効にしても問題が解決しない場合は、JDK を再インストールしてテストすることができます。

于 2013-07-04T02:25:54.587 に答える