首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javamail忽略socks代理

javamail忽略socks代理
EN

Stack Overflow用户
提问于 2012-11-16 08:17:08
回答 2查看 2.7K关注 0票数 1

我已经将javamail设置为通过socks代理运行,但它不会通过它。我尝试同时设置mail.smtp.socks.host和mail.smtp.socks.port,但它一直直接指向邮件主机。我觉得我错过了一些非常基本的东西。任何帮助都将不胜感激。下面是我的属性:

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 08:49:18

首先修复这些common mistakes

如果这还不能解决问题,请发布调试输出。将系统属性"mail.socket.debug“设置为"true”以获取其他调试输出。

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

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

票数 1
EN

Stack Overflow用户

发布于 2016-07-08 03:13:41

你可以试着找出正确的属性组合,包括Bill提到的常见错误,或者你也可以简单地让Simple Java Mail (开源)帮你找出来:

您的示例转换为:

代码语言:javascript
复制
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应用程序接口。如果需要,您也可以使用经过身份验证的代理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13408521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档