#java #email #jsp #jakarta-mail
#java #Адрес электронной почты #jsp #джакарта-почта
Вопрос:
Я написал этот index.jsp
код для отправки почты другому человеку с помощью Gmail. Но это не работает и выдает мне эту ошибку.
«введите отчет об исключении
Сообщение об ошибке внутреннего сервера
Описание
Сервер столкнулся с внутренней ошибкой, которая не позволила ему выполнить этот запрос.
исключение
javax.servlet.ServletException: javax.mail.internet.AddressException: Illegal address in string ``''
основная причина
javax.mail.internet.AddressException: Illegal address in string ``''
обратите внимание на полные трассировки стека исключения и его первопричины
доступно вGlassFish
журналах сервера с открытым исходным кодом версии 4.1.2.
«.
<%--
Document : index
Created on : Mar 26, 2019, 7:48:36 PM
Author : ADITHYA
--%>
<%@page import="java.util.Properties"%>
<%@page import="javax.mail.*"%>
<%@page import="javax.mail.internet.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sending an email</title>
</head>
<body onLoad="displayResult()">
<h1>Sending an email</h1>
<%!
public static class SMTPAuthenticator extends Authenticator{
public PasswordAuthentication getPasswordAuthentication (){
return new PasswordAuthentication("portaluniverses","xxxxx");
}
}
%>
<%
int result=0;
if(request.getParameter("send")!=null){
String d_uname="portaluniverses@gmail.com";
String d_password="xxxxx";
String d_host ="smtp.gmail.com";
int d_port=465;
String m_to=new String();
String m_from = "portaluniverses@gmail.com";
String m_subject=new String();
String m_text=new String();
if(request.getParameter("to")!=null){
m_to = request.getParameter("to");
}
if(request.getParameter("subject")!=null){
m_subject = request.getParameter("subject");
}
if(request.getParameter("message")!=null){
m_text="<h1>welcome to sasts </h1>";
m_text =m_text.concat(request.getParameter("message"));
m_text = m_text.concat("<br/><h2>hope you got link</h2>");
}
//creat property object
Properties props = new Properties();
//creat SMTPAuthentication object
SMTPAuthenticator auth =new SMTPAuthenticator();
//creat a mail sesion object
Session ses = Session.getInstance(props,auth);
//creat a MIME style email message object
MimeMessage msg =new MimeMessage(ses);
msg.setContent(m_text, "text/html");
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(m_from));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
try{
Transport transport= ses.getTransport("SMTPS");
transport.connect(d_host,d_port, d_uname,d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
result=1;
}catch(Exception e){
out.println(e);
}
}
%>
<form name="myForm" action="index.jsp" method="POST">
<table border="0">
<tbody>
<tr>
<tr>To:</tr>
<tr> <input type="text" name="To" value="" /></tr>
</tr>
<tr>
<td>Subject</td>
<td><input type="text" name="subject" value="" size="50" /></td>
</tr>
<tr>
<td>Message</td>
<td><textarea name="message" rows="4" cols="50"></textarea> </td>
</tr>
</tbody>
</table>
<input type="hidden" name="hidden" value="<%= result %>" />
<input type="reset" value="Clear" name="Clear" />
<input type="submit" value="send" name="send" />
</form>
<script language="JavaScript">
function displayResult(){
if(document.myForm.hidden.value === "1"){
alert("Mail was sent");
}
}
</body>
</html>
Комментарии:
1. Не рекомендуется показывать пароль публично
2. Вы проверили, что печатается
m_to
?System.out.println(m_to )
3. Если m_to может содержать несколько адресов, используйте метод InternetAddress.parse.
Ответ №1:
Попробуйте с этим кодом,
final String username = "portaluniverses@gmail.com";
final String password = "xxxxx";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Затем создайте сеанс
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
А затем отправьте свое электронное письмо,
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject(subject);
message.setText(messageText);
Transport.send(message);
Комментарии:
1. Попробуйте это, почему? Какая часть этого составляет решение и почему, к какой проблеме?
2. @user207421 Ему нужно улучшить свой код. Он не
properties
правильно объявил. И ему, возможно, потребуется установитьmail.smtps.auth
иmail.smtps.starttls.enable
вtrue
для Gmail.3. Он
Properties
правильно не объявил, как ? И откуда волшебным образом берется значениеto
? Какой единственный спорный момент?4.
to
Отправить электронное письмо на какой адрес?