我使用javamail发送邮件(SMTP协议)如下
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 :(得分:0)
根据the documentation,如果没有设置java.net.Authenticator,则只查询java.net.socks.username属性。也许JVM中的其他一些代码设置了默认的Authenticator?如果您有适当的权限,请尝试setting your own default java.net.Authenticator。
答案 1 :(得分: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);
答案 2 :(得分:0)
JavaMail不支持代理身份验证,只支持匿名SOCKS代理。我不知道除Simple Java Mail之外的任何java库,它是开源的。
简单Java Mail使用a trick添加对经过身份验证的代理的支持:它运行临时匿名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);
您不需要设置任何属性或其他配置,所有这些都需要处理。