2012-01-24 27 views
0

Javaプログラムを使用して電子メール(gmail)を送信するために、次のコードを使用しています。私はAuthenticationFailedExceptionを取得しています。私は以下のエラーを述べました。これを解決するには?どのようにこのプログラムで送信者のユーザー名、パスワードを使用するには?メール送信Javaプログラム

 package internet; 

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

     public class mail 
     { 
      public static void main(String [] args) 
      { 


       String to = "[email protected]"; 
       String from = "[email protected]"; 


       String host = "smtp.gmail.com"; 


       Properties properties = System.getProperties(); 


       properties.put("mail.smtp.host", "smtp.gmail.com"); 
       properties.put("mail.smtp.port", "587"); 
       properties.put("mail.smtp.auth", "true"); 
       properties.put("mail.smtp.starttls.enable", "true"); 



       Session session = Session.getDefaultInstance(properties); 

       try{ 

       MimeMessage message = new MimeMessage(session); 


       message.setFrom(new InternetAddress(from)); 


       message.addRecipient(Message.RecipientType.TO, 
              new InternetAddress(to)); 


       message.setSubject("This is the Subject Line!"); 


       message.setText("This is actual message"); 


       Transport.send(message); 
       System.out.println("hi"); 
       System.out.println("Sent message successfully...."); 
       }catch (MessagingException mex) { 
       mex.printStackTrace(); 
       } 
      } 
     } 

私はあなたが前t.sendMessage(message, addresses)t.connect(host, user, password)でログイン資格情報を提供する必要があり、次のエラー

javax.mail.AuthenticationFailedException 
      at javax.mail.Service.connect(Service.java:267) 
      at javax.mail.Service.connect(Service.java:137) 
      at javax.mail.Service.connect(Service.java:86) 
      at javax.mail.Transport.send0(Transport.java:150) 
      at javax.mail.Transport.send(Transport.java:80) 
      at internet.mail.main(mail.java:59) 
+0

チェック結果をsmtp.jarを送信するための依存関係として を使用して、2つの瓶あなたのユーザー名とパスワードはどこに設定しますか?sourceid = chrome&ie = UTF-8&q = code + +送信+電子メール+(gmail)+ Java +プログラムを使用 – naresh

+0

コード内には表示されません。 –

答えて

2

を取得しています。 (Transport t = session.getTransport("smtp")で最初TransportオブジェクトをAQUIRE

+0

いいえ、それは動作しません。 Transport.sendは、Transportインスタンスを無視する静的メソッドであるため、そのインスタンスで行った「接続」は無視されます。 Transport.sendMessageメソッドを使用する必要があります。 JavaMailのFAQ(http://www.oracle.com/technetwork/java/javamail/faq/index.html#connectsend)を参照してください。 –

+0

ヒントをありがとう。回答が調整されました。 – tobiasbayer

1

あなたはそれを行うにはjavax.mail.Authenticator拡張子を使用することができます例として:。。

public class MySMTPAuthenticator extends javax.mail.Authenticator { 

    private String userName; 
    private String password; 

    public MySMTPAuthenticator(String userName, String password) { 
     super(); 
     this.userName=userName; 
     this.password=password; 
    } 

    public PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(userName, password); 
    } 

} 

を次に、それを使用するために、あなたの送信コードで、あなたがセッションを取得しますオーセンティケータ:?あなたはusernamを設定するのを忘れよう

Authenticator auth = new MySMTPAuthenticator("user", "password"); 
    Session session = Session.getDefaultInstance(MySMTPAuthenticator, auth); 
0

ダウンロードJavaのメールAPIと、http://www.google.co.in/searchメールmailapi.jarと

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class JavaEmail { 

    Properties emailProperties; 
    Session mailSession; 
    MimeMessage emailMessage; 

    public static void main(String args[]) throws AddressException, MessagingException { 
     JavaEmail javaEmail = new JavaEmail(); 
     javaEmail.setMailServerProperties(); 
     javaEmail.createEmailMessage(); 
     javaEmail.sendEmail(); 
    } 

    public void setMailServerProperties() { 
     String emailPort = "587";//gmail's smtp port 
     emailProperties = System.getProperties(); 
     emailProperties.put("mail.smtp.port", emailPort); 
     emailProperties.put("mail.smtp.auth", "true"); 
     emailProperties.put("mail.smtp.starttls.enable", "true"); 
    } 

    public void createEmailMessage() throws AddressException, MessagingException { 
     String[] toEmails = { "[email protected]" };//Specify array of mail id to send multiple person 
     String emailSubject = "Java Email"; 
     String emailBody = "This is an email sent by <b>JavaMail</b> api."; 
     mailSession = Session.getDefaultInstance(emailProperties, null); 
     emailMessage = new MimeMessage(mailSession); 
     for (int i = 0; i < toEmails.length; i++) { 
      emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i])); 
     } 
     emailMessage.setSubject(emailSubject); 
     emailMessage.setContent(emailBody, "text/html");//for a html email 
     //emailMessage.setText(emailBody);// for a text email  
    } 

    public void sendEmail() throws AddressException, MessagingException { 
     String emailHost = "smtp.gmail.com"; 
     String fromUser = "your emailid here";//just the id alone without @gmail.com 
     String fromUserEmailPassword = "your email password here"; 
     Transport transport = mailSession.getTransport("smtp"); 
     transport.connect(emailHost, fromUser, fromUserEmailPassword); 
     transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
     transport.close(); 
     System.out.println("Email sent successfully."); 
    } 
}