2011-03-13 56 views
1
package com.bcs; 
import java.util.Properties; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendMailTLS { 

    public static void main(String[] args) { 
     String host = "smtp.gmail.com"; 
     int port = 587; 
     String username = "[email protected]"; 
     String password = "bar"; 

     Properties props = new Properties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 

     Session session = Session.getInstance(props); 

     try { 
      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("")); 
      message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("")); 
      message.setSubject("Testing Subject"); 
      message.setText("Dear Mail Crawler," + 
        "\n\n No spam to my email, please!"); 

      Transport transport = session.getTransport("smtp"); 
      transport.connect(host, port, username, password); 
      Transport.send(message); 

      System.out.println("Done"); 

     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

我已经给出了所有必要的输入。但它仍然失败为什么javamail会以认证异常失败?

Exception in thread "main" java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect, no password specified? 
    at com.bcs.SendMailTLS.main(SendMailTLS.java:43) 
Caused by: javax.mail.AuthenticationFailedException: failed to connect, no password specified? 
    at javax.mail.Service.connect(Service.java:329) 
    at javax.mail.Service.connect(Service.java:176) 
    at javax.mail.Service.connect(Service.java:125) 
    at javax.mail.Transport.send0(Transport.java:194) 
    at javax.mail.Transport.send(Transport.java:124) 
    at com.bcs.SendMailTLS.main(SendMailTLS.java:38) 

我是新的java邮件。任何帮助将不胜感激。

+0

这有帮助吗? http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and-tries-t – 2011-09-25 18:00:55

回答

3

这可能帮助:http://www.behrang.org/en/blog/2010/03/30/sending-email-from-grails-using-gmail/

我想你应该设置这些属性:

'mail.smtp.auth': 'true', 
'mail.smtp.socketFactory.port': '465', 
'mail.smtp.socketFactory.class': 'javax.net.ssl.SSLSocketFactory', 
'mail.smtp.socketFactory.fallback': 'false' 

,端口为465

+1

这需要通过'smtps'传输连接,不通过'smtp'。 OP有'smtp' /'STARTTLS'的正确端口。 http://mail.google.com/support/bin/answer.py?answer=13287 – dkarp 2011-03-13 20:27:27