我正在使用以下代码通过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身份验证凭据无效

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

最佳答案

您应该阅读this FAQ answer


JavaMail当前不支持通过以下方式访问邮件服务器:
Web代理服务器。使用代理服务器的主要原因之一是
允许来自公司网络内的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...。此功能可以是
用于将JavaMail的SMTP,IMAP和POP3通信定向到
SOCKS代理服务器。请注意,设置这些属性将指导所有
SOCKS代理的TCP套接字,这可能会对
应用程序的其他方面。

如果没有此类SOCKS服务器,则要使用JavaMail进行访问
邮件服务器间接位于防火墙之外,您也许可以使用
诸如Corkscrew之类的程序,或连接至隧道TCP连接
通过HTTP代理服务器。 JavaMail不支持直接访问
通过HTTP代理Web服务器。

09-30 18:16
查看更多