我通过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身份验证凭据无效
- 为什么会这样? - 如何修复电子邮件发送?
答案 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服务器。