2014-11-01 68 views
0

當我嘗試使用以下代碼發送郵件時,出現身份驗證問題。使用javamail發送郵件獲取身份驗證問題

這裏是我的代碼:

public class NewSendMail { 

    String to = "********"; 
    String subject = "subject"; 
    String msg ="email text...."; 
    final String from ="*******"; 
    final String password ="******"; 


    public NewSendMail(){ 

    } 

    public boolean sendMymail(){ 

     Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "smtp");  
     props.setProperty("mail.host", "smtp.gmail.com"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 
     props.put("mail.debug", "true"); 
     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"); 
     Session session = Session.getDefaultInstance(props, 
       new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(from,password); 
      } 
     }); 

//  Session session = Session.getDefaultInstance(props); 

     //session.setDebug(true); 
     Transport transport; 
     InternetAddress addressFrom = null; 
     try { 
      transport = session.getTransport(); 
      addressFrom = new InternetAddress(from); 
      MimeMessage message = new MimeMessage(session); 
      message.setSender(addressFrom); 
      message.setSubject(subject); 
      message.setContent(msg, "text/plain"); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      transport.connect(); 
      Transport.send(message); 
      transport.close(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     return true; 
    } 


} 

它扔javax.mail.AuthenticationFailedException

我該如何解決這個問題?

回答

0

下面的代碼可以幫助你

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class Email { 

private static String USER_NAME = "username"; // GMail user name (just the part before "@gmail.com") 
private static String PASSWORD = "password"; // GMail password 

private static String RECIPIENT = "[email protected]"; 

public static void main(String[] args) { 
String from = USER_NAME; 
String pass = PASSWORD; 
String[] to = { RECIPIENT }; // list of recipient email addresses 
String subject = "Java send mail example"; 
String body = "hi ....,!"; 

sendFromGMail(from, pass, to, subject, body); 
} 

private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) { 
Properties props = System.getProperties(); 
String host = "smtp.gmail.com"; 

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

props.put("mail.smtp.ssl.trust", host); 
props.put("mail.smtp.user", from); 
props.put("mail.smtp.password", pass); 
props.put("mail.smtp.port", "587"); 
props.put("mail.smtp.auth", "true"); 


Session session = Session.getDefaultInstance(props); 
MimeMessage message = new MimeMessage(session); 

try { 


    message.setFrom(new InternetAddress(from)); 
    InternetAddress[] toAddress = new InternetAddress[to.length]; 

    // To get the array of addresses 
    for(int i = 0; i < to.length; i++) { 
     toAddress[i] = new InternetAddress(to[i]); 
    } 

    for(int i = 0; i < toAddress.length; i++) { 
     message.addRecipient(Message.RecipientType.TO, toAddress[i]); 
    } 



    message.setSubject(subject); 
    message.setText(body); 


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


    transport.connect(host, from, pass); 
    transport.sendMessage(message, message.getAllRecipients()); 
    transport.close(); 

} 
catch (AddressException ae) { 
    ae.printStackTrace(); 
} 
catch (MessagingException me) { 
    me.printStackTrace(); 
    } 
    } 
} 

此代碼爲我工作,如果它不爲你工作,請檢查您的jar文件

0

我告訴大家誰問了JavaMail的幫助,同樣的事情。 (我想知道他們爲什麼稱它爲FAQ?)

修復這些common mistakes

跟隨this example for Gmail

打開session debugging可以獲得有關錯誤的更多詳細信息,並在您仍然無法弄清楚的情況下發布輸出。

您要麼發送錯誤的用戶名或密碼,要麼服務器因其他原因拒絕您的登錄嘗試,可能是因爲您尚未啓用less secure apps