2014-04-09 121 views
7

我试图使用JavaMail API向Gmail帐户发送电子邮件。我也做了以下code.I要发送邮件给多个recipents.But它不working.It它给像一个异常“无法连接到SMTP host.sending失败”通过JavaMail API发送邮件时无法连接到SMTP主机异常

package com.cts.email; 

import java.util.Properties; 


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 SendEmail {  
     Properties emailProperties; 
     Session mailSession; 
     MimeMessage emailMessage; 
     public static void main(String args[]) throws MessagingException, javax.mail.MessagingException {  
      SendEmail javaEmail = new SendEmail(); 
      Session session=javaEmail.setMailServerProperties(); 
      javaEmail.createEmailMessage(session); 
      // javaEmail.sendEmail(); 
      }  
     public Session setMailServerProperties() {  
      Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 

     Session session = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication("my_email","my_password"); 
       } 
      }); 
       return session; 
     }  

      public void createEmailMessage(Session session) throws MessagingException, javax.mail.MessagingException {  
        String[] toEmails = { "[email protected]","sandee[email protected]" }; 
        try { 
         for (String to_mail : toEmails) { 


        Message message = new MimeMessage(session); 
        message.setFrom(new InternetAddress("[email protected]")); 
        message.setRecipients(Message.RecipientType.TO, 
          InternetAddress.parse(to_mail)); 
        message.setSubject("Java Email"); 
        message.setText("This is an email sent by <b>JavaMail</b> api."); 

        Transport.send(message); 



       } 
         System.out.println("Done"); 
        }catch (MessagingException e) { 
        throw new RuntimeException(e); 
       } 
       }  


         } 

我得到以下例外:

Exception in thread "main" java.lang.RuntimeException: javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    class javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; 
    nested exception is: 
    java.net.ConnectException: Connection refused: connect 
    at com.cts.email.SendEmail.createEmailMessage(SendEmail.java:62) 
    at com.cts.email.SendEmail.main(SendEmail.java:21) 
Caused by: javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    class javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; 
    nested exception is: 
    java.net.ConnectException: Connection refused: connect 
    at javax.mail.Transport.send0(Transport.java:218) 
    at javax.mail.Transport.send(Transport.java:80) 
    at com.cts.email.SendEmail.createEmailMessage(SendEmail.java:55) 
    ... 1 more 

请帮助我通过这个。

+0

工作对我来说:至少我可以连接到它。 – EJP

+0

它可能是网络问题吗?防火墙,代理,错误的DNS? –

回答

7

这个工作对我来说:

import java.util.Properties; 
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 SendMail { 


    public static void sendEmail(String to) 
    { 
     final String username = "your_usename_goes_here"; 
     final String password = "your_password_goes_here"; 

     Properties props = new Properties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.port", "587"); 

     Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(username, password); 
      } 
      }); 

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(to)); 
      message.setSubject("A testing mail header !!!"); 
      message.setText("Dear Mail Crawler," 
       + "\n\n No spam to my email, please!"); 

      Transport.send(message); 

      System.out.println("Done"); 

     } 

     catch (MessagingException e) 
     { 
      // throw new RuntimeException(e); 
      System.out.println("Username or Password are incorrect ... exiting !"); 
     } 
    } 


    public static void main(String[] args) 
    { 
     String to = "[email protected]"; 
     sendEmail(to); 
    } 
} 
+0

这对我来说也适用,如果我想要一个文件?我应该在哪里添加附件? – Scarl

+0

谢谢你。它为我工作。 –

+0

获取错误用户名或密码不正确...正在退出! ,但我的Gmail地址和密码是正确的?另一个原因是什么? –

0

//请确保在您使用的防病毒AOR告别任何形式请确认// TO了他们TEMPORARILY否则为“握手” EXCEPTION会出现...

String user= "[email protected]"; 
    String pass= "FROMPASSWORD"; 
    String mailhost = "smtp.gmail.com"; 

    Properties props= System.getProperties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 
     props.put("mail.smtp.user", user); 
     props.put("mail.smtp.password", pass); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", 
     "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 
     props.setProperty("mail.smtp.quitwait", "false"); 

    Session session= Session.getDefaultInstance(props,new         javax.mail.Authenticator() { 

     @Override 
     protected javax.mail.PasswordAuthentication getPasswordAuthentication(){ 
      return new javax.mail.PasswordAuthentication(user,pass); 
     } 

}); 

    try{ 
     MimeMessage message= new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 
     message.setSubject("Checking...."); 
     message.setText("Successful",user,pass); 
     Transport.send(message); 
     System.out.println("Sent!"); 
    }catch(Exception ee){ 
     ee.printStackTrace();; 
    } 
相关问题