我正在使用GlassFish Server 3.1和Java邮件Api 1.4.5。
场景:我有一个applet,点击后会发送一封电子邮件。
发送邮件在Netbeans AppletViewer上完美运行,但在添加到浏览器并尝试从那里发送电子邮件时,它变成了地狱。
我已经阅读了几个小时,关于政策文件,已签名/未签名的小程序......等等。
我尝试过使用已签名的applet(大量的教程用于签名,使用java中的keytools非常简单)。当我在浏览器上运行它时,它会请求权限,因为它是一个自签名证书,我给它许可,但它仍然会发出相同的异常。
我也尝试修改java.poilcy文件添加
权限java.net.SocketPermission“smtp.gmail.com:587”,“听,解决”;
但没有。
我知道这是异常,因为我在Java控制面板中激活了Java控制台。我真的不知道还能做什么。
以下是发送电子邮件的代码:
String host = "smtp.gmail.com";
String from = *****;
String pass = ******;
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
this.message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toAddress = new InternetAddress(this.to);
this.message.addRecipient(Message.RecipientType.TO, toAddress);
this.message.setSubject(this.subject);
this.message.setText(this.body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(this.message, this.message.getAllRecipients());
transport.close();
答案 0 :(得分:3)
JApplet自身处于“沙箱”中,与常规应用程序具有不同的权限(应用程序仅在用户选择直接执行时执行,因此,用户接受后果)。 JApplet在浏览器下载时执行,给用户没有任何选项,这就是为什么如果你想让你的applet部署和执行applet(当applet访问服务器而不是部署服务器的服务器时)签名(自签名证书或授权组织签署的证书,通常意味着支付一些费用),以便用户可以“接受”使用所述Applet的后果,允许它“脱离沙箱”。 / p>
出于某种原因,使用keytolls和jarsigner使用自我证书进行签名对我来说无效。即使当我访问网页并且浏览器警告我执行applet(给我选项不执行它)并且我接受了警告时,似乎JApplet没有获得它的权限。
我的男朋友建议将电子邮件类移出“沙盒”。 他解决了它(祝福他!),将emailClass(使用java邮件api的那个)移动到服务器没有任何问题。使用前端控制器命令进行客户端 - 服务器Arquitecture,我所要做的就是使用我在问题开头发布的代码实现我的Controller类,并从我的applet发送(当点击按钮时)一个http请求使用toEmailAddress,subject和body到我的servlet。
完美无缺。
答案 1 :(得分:2)
您必须对applet进行签名,以便它可以连接到加载它的主机以外的主机,并且您必须使用非自签名证书,否则用户必须在出现提示时接受该证书。
答案 2 :(得分:1)
有几点需要注意:
1)仔细检查并确保您的小程序签名正确无误:
2)看看crossdomain.xml:
3)查看applet.policy
答案 3 :(得分:1)
使用带签名的JNLP分发程序,很容易解决这种情况。
查看有关IDE的JNLP的教程,并阅读本文以获取更多信息: http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html