2012-09-06 35 views
6

Tôi đang cố gắng viết một lớp người gửi thư đơn giản mà sẽ nhận được một loạt các đối số và sử dụng chúng sẽ gửi email ra bằng cách sử dụng máy chủ Exchange 2010 của chúng tôi. Trong khi xác thực vv dường như làm việc tốt, tôi nhận được ngoại lệ sau khi mã thực sự đang cố gắng gửi email (tôi nghĩ). Tôi đã đảm bảo rằng việc xác thực đang làm việc và tôi nhận được một vận chuyển trở lại từ phiên, nhưng nó vẫn không thành công. Bất cứ ai có thể đổ một số giống như những gì tôi đang làm sai hoặc mất tích? Cảm ơn.JavaMail - javax.mail.MessagingException

Ngoại lệ:

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) 

đang liên quan:

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: Tôi bật gỡ lỗi và nó nói

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. 

Tại sao đó sẽ là khi phiên xác thực succeded?

+2

Bạn có thể kích hoạt chế độ gỡ lỗi , để bạn có thể xem ứng dụng của mình đang nói gì với máy chủ SMPT, khi kết thúc cuộc trò chuyện, bạn sẽ thấy thông báo lỗi. – Alex

+0

Xin chào Alex, cảm ơn! Tôi bật gỡ lỗi và nó nói MAIL FROM: <[email protected]> 530 5.7.1 Khách hàng không được xác thực DEBUG SMTP: nhận mã phản hồi 530, với phản hồi: 530 5.7.1 Khách hàng không được xác thực. Tại sao điều đó lại xảy ra khi xác thực phiên được gia tăng? – legendofawesomeness

+0

Tôi vừa thấy rằng đối với một số phiên bản của người dùng Exchange nên có một trong các định dạng sau đây 'user @ domain' hoặc' domain \\ user', nếu nó có thể có bất kỳ trợ giúp nào trong thời gian chờ đợi. – Alex

Trả lời

7

Cảm ơn Alex và Bill. Tôi nhận nó hoạt động bằng cách kích hoạt thuộc tính sau.

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

Có hai khả năng:

  1. Nó không thực sự cố gắng để xác thực vì việc bạn sử dụng Session.getDefaultInstance.
  2. Nó không xác thực bởi vì nó không tìm thấy bất kỳ cơ chế xác thực nào hỗ trợ cả máy khách và máy chủ, có thể do máy chủ muốn bạn sử dụng SSL trước khi gửi bất kỳ thông tin xác thực nào. Thử đặt "mail.smtp.starttls.enable" thành "true".

Nếu chúng tôi có thể xem thêm đầu ra gỡ lỗi của bạn, chúng tôi có thể cho bạn biết trường hợp nào trong số này.

0

Tôi cũng có lỗi này theo dõi sửa chữa của tôi là:

Đối với hệ điều hành centos7: đi đến vi/etc/hosts và xác minh rằng địa chỉ IP là đúng

Các vấn đề liên quan