我通过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身份验证凭据无效
-Why会发生这种情况吗?-How会修复电子邮件发送吗?
发布于 2016-06-28 13:30:11
你应该读这个常见问题的答案
JavaMail目前不支持通过web代理服务器访问邮件服务器。使用代理服务器的主要原因之一是允许来自公司网络内部的HTTP请求通过公司防火墙。防火墙通常会阻止对Internet的大多数访问,但将允许来自代理服务器的请求通过。此外,公司网络内的邮件服务器将对电子邮件执行类似的功能,通过SMTP接受邮件并将其转发到因特网上的最终目的地,并接受传入的邮件并将其发送到适当的内部邮件服务器。 如果代理服务器支持SOCKS V4或V5协议(http://www.socks.nec.com/aboutsocks.html,RFC1928)并允许匿名连接,并且使用JDK1.5或更高版本和JavaMail 1.4.5或更高版本,则可以通过为com.sun.mail.smtp包设置javadocs中描述的"mail.smtp.socks.host“属性,在每个会话、每个协议的基础上配置SOCKS。"imap“和"pop3”协议也存在类似的属性。 如果使用的是较早版本的JDK或JavaMail,则可以告诉Java运行时将所有TCP连接定向到SOCKS服务器。有关socksProxyHost和socksProxyPort属性的最新文档,请参阅Networking指南。这些是系统级属性,而不是JavaMail会话属性.它们可以在调用应用程序时从命令行设置,例如: java -DsocksProxyHost=myproxy .此工具可用于将SMTP、IMAP和POP3通信从JavaMail引导到SOCKS代理服务器。请注意,设置这些属性会将所有TCP套接字指向SOCKS代理,这可能会对应用程序的其他方面产生负面影响。 如果没有这样的SOCKS服务器,如果您想使用JavaMail间接地访问防火墙之外的邮件服务器,您可能可以使用诸如Cork螺杆之类的程序,或者通过HTTP代理服务器连接到隧道TCP连接。JavaMail不支持通过HTTP服务器进行直接访问。
https://stackoverflow.com/questions/38077509
复制相似问题