当前位置: 首页 > 知识库问答 >
问题:

如何通过代理服务器用Java(JSP)发送电子邮件?

林涵映
2023-03-14

我正在使用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代理服务器访问邮件服务器。请告诉我如何重新爱上它?或者请建议其他机制,通过Java JSP发送电子邮件的API。并提出了一些通过Java(JSP)发送短信的想法。

共有2个答案

阎作人
2023-03-14

您可以尝试简单Java邮件,这是一个活动的开源库,您可以轻松配置SOCKS5代理(甚至是经过身份验证的代理!)。

Mailer mailer = new Mailer(
        new ServerConfig(smtpHost, smtpPort, smtpUser, smtpPassword),
        TransportStrategy.SMTP_PLAIN,
        new ProxyConfig(proxyHost, proxyPort /*, proxyUser, proxyPassword */)
);
凤衡
2023-03-14

请看以下内容:JAVA mail API常见问题解答,尽管它可以使用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的javadocs中所述。太阳邮政smtp包。“imap”和“pop3”协议也有类似的属性

 类似资料:
  • 我有一个服务器与静态IP在我的家里,我服务我自己的网页与一个域和所有工作良好。 在我的网页,你可以通过电子邮件和密码注册。当您注册一个名为nodemailer的节点模块,从google帐户发送电子邮件时,问题是google帐户有一个发送电子邮件的限制。 所以我需要将nodemailer模块连接到我自己家里的服务器上。 我在谷歌上搜索,但没有类似的答案。 如何在NodeJS中使用后缀?? http:

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 我被困在一个公司防火墙后面,它不允许我通过Java Mail API或Apache Commons电子邮件等传统方式发送电子邮件,甚至不允许我发送给公司内部的其他人(无论如何,这就是我想要的)。但我的Outlook 2010显然可以发送这些电子邮件。我想知道是否有办法通过Java代码自动化Outlook 2010,以便Outlook可以发送电子邮件?我知道像“mailto”这样的东西可以用来弹出带

  • 下面是错误和超时异常。 输入代码: 调试SMTP:正在尝试连接到主机“SMTP.gmail.com”,端口587,isSSL true Exceptioninthread“main”java。lang.RuntimeException:com。太阳邮政util。MailConnectException:无法连接到主机,端口:smtp。gmail。com,587;超时-1。

  • 问题内容: 在我的中,我具有以下内容: 我的电子邮件代码: 当然,如果通过设置调试服务器,则可以在终端中看到该电子邮件。 但是,我实际上如何不将电子邮件发送到调试服务器,而是发送到user@gmail.com? 阅读你的答案后,让我弄明白一点: 你不能使用localhost(简单的ubuntu pc)发送电子邮件吗? 我认为在django 1.3中已经过时了,取而代之的是? 问题答案: 将电子邮件

  • 它显示以下错误: JasperException:处理JSP页面/assignment3/send_email.JSP第132 129行时发生异常:Message Message=new MimeMessage(session1);130:131://Set FROM:header标头字段。132:message.setFrom(新InternetAddress(from));133:134://