Я использую GlassFish Server 3.1 и почтовый API Java 1.4.5.
Сценарий: у меня есть апплет, который при нажатии отправляет сообщение электронной почты.
Отправка почты отлично работает в Netbeans AppletViewer, но превращается в ад при добавлении в браузер и попытке отправить оттуда электронное письмо.
Я часами читал о файлах политик, подписанных/неподписанных апплетах... и т.д.
Я пробовал использовать подписанный апплет (множество руководств по его подписанию, было довольно просто с использованием клавишных инструментов из java). Когда я запускаю его в браузере, он запрашивает разрешение, потому что это самозаверяющий сертификат, я даю ему разрешение, но он все равно выдает то же исключение.
Я также попытался изменить файл 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();