JavaMailを使用して小さなJavaアプリケーションを作成しています。このJavaMailを使用すると、ユーザーに自動メールが送信されます。彼らは2つのポート(今のところ)25と587の間で選択できます。ポートはGUIのラジオボタンで選択できます。JavaMailポートを変更するには
テストボタンを追加して、ユーザーがメール設定(ポートを含む)をテストできるようにしました。ただし、何らかの理由で、ユーザーがテスト電子メールを送信しようとすると、ポートを変更することはできません。 Javamailは、元のテスト電子メールのポートを常に使用します。
例:ユーザーはポート25で電子メールを送信しようとしますが、JavaMailはポート25で接続できないとします(たとえば、SMTPホストは別のポートを使用します)。ユーザーはポート587をクリックし、新しい電子メールを送信しようとします。 JavaMailはポート25に接続できないというエラーを返します。
私はなぜかそんなに困っています。新しいテスト電子メールが送信されるたびに、まったく新しいSendMailUsingAuthenticationオブジェクトが作成されます。そのクラス内では、プロパティは常に適切なポートにリセットされます。私が見る限り、デバッグするたびに、すべての変数は正しいものであり、正しいポートに関連付けられています。私は行方不明のトランスポートの中に何か起こっていますか?電子メールの送信者クラスで
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {
int port = port25RadioButton.isSelected() ? PORT_25 : PORT_587;
notifier = new SendMailUsingAuthentication(hostNameTextField.getText(),
userTextField.getText(), getPassword(), emailTextField.getText().split(","),port);
Thread wait = new Thread(new Runnable() {
public void run() {
try {
changeStatusText("Sending test email...");
notifier.postTestMail();
changeStatusText("Test email sent.");
} catch (AddressException ex) {
changeStatusText("Error. Invalid email address name.");
} catch (MessagingException ex) {
changeStatusText("SMTP host connection refused.");
System.err.println(ex.getMessage());
} catch (Exception ex) {
System.err.println(ex);
}
}
});
wait.start();
}
:フロントエンドGUIで
public void postTestMail() throws MessagingException, AddressException{
String[] testReciever = new String[1];
testReciever[0] = emailList[0];
postMail(testReciever, "Test email.", "Your email settings are successfully set up.", emailFromAddress);
}
private void postMail(String recipients[], String subject,
String message, String from) throws MessagingException, AddressException {
//Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.port", smtpPort);
props.put("mail.smtp.host", smtpHostName);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", true);
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(false);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}