0

I am using javamail for sending mail (SMTP protocol) as follows

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("..", "..");
        }
});

But the socks proxy i am using requires a basic authentication. I am trying to setting the credential as

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

Is there any other way to set the socks proxy username/password (using javamail API)?

4

3 回答 3

0

根据文档,只有在没有设置 java.net.Authenticator 时才会查​​询 java.net.socks.username 属性。也许您的 JVM 中的一些其他代码设置了默认身份验证器?如果您有适当的权限,请尝试设置您自己的默认 java.net.Authenticator

于 2012-07-12T20:38:30.563 回答
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);
于 2014-03-31T23:25:03.210 回答
0

JavaMail 不支持代理认证,只支持匿名 SOCKS 代理。我不知道除了Simple Java Mail之外的任何 java 库,它是开源的。

Simple Java Mail 使用一个技巧添加了对经过身份验证的代理的支持:它运行一个临时匿名 SOCKS 服务器供 JavaMail 连接到同一主机上,然后通过手动验证到 JavaMail 之外的外部 SOCKS 代理来中继连接。

这是您的代码,但这次使用的是 Simple Java Mail:

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);

您无需设置任何属性或其他配置,一切都已处理完毕。

于 2016-07-07T19:40:31.387 回答