SMTP - 通过代理(JAVA)发送电子邮件失败

时间:2016-06-28 13:24:43

标签: java proxy smtp

我通过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" );
  }

}

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

535身份验证凭据无效

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

1 个答案:

答案 0 :(得分:1)

您应该阅读this FAQ answer

  

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

     

如果您的代理服务器支持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 ....这个设施可以   用于指导从JavaMail到SMTP,IMAP和POP3通信   SOCKS代理服务器。请注意,设置这些属性会指向所有属性   SOC套接字到SOCKS代理,可能会对其产生负面影响   您申请的其他方面。

     

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