2012-09-06 16 views
6

Próbuję napisać prostą klasę wysyłania wiadomości e-mail, która otrzyma kilka argumentów, a użycie ich spowoduje wysłanie wiadomości e-mail za pośrednictwem naszego serwera Exchange 2010. Podczas uwierzytelniania itp. Wydaje się działać dobrze, otrzymuję następujący wyjątek, gdy kod rzeczywiście próbuje wysłać e-mail (myślę). Upewniłem się, że uwierzytelnianie działa i dostaję transport z powrotem z sesji, ale nadal się nie udaje. Czy ktokolwiek mógłby rzucić coś takiego na to, co robię źle lub zaginęło? Dzięki.JavaMail - javax.mail.MessagingException

Wyjątek:

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) 

odpowiedni kod:

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: włączone debugowanie i mówi

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. 

Dlaczego miałoby to być, gdy sesja poświadczenie powodzenie?

+2

można aktywować tryb debugowania , abyś mógł zobaczyć, co twoja aplikacja mówi do serwera SMPT, na końcu rozmowy powinieneś zobaczyć coś, co wskazuje na błąd. – Alex

+0

Cześć Alex, dzięki! Włączyłem debugowanie i napisałem MAIL FROM: <[email protected]> 530 5.7.1 Klient nie został uwierzytelniony DEBUG SMTP: otrzymałem kod odpowiedzi 530, z odpowiedzią: 530 5.7.1 Klient nie został uwierzytelniony. Dlaczego miałoby to nastąpić po udanym uwierzytelnieniu sesji? – legendofawesomeness

+0

Właśnie widziałem, że dla niektórych wersji programu Exchange użytkownik powinien mieć jeden z następujących formatów: "użytkownik @ domena" lub "domena \\ użytkownik", jeśli w międzyczasie może być przydatna. – Alex

Odpowiedz

7

Dzięki Alex i Bill. Mam to działa, włączając następującą właściwość.

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

dwie możliwości:

  1. To nie jest rzeczywiście próbuje uwierzytelnić z powodu korzystania z Session.getDefaultInstance.
  2. Nie jest to uwierzytelnianie, ponieważ nie znajduje żadnych mechanizmów uwierzytelniania, które obsługuje zarówno klient, jak i serwer, prawdopodobnie dlatego, że serwer chce, aby użytkownik korzystał z protokołu SSL przed wysłaniem jakichkolwiek informacji uwierzytelniających. Spróbuj ustawić "mail.smtp.starttls.enable" na "true".

Gdybyśmy mogli zobaczyć więcej danych wyjściowych debugowania, moglibyśmy powiedzieć, który z nich dotyczy.

0

miałem również ten błąd prześledzić moje korekta była:

Dla OS centos7: iść do VI/etc/hosts i upewnij się, że adres IP jest poprawny

Powiązane problemy