Как решить javax.mail.internet.AddressException: недопустимый адрес в строке `»

#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 Отправить электронное письмо на какой адрес?