【问题标题】:SMTP - Email sending fails via proxy (JAVA)SMTP - 通过代理发送电子邮件失败 (JAVA)
【发布时间】:2016-10-30 20:35:04
【问题描述】:

我通过 SMTP 发送电子邮件(使用邮件提供商 web.de),使用以下代码:

    package form.controll;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class NotificationControllerTest {

  @Before
  public void setUp() throws Exception {
  }

  @After
  public void tearDown() throws Exception {
  }

  @Test
  public void test() {
    NotificationController aNotifi = new NotificationController( "smtp.web.de", "587" );
    aNotifi.sendEmail( "TARGETEMAIL@blabla.de", "SENDERSEMAIL@web.de", "THESENDERSPASSWORD", "New User Registration Notification", "New User has just been registered to blabla" );
  }

}

这很好用,但如果我在代理上下文中使用相同的方法, 我总是得到错误:

535 身份验证凭据无效

-为什么会这样? -如何修复电子邮件发送?

【问题讨论】:

    标签: java proxy smtp


    【解决方案1】:

    你应该阅读this FAQ answer

    JavaMail 目前不支持通过 网络代理服务器。使用代理服务器的主要原因之一是 允许来自公司网络内的 HTTP 请求通过 企业防火墙。防火墙通常会阻止大多数访问 Internet,但将允许来自代理服务器的请求通过 通过。此外,公司网络内的邮件服务器将 对电子邮件执行类似的功能,通过 SMTP 接受消息和 将它们转发到 Internet 上的最终目的地,以及 接受传入的消息并将它们发送到适当的 内部邮件服务器。

    如果您的代理服务器支持 SOCKS V4 或 V5 协议 (http://www.socks.nec.com/aboutsocks.html, RFC1928) 并允许 匿名连接,并且您使用的是 JDK 1.5 或更新版本以及 JavaMail 1.4.5 或更高版本,您可以通过将“mail.smtp.socks.host”属性设置为按会话、按协议配置 SOCKS 代理 在 com.sun.mail.smtp 包的 javadocs 中进行了描述。相似的 “imap”和“pop3”协议存在属性。

    如果您使用的是旧版本的 JDK 或 JavaMail,您可以知道 Java 运行时将所有 TCP 套接字连接定向到 SOCKS 服务器。有关最新信息,请参阅网络属性指南 socksProxyHost 和 socksProxyPort 属性的文档。 这些是系统级属性,而不是 JavaMail 会话属性。 可以在调用应用程序时从命令行设置它们, 例如: java -DsocksProxyHost=myproxy .... 这个工具可以是 用于将 SMTP、IMAP 和 POP3 通信从 JavaMail 定向到 SOCKS 代理服务器。请注意,设置这些属性会指示所有 到 SOCKS 代理的 TCP 套接字,这可能会对 应用程序的其他方面。

    如果没有这样的SOCKS服务器,如果要使用JavaMail来访问 间接在防火墙外的邮件服务器,您也许可以使用 诸如 Corkscrew 之类的程序或连接到隧道 TCP 连接 通过 HTTP 代理服务器。 JavaMail 不支持直接访问 通过 HTTP 代理网络服务器。

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2013-10-15
      • 2017-02-09
      • 2018-09-01
      • 2018-01-09
      • 2011-02-08
      • 1970-01-01
      • 2011-12-10
      • 2013-08-22
      相关资源
      最近更新 更多