2012-09-06 20 views
6

मैं एक साधारण मेल प्रेषक वर्ग लिखने की कोशिश कर रहा हूं जो तर्कों का एक समूह प्राप्त करेगा और उनका उपयोग करके हमारे एक्सचेंज 2010 सर्वर का उपयोग करके एक ईमेल भेज दिया जाएगा। प्रमाणीकरण इत्यादि ठीक काम करने लगते हैं, जब कोड वास्तव में ईमेल भेजने की कोशिश कर रहा है तो मुझे निम्नलिखित अपवाद मिल रहा है (मुझे लगता है)। मैंने यह सुनिश्चित किया है कि प्रमाणीकरण काम कर रहा है और मुझे सत्र से वापस परिवहन मिलता है, लेकिन फिर भी यह विफल हो जाता है। क्या कोई इस बात की तरह कुछ छोड़ सकता है कि मैं गलत क्या कर रहा हूं या लापता हूं? धन्यवाद।जावामेल - javax.mail.MessagingException

अपवाद:

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) 

प्रासंगिक कोड:

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); 
    } 
} 

संपादित करें: मैं डिबगिंग के बारे में बदल गया और यह

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. 

कि क्यों होगा कहते हैं जब सत्र प्रमाणीकरण succeded?

+2

आप डिबग मोड को सक्रिय कर सकते हैं , ताकि आप देख सकें कि एसपीपीटी सर्वर पर आपका ऐप क्या कह रहा है, बातचीत के अंत में आपको त्रुटि का संकेत देने वाला कुछ देखना चाहिए। – Alex

+0

हाय एलेक्स, धन्यवाद! मैंने डिबगिंग चालू कर दी और यह मेल से कहता है: <[email protected]> 530 5.7.1 क्लाइंट प्रमाणीकृत नहीं किया गया DEBUG SMTP: प्रतिक्रिया कोड 530 मिला, प्रतिक्रिया के साथ: 530 5.7.1 क्लाइंट प्रमाणीकृत नहीं था। ऐसा क्यों होगा जब सत्र प्रमाणीकरण उत्तराधिकारी हो? – legendofawesomeness

+0

मैंने अभी देखा है कि एक्सचेंज उपयोगकर्ता के कुछ संस्करणों में निम्न प्रारूप 'उपयोगकर्ता @ डोमेन' या' डोमेन \\ उपयोगकर्ता 'में से एक होना चाहिए, यदि इस दौरान किसी भी मदद की जा सकती है। – Alex

उत्तर

7

धन्यवाद एलेक्स और बिल। मुझे यह निम्नलिखित संपत्ति को सक्षम करके काम कर रहा है।

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

दो संभावनाएं:

  1. यह वास्तव में Session.getDefaultInstance के आपके उपयोग की वजह से प्रमाणित करने का प्रयास नहीं कर रहा है।
  2. यह प्रमाणीकरण नहीं कर रहा है क्योंकि यह किसी प्रमाणीकरण तंत्र को नहीं ढूंढ रहा है जो क्लाइंट और सर्वर दोनों का समर्थन करता है, संभवतः सर्वर चाहता है कि आप किसी भी प्रमाणीकरण जानकारी भेजने से पहले एसएसएल का उपयोग करें। "Mail.smtp.starttls.enable" को "true" पर सेट करने का प्रयास करें।

यदि हम आपके अधिक डीबग आउटपुट को देख सकते हैं, तो हम आपको बता सकते हैं कि इनमें से कौन सा मामला है।

0

मैं भी इस त्रुटि का पता लगाने मेरी सुधार था:

ओएस centos7 के लिए: vi/etc/hosts के पास जाओ और सत्यापित करें कि आईपी पता सही है

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^