我正在使用JavaMail API在J中发送电子邮件。如果我在没有代理的情况下通过网络使用它,它的工作正常,但我们的大学使用代理服务器,这就是为什么它不能在大学里工作。我认为我们的大学代理服务器仅支持HTTP和HTTPS代理,而不支持SOCKS代理。 我用过
props.put("http.proxyHost", "XXX.XXX.XXX.XXX");
props.put("http.proxyPort", "XXXX");
props.put("https.proxyHost", "XXX.XXX.XXX.XXX");
props.put("https.proxyPort", "XXXX");
我也尝试设置
props.put("mail.smtp.socks.host","XXX.XXX.XXX.XXX");
props.put("mail.smtp.socks.port","XXXX");
但仍然没有工作会产生错误,如
javax.mail.MessagingException: Could not connect to SMTP host: smtp.mail.yahoo.com, port: 465;
nested exception is:
java.net.SocketException: Malformed reply from SOCKS server
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at EmailUtil.sendEmail(EmailUtil.java:33)
at SSLEmail.main(SSLEmail.java:57)
Caused by: java.net.SocketException: Malformed reply from SOCKS server
at java.net.SocksSocketImpl.readSocksReply(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
... 8 more
我知道JavaMail不支持通过Web代理服务器访问邮件服务器。请建议如何重新获得它?或者请建议其他机制,API用于通过Java JSP发送电子邮件。并且还提出了通过Java(JSP)发送SMS的一些想法。
答案 0 :(得分:0)
请参阅:JAVA mail API FAQ ,尽管它可以使用SOCKS代理服务器。
如果您的代理服务器支持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"协议
答案 1 :(得分:0)
您可以尝试Simple Java Mail,这是一个活跃的开源库,您可以使用它轻松配置SOCKS5代理(甚至是经过身份验证的代理!)。
Mailer mailer = new Mailer(
new ServerConfig(smtpHost, smtpPort, smtpUser, smtpPassword),
TransportStrategy.SMTP_PLAIN,
new ProxyConfig(proxyHost, proxyPort /*, proxyUser, proxyPassword */)
);