2008-12-22 11 views
18

के साथ ईमेल भेजना मैं Google Apps का उपयोग करके ईमेल भेजने के लिए Bill the Lizard's code का उपयोग करने का प्रयास कर रहा हूं। मैं इस त्रुटि हो रही है:पहले STARTTLS कमांड जारी करना होगा। जावा और Google Apps

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

हालांकि, यह मदद नहीं करता है:

Exception in thread "main" javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. f3sm9277120nfh.74 

    at javax.mail.Transport.send0(Transport.java:219) 
    at javax.mail.Transport.send(Transport.java:81) 
    at SendMailUsingAuthentication.postMail(SendMailUsingAuthentication.java:81) 
    at SendMailUsingAuthentication.main(SendMailUsingAuthentication.java:44) 

विधेयक के कोड अगली पंक्ति है, जो त्रुटि से संबंधित लगता है शामिल हैं।

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; 

किसी को भी इस त्रुटि के बारे में पता है:

ये मेरी आयात बयान कर रहे हैं?

उत्तर

4

मुझे लगता है कि मेल परिवहन के लिए एसएमटीपी के बजाय एसएमटीपीएस का उपयोग करने के साथ यह करना है। JavaMail FAQ on accessing Gmail के बाद मॉडलिंग किया गया एक अलग संस्करण यहां दिया गया है। ध्यान दें कि मैंने स्पष्टता के लिए सभी बेहतर स्तर अपवाद हैंडलिंग को छोड़ दिया है।

private static void send(
     final String username, 
     final String password, 
     final String recipients, 
     final String subject, 
     final String body) 
     throws Exception 
{ 
    final Session session = Session.getInstance(System.getProperties(), null); 
    final Message msg = new MimeMessage(session); 
    final String senderEmail = username.contains("@") ? username : (username + "@gmail.com"); 
    msg.setFrom(new InternetAddress(senderEmail)); 

    final Address[] recipientAddresses = InternetAddress.parse(recipients); 
    msg.setRecipients(Message.RecipientType.TO, recipientAddresses); 

    msg.setSentDate(new Date()); 
    msg.setSubject(subject); 
    msg.setText(body); 

    final Transport transport = session.getTransport("smtps"); 
    transport.connect(GMAIL_SMTP_HOST, GMAIL_SMTP_PORT, username, password); 
    transport.sendMessage(msg, recipientAddresses); 
    transport.close(); 
} 
+0

मैं n मिलती है: पर

बारी आपके कोड को चलाने के दौरान अपवाद अपवाद: थ्रेड में अपवाद "मुख्य" javax.mail.No.SuchProviderException: smtps के लिए कोई प्रदाता –

+0

ऐसा लगता है कि जावामेल संसाधन फ़ाइलें गायब या दूषित हैं (देखें http://java.sun.com/products/javamail/ javadocs/javax/मेल/Session.html)। Mail.jar/META-INF के अंदर फ़ाइलों की डिफ़ॉल्ट प्रतियां हैं। –

+0

धन्यवाद, मैंने इसे काम किया। –

16

मुझे समस्या मिली। पहले मैं javax.mail आयात करने के लिए j2ee.jar का उपयोग कर रहा था।

मैंने क्लासपाथ से j2ee.jar हटा दिया और JavaMail 1.4.1 डाउनलोड किया और मेरे क्लासपाथ दो जार, smtp.jar और mailapi.jar में डाल दिया। मैं का उपयोग अब बजाय smtp

Transport transport = session.getTransport("smtps");    

अब राजेश के पास छिपकली के कोड काम करता है smtps।

8

यह जावा मेल एपीआई का संस्करण है। मुझे इस समस्या का सामना करना पड़ रहा था और मैंने जावा मेल एपीआई को 1.4.3 पर अपडेट किया है यह मेरे लिए ठीक काम करता है!

धन्यवाद!

14

निम्नलिखित टैग सेट करें। यह काम करेगा।

props.put("mail.smtp.user","username"); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "25"); 
props.put("mail.debug", "true"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.EnableSSL.enable","true"); 

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
props.setProperty("mail.smtp.port", "465"); 
props.setProperty("mail.smtp.socketFactory.port", "465"); 
+1

समझदार प्रतीत होता है, लेकिन आप पोर्ट 25 के साथ क्यों गड़बड़ करते हैं?यह ज्यादातर आईएसपी द्वारा हमेशा अवरुद्ध है और वास्तव में बाद में 465 कई लाइनों पर रीसेट कर दिया गया है ... –

1

यह मुझे पागल कर रहा था और इसलिए बस मेरे लिए क्या काम करना चाहता था। मुझे काम करने के लिए जावामेल (1.4.5) का अपना संस्करण अपडेट करना पड़ा - यह सुनिश्चित नहीं है कि पहले किस संस्करण का उपयोग किया जा रहा था।

एक बार मैं JavaMail के नए संस्करण के लिए अद्यतन, निम्नलिखित कोड मेरे लिए काम किया (डिबग लाइनों uncomment अतिरिक्त डिबगिंग जानकारी पाने के लिए कर सकते हैं - बंदरगाह 587 था और मेजबान smtp.gmail.com था):

public void sendMailWithAuth(String host, String user, String password, 
    String port, List<String> toList, String htmlBody, 
     String subject) throws Exception { 

    Properties props = System.getProperties(); 

    props.put("mail.smtp.user",user); 
    props.put("mail.smtp.password", password); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.port", port); 
    //props.put("mail.debug", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.EnableSSL.enable","true"); 

    Session session = Session.getInstance(props, null); 
    //session.setDebug(true); 

    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(user)); 

    // To get the array of addresses 
    for (String to: toList) { 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
    } 

    message.setSubject(subject); 
    message.setContent(htmlBody, "text/html"); 

    Transport transport = session.getTransport("smtp"); 
    try { 
     transport.connect(host, user, password); 
     transport.sendMessage(message, message.getAllRecipients()); 
    } finally { 
     transport.close(); 
    } 
} 
संबंधित मुद्दे