【问题标题】:How to Properly Setup a Java Web Applet Using SMTP on a Server如何在服务器上使用 SMTP 正确设置 Java Web Applet
【发布时间】:2012-02-23 20:52:33
【问题描述】:

我需要一个 Java Web 小程序通过 SMTP 发送自动电子邮件。从编程的角度来看,我对服务器和通信比较陌生。因此,我没有使用 servlet,只是在我的 web 小程序中运行 java 邮件 api。当我通过 Netbeans 运行它并使用 Glassfish 时,它运行良好。我想把它放到公司的服务器上,这样就可以从他们的网站上运行。

我知道如何嵌入小程序等,但我不确定电子邮件服务将如何工作。据我了解,我需要在服务器的类路径上或在小程序运行时在附近的目录中设置适当的 jar 文件(邮件、激活、pop3 等)。我假设该服务器将执行类似于 Glassfish 的操作,因为我可以在 netbeans 之外编译和运行小程序中的所有内容,但是当小程序尝试发送电子邮件时会出现 classnotfound/classnotdef 错误。这似乎是由于缺少类似于 Glassfish 的服务器环境。

同样,我对服务器通信和结构这一领域还很陌生,因此任何有助于介绍的指南都会很有用。除此之外,任何快速启动的建议也将不胜感激,以暂时让工作进展顺利。

最后,Glassfish 和 Apache 和 Tomcat 等其他服务究竟为 Netbeans 提供了什么?他们似乎需要在 Netbeans 中开发任何与 Web 相关的东西,尽管我可以在 Netbeans 之外运行小程序(不包括邮件服务),它实际上在做什么?它是模仿完整服务器流程的人造服务器吗?我花了几个小时试图了解有关这些事情的更多信息,但对于我发现的所有这些,并没有一个基本的方法/原因。

感谢您的任何指导。

【问题讨论】:

  • “我知道如何嵌入小程序等” 你确定吗?它似乎被.. “但是当小程序尝试发送电子邮件时出现 classnotfound/classnotdef 错误”。你得到了什么确切的异常,里面的那些类(throwables 中提到的那些)是什么罐子?
  • 您希望客户端还是服务器发送电子邮件? Applet 在客户端上运行,servlet 在服务器上运行——每个都有一个单独的类路径。最好在服务器上发送电子邮件,但更难设置
  • 所以,所有的图形和常规功能在小程序中都可以正常工作。当调用 send message 函数时,它会向终端吐出 classnotfound/classnotdef 错误。它无法找到指向邮件 jar 的 javax/mail/address。我将把它放在服务器上的什么位置,我需要将小程序定向到它吗?在这一点上,我相信客户正在发送电子邮件。我现在很好,它没有做一个庞大的邮件列表或任何繁重的任务。

标签: java applet glassfish web


【解决方案1】:

我会将它放在服务器的什么位置,..

在 JRE 可以访问的地方。一些服务器目录被禁止进入 applet(和一般浏览),但 JRE 应该能够从中加载 Jars 的一个地方是与 HTML 相同的目录。这不是最佳解决方案,但它会起作用。

如果您希望使用“最佳”,我会将所有小程序的所有罐子放在一个目录中,/lib(公共站点根目录的 lib 目录 - mydomain.com -> mydomain.com/lib)。

..我需要将小程序指向它吗?

是的。这是使用applet 元素的archive 属性完成的。详情请见The APPLET Tag


一旦它使用普通的小程序元素工作,最好转换为使用deployJava.js 启动。该脚本对 JRE 进行最小版本检查。但首先在一台已经拥有运行小程序所需的最低 JRE 的机器上使用 applet 元素让它工作 - 它更简单。


顺便说一句 - 此小程序需要经过最终用户的数字签名和信任,才能将电子邮件发送到其他域的地址。从服务器发送邮件的优点之一是小程序可以被沙盒化,因为它只需要“打电话回家”就可以发送信息 - 服务器会完成剩下的工作。


关于数字签名,我没有听说这是发送邮件的要求。

你前面有一条陡峭的学习曲线。 ;)

您能解释一下为什么需要签名吗?

What Applets Can and Cannot Do

未签名的小程序

未签名的小程序可以执行以下操作:

  • 他们可以与他们来自的主机建立网络连接。
  • ...

来自 Oracle 的引述,强调 & 大胆 由我。做出此决定的原因之一是因为(当时的所有者)Sun 不希望小程序通过跨站点请求资源而名声不佳(我直接从您的站点中提取图像以将其显示在我站点上的小程序中)。它被称为热链接,并且非常不受欢迎,因为我的网站正在获得好处(和访问者),但您的网站正在为资源托管和下载付费。

另一个原因是小程序可能会启动,然后通过数千次请求单个资源来攻击站点。获得一个在上千个浏览器中发生这种情况(隐藏在后台)的“kewl”小程序游戏,您可能会导致网站崩溃。这被称为“拒绝服务”攻击。

因此 Sun 决定,只有获得用户信任的小程序才能跨域访问,而获得这种信任的唯一方法是让开发人员签署代码,JRE 询问用户是否允许它运行,用户确定该提示。

最近,Sun 开始识别 ..cross-domains.xml(或类似的名称)。如果您将其中一个文件放在您网站上的正确名称/位置,您可以向 JRE 发出信号,表示可以允许访问来自其他网站的小程序资源(无需用户明确许可)。

我怀疑这是否适用于电子邮件,即使邮件发送到的域具有允许它的适当文件。但我没有测试过。

【讨论】:

  • 谢谢,这对我来说回答得很好。关于数字签名,我没有听说这是发送邮件的要求。目前,它只是发送文本,因此直接文件交换不需要签名。此外,如果有影响,则从客户端发送电子邮件。你能解释一下为什么需要签名吗?
  • 查看编辑。但请注意,最好(也是预期的)将其保留为“每个主题一个问题”,以及“可以快速/简洁回答的问题”。这个问答正在寻求发展成一个传奇。因此,我认为您应该在这个问题中只关注类路径,而将数字代码签名和信任留给其他问题。
猜你喜欢
  • 2011-01-09
  • 2017-06-08
  • 2014-03-02
  • 2012-06-25
  • 1970-01-01
  • 2012-05-01
  • 2021-07-01
  • 2021-05-10
  • 2012-05-07
相关资源
最近更新 更多