我正在使用 GlassFish Server 3.1 和 Java 邮件 Api 1.4.5。
场景:我有一个小程序,点击它会发送一封电子邮件。
发送邮件在 Netbeans AppletViewer 上完美运行,但是当添加到浏览器并尝试从那里发送电子邮件时,它变成了地狱。
我已经阅读了几个小时,关于策略文件、签名/未签名的小程序......等等。
我尝试过使用签名的小程序(那里有很多用于签名的教程,使用 java 中的 keytools 非常简单)。当我在浏览器上运行它时,它会请求许可,因为它是自签名证书,我给了它许可,但它仍然吐出相同的异常。
我也尝试过修改 java.poilcy 文件添加
权限 java.net.SocketPermission "smtp.gmail.com:587", "listen,resolve";
但什么都没有。
我知道这是个例外,因为我在 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();