2012-01-24 3 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.connect(host, user, password) 이전 t.sendMessage(message, addresses)을 사용하여 로그인 자격 증명을 제공해야

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를 보내는 의존성 등 를 사용하여 두 개의 항아리 ? sourceid = chrome & ie = UTF-8 & q = 코드 + + 전송 + 전자 메일 + (gmail) + + Java + 프로그램 사용 – naresh

+0

사용자 이름과 암호는 어디에 설정합니까? 코드에서 그것을 보지 마라. –

답변

2

를 얻을 수 있습니다. .. Transport t = session.getTransport("smtp")와 첫 번째 (Aquire Transport 객체

+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

다운로드 자바 메일 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."); 
    } 
} 
관련 문제