1

socksプロキシを介して実行するようにjavamailを設定しましたが、通過しません。mail.smtp.socks.hostとmail.smtp.socks.portの両方を設定しようとしましたが、メールホストに直接送信され続けます。非常に基本的なものが欠けているような気がします。どんな助けでもいただければ幸いです。これが私のプロパティです:

props.setProperty("mail.smtp.host", this.smtpHost);
props.setProperty("mail.smtp.port", Integer.toString(this.smtpPort));
props.setProperty("mail.smtp.user", this.smtpUser);
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.starttls.enable", Boolean.toString(this.smtpTLS));
props.setProperty("mail.debug", "true");

if (this.useSOCKSProxy) {
   logger.info("Using proxy");
   props.setProperty("mail.smtp.socks.host", "127.0.0.1");
   props.setProperty("mail.smtp.socks.port", Integer.toString(1080));
   props.setProperty("mail.smtps.socks.host", this.socksProxyHost);
   props.setProperty("mail.smtps.socks.port", Integer.toString(this.socksProxyPort));
   props.setProperty("proxySet", "true");
   props.setProperty("socksProxyHost", this.socksProxyHost);
   props.setProperty("socksProxyPort", Integer.toString(this.socksProxyPort));
}

 //Session session = Session.getInstance(props, new SmtpAuthenticator(this.smtpUser,this.smtpPassword));
Session session = Session.getDefaultInstance(props,
   new Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
         return new PasswordAuthentication(smtpUser, smtpPassword);
      }
   });

 //Session session = Session.getInstance(props, null);
session.setDebugOut(System.out);
session.setDebug(true);
 //Transport tr = session.getTransport("smtp");
 //tr.connect();
 //tr.connect(this.smtpHost,this.smtpPort, this.smtpUser, this.smtpPassword);

Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(this.smtpFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
msg.setSubject(subject);
msg.setText(msgToSend.toString());
msg.saveChanges();

Transport.send(msg);
4

2 に答える 2

1

これらのよくある間違いを修正することから始めます。

それでも問題が解決しない場合は、デバッグ出力を投稿してください。追加のデバッグ出力を取得するには、システムプロパティ「mail.socket.debug」を「true」に設定します。

どのバージョンのJavaMailを使用していますか?何のJDK?

「props」がSystem.getProperties()からのものでない限り、「socksProxyHost」を設定しても効果はありません。また、Systemプロパティとして設定する場合は、JavaMailsocksプロパティは必要ありません。

于 2012-11-16T00:49:17.627 に答える
0

ビルが言及した一般的な間違いを含め、プロパティの正しい組み合わせを理解することを試みることができます。または、簡単な方法でSimple Java Mail(オープンソース)にそれを理解させることもできます。

変換された例:

Mailer mailer = new Mailer(
        new ServerConfig(smtpHost, smtpPort, smtpUser, smtpPassword),
        TransportStrategy.SMTP_TLS,
        this.useSOCKSProxy ? new ProxyConfig(socksProxyHost, socksProxyPort) : null
);

mailer.setDebug(true);

mailer.sendMail(new EmailBuilder()
        .from(null, smtpForm)
        .to(null, email)
        .subject(subject)
        .text(msgToSend.toString())
        .build());

プロパティやJavaMailAPIを処理する必要がなくなったことに注意してください。必要に応じて、認証済みプロキシを使用することもできます。

于 2016-07-07T19:13:40.943 に答える