【问题标题】:javamail ignoring socks proxyjavamail忽略socks代理
【发布时间】:2016-07-08 03:13:40
【问题描述】:

我已经设置 javamail 通过 socks 代理运行,但它不会通过它。我尝试设置 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);

【问题讨论】:

    标签: proxy jakarta-mail socks


    【解决方案1】:

    首先修复这些common mistakes

    如果这不能解决问题,请发布调试输出。将系统属性“mail.socket.debug”设置为“true”以获得额外的调试输出。

    您使用的是什么版本的 JavaMail?什么JDK?

    除非“props”来自 System.getProperties(),否则设置“socksProxyHost”无效。如果您确实将其设置为 System 属性,则不需要 JavaMail socks 属性。

    【讨论】:

    • 原来问题出在普通的pebkac上。我运行的是 javamail 1.4.2,而不是 1.4.5。设置系统 mail.socket.debug 很有帮助。
    • @mlbiam 这不应被接受为答案。赞成有用,是的,但它没有回答你的问题!
    【解决方案2】:

    您可以尝试找出正确的属性组合,包括比尔提到的常见错误,或者您也可以走简单的路,让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());
    

    请注意,您不再需要处理任何属性或 JavaMail API。如果需要,您还可以使用经过身份验证的代理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多