2012-07-12 150 views
0

代理的用户名/密码,我在使用JavaMail发送邮件(SMTP协议)如下如何设置袜子在Java邮件

String host = "smtp.gmail.com"; 
: 
props.put("mail.smtp.auth", "true"); 

props.put("mail.smtp.socks.host","sock_proxy_host"); 
props.put("mail.smtp.socks.port","sock_proxy_port"); 

Session session = Session.getInstance(props,new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("..", ".."); 
     } 
}); 

但是我使用socks代理需要基本身份验证。我想设置凭据作为

System.setProperty("java.net.socks.username", "socks_username");    
System.setProperty("java.net.socks.password", "socks_passwd"); 

是否有任何其他的方式来设置socks代理的用户名/密码(使用JavaMail API)?

+0

JavaMail使用java.net.Proxy类来提供SOCKS支持,但不幸的是,它不允许指定代理的用户名和密码。按照下面的建议希望设置一个Authenticator将会起作用。 – 2014-04-02 02:00:42

回答

0

您应该java.net.Authenticator中定义一个类实现:

java.net.Authenticator authenticator = new java.net.Authenticator() { 

protected java.net.PasswordAuthentication getPasswordAuthentication() { 
     return new java.net.PasswordAuthentication(username, password.toCharArray()); 
     } 
}; 

System.setProperty("java.net.socks.username", username); 
System.setProperty("java.net.socks.password", password); 
java.net.Authenticator.setDefault(authenticator); 
0

的JavaMail不支持代理身份验证,只有匿名SOCKS代理。我不知道任何java库,除了Simple Java Mail,这是开源的。

简单的Java邮件增加了支持使用a trick认证代理:它运行一个临时的匿名SOCKS服务器用来为JavaMail连接到同一台主机上,然后通过中继验证手动到外部SOCKS代理的JavaMail外的连接。

这里是再次你的代码,但使用简单的Java邮件此时:

Mailer mailer = new Mailer(
     new ServerConfig("smtp.gmail.com", thePort, "..", ".."), 
     TransportStrategy.SMTP_TLS, 
     new ProxyConfig("sock_proxy_host", "sock_proxy_port", socks_username, socks_passwd) 
); 

mailer.sendMail(email); 

你不需要设置任何财产或其他配置,这一切都照顾。

相关问题