2012-09-06 23 views
6

Estoy tratando de escribir una clase de remitente de correo simple que recibiría un montón de argumentos y usarlos enviará un correo electrónico usando nuestro servidor de Exchange 2010. Si bien la autenticación, etc. parece funcionar bien, recibo la siguiente excepción cuando el código realmente intenta enviar el correo electrónico (creo). Me he asegurado de que la autenticación esté funcionando y recibí un transporte de la sesión, pero aún falla. ¿Alguien podría arrojar algo sobre lo que estoy haciendo mal o me falta? Gracias.JavaMail - javax.mail.MessagingException

Excepción:

javax.mail.MessagingException: [EOF] 
     at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481) 
     at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1512) 
     at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054) 
     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634) 
     at javax.mail.Transport.send0(Transport.java:189) 
     at javax.mail.Transport.send(Transport.java:140) 
     at com.ri.common.mail.util.MailSender.sendHTMLEmail(MailSender.java:75) 
     at com.ri.common.mail.util.MailSender.main(MailSender.java:106) 

código relevante:

import java.util.Properties; 

import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 


public class MailSender 
{ 
    public static void sendHTMLEmail(String fromEmailId, String toEmailId, String host, String hostUserName, 
      String hostPassword, String mailSubject, String mailBody) 
    { 
     // Get system properties. 
     Properties props = System.getProperties(); 
     // Setup mail server 
     props.put("mail.transport.protocol", "smtp"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.auth", "true"); 

     final String hostUName = hostUserName; 
     final String hPassword = hostPassword; 

     Authenticator authenticator = new Authenticator() 
     { 
      protected PasswordAuthentication getPasswordAuthentication() 
      { 
       return new PasswordAuthentication(hostUName, hPassword); 
      } 
     }; 

     // Get the default Session object. 
     Session session = Session.getDefaultInstance(props, authenticator); 

     try 
     { 
      // Create a default MimeMessage object. 
      MimeMessage message = new MimeMessage(session); 

      // Set From: header field of the header. 
      message.setFrom(new InternetAddress(fromEmailId)); 

      // Set To: header field of the header. 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmailId)); 

      // Set Subject: header field 
      message.setSubject(mailSubject); 

      // Send the actual HTML message, as big as you like 
      message.setContent(mailBody, "text/html"); 

      // Send message 
      Transport.send(message, message.getAllRecipients()); 
      System.out.println("Sent message successfully...."); 
     } 
     catch(Exception mex) 
     { 
      mex.printStackTrace(); 
     } 

    } 

    public static void main(String[] args) 
    { 

     String to = "[email protected]"; 
     String from = "[email protected]"; 
     String host = "correctHostForExch2010"; 
     String user = "correctUser"; 
     String password = "CorrectPassword"; 
     String subject = "Test Email"; 
     String body = "Hi there. This is a test email!"; 

     MailSender.sendHTMLEmail(from, to, host, user, password, subject, body); 
    } 
} 

EDIT: activar la depuración y dice

MAIL FROM:<[email protected]> 530 5.7.1 Client was not authenticated 
DEBUG SMTP: got response code 530, with response: 530 5.7.1 Client was not authenticated. 

¿Por qué sería cuando la sesión autenticación ¿Sucedió?

+2

Se puede activar el modo de depuración , para que pueda ver lo que su aplicación está diciendo al servidor SMPT, al final de la conversación debería ver algo que indique el error. – Alex

+0

Hola Alex, gracias! Inicié la depuración y dice MAIL FROM: <[email protected]> 530 5.7.1 El cliente no fue autenticado DEPURTO SMTP: obtuvo el código de respuesta 530, con respuesta: 530 5.7.1 El cliente no fue autenticado. ¿Por qué sería eso cuando la autenticación de sesión tuvo éxito? – legendofawesomeness

+0

Acabo de ver que para algunas versiones de Exchange el usuario debe tener uno de los siguientes formatos 'usuario @ dominio' o' dominio \\ usuario', si puede ser de alguna ayuda mientras tanto. – Alex

Respuesta

7

Gracias Alex y Bill. Lo conseguí trabajando habilitando la siguiente propiedad.

props.put("mail.smtp.starttls.enable", "true"); 
1

dos posibilidades:

  1. En realidad, no está tratando de autenticar debido a su uso de Session.getDefaultInstance.
  2. No se autentica porque no encuentra ningún mecanismo de autenticación compatible con el cliente y el servidor, posiblemente porque el servidor desea que use SSL antes de enviar cualquier información de autenticación. Intenta configurar "mail.smtp.starttls.enable" en "true".

Si pudiéramos ver más de su resultado de depuración, podríamos decirle cuál de estos es el caso.

0

También tuve rastrear este error mi corrección fue:

Para OS centos7: ir a vi/etc/hosts y compruebe que la dirección IP es correcta

Cuestiones relacionadas