2010-06-03 6 views
2

아래 코드를 사용하여 javamail API를 사용하여 메일을 보내려고합니다. 클래스 파일을 컴파일 할 때 '다음과 같은 오류가 발생합니다'라는 오류가 발생합니다. 이하. 또한 getProvider() 함수 오류 나는 그렇게 생각 ... 내가 무슨 뜻인지는 모르겠다.javamail 오류 : 먼저 starttls 명령을 실행해야합니다

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.event.*; 
import javax.mail.Authenticator; 
import java.net.*; 
import java.util.Properties; 
public class mailexample 
    { 
    public static void main (String args[]) throws Exception { 

    String from = args[0]; 
    String to = args[1]; 
try 
{ 
Properties props=new Properties(); 
props.put("mail.transport.protocol", "smtp"); 
props.put("mail.smtp.host","smtp.gmail.com"); 
props.put("mail.smtp.port", "25"); 
props.put("mail.smtp.auth", "true"); 
javax.mail.Authenticator authenticator = new javax.mail.Authenticator() 
    { 
    protected javax.mail.PasswordAuthentication getPasswordAuthentication() 
     { 
     return new javax.mail.PasswordAuthentication("[email protected]", "pass"); 
    } 
}; 
Session sess=Session.getDefaultInstance(props,authenticator); 
sess.setDebug (true); 
Transport transport =sess.getTransport ("smtp"); 
Message msg=new MimeMessage(sess); 
msg.setFrom(new InternetAddress(from)); 
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
msg.setSubject("Hello JavaMail"); 
msg.setText("Welcome to JavaMail"); 
transport.connect(); 
transport.send(msg); 

} 
catch(Exception e) 
{ 
System.out.println("err"+e); 
} 
} 
} 

오류 : 당신은 인증 전에

 
C:\Users\bobby\Desktop>java mailexample [email protected] [email protected] 
com 

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.s 
mtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 

DEBUG: SMTPTransport trying to connect to host "smtp.gmail.com", port 25 

DEBUG SMTP RCVD: 220 mx.google.com ESMTP q10sm12956046rvp.20 

DEBUG: SMTPTransport connected to host "smtp.gmail.com", port: 25 

DEBUG SMTP SENT: EHLO bobby-PC 
DEBUG SMTP RCVD: 250-mx.google.com at your service, [60.243.184.29] 
250-SIZE 35651584 
250-8BITMIME 
250-STARTTLS 
250 ENHANCEDSTATUSCODES 


DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.s 
mtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 

DEBUG: SMTPTransport trying to connect to host "smtp.gmail.com", port 25 

DEBUG SMTP RCVD: 220 mx.google.com ESMTP l29sm12930755rvb.16 

DEBUG: SMTPTransport connected to host "smtp.gmail.com", port: 25 

DEBUG SMTP SENT: EHLO bobby-PC 
DEBUG SMTP RCVD: 250-mx.google.com at your service, [60.243.184.29] 
250-SIZE 35651584 
250-8BITMIME 
250-STARTTLS 
250 ENHANCEDSTATUSCODES 

DEBUG SMTP SENT: MAIL FROM: 
DEBUG SMTP RCVD: 530 5.7.0 Must issue a STARTTLS command first. l29sm12930755rvb 
.16 

DEBUG SMTP SENT: QUIT 
errjavax.mail.SendFailedException: Sending failed; 
    nested exception is: 
     javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command f 
irst. l29sm12930755rvb.16 
+0

@bobby 또한 이전 질문 http://stackoverflow.com/questions/2963625/help-with-javamail-api – JoseK

+0

@bobby 내 업데이트를 참조 은어? – JoseK

답변

3

아마, 당신은 props.put("mail.smtp.starttls.enable","true");을 넣어해야합니다.

+0

안녕하세요 여전히 동일한 문제가있는 메신저 ... 같은 오류가 발생했습니다. – simplyblue

0

이 코드는 이메일을 보내기 위해 Gmail SMTP 서버를 사용하여 올바르게 작동하는 것 같습니다. 주 - 여기에는 첨부 파일이 없습니다.

(출처 : https://forums.oracle.com/forums/thread.jspa?threadID=1587188의 예에서 수정) 당신이 설명

package org.ssb.mail; 

import java.util.Date; 
import java.util.Properties; 

import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
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 MailClient { 

/** 
* Entry method 
* 
* @param args 
*   String[] 
*/ 
public static void main(String[] args) { 

    MailClient client = new MailClient(); 

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

} 

/** 
* Sends an email 
* 
* @param none 
*/ 
private void sendMail() throws AddressException, MessagingException { 

    // Get a Properties object 
    Properties props = System.getProperties(); 

    // ******************** FOR PROXY ****************** 

    // props.setProperty("proxySet","true"); 
    // props.setProperty("socksProxyHost","9.10.11.12"); 
    // props.setProperty("socksProxyPort","80"); 
    // props.setProperty("socksProxyVersion","5"); 

    props.setProperty("mail.smtp.host", "smtp.gmail.com"); 

    // ******************** FOR SSL ****************** 
    //final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
    //props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); 
    //props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
    //props.setProperty("mail.smtp.port", "465"); 
    //props.setProperty("mail.smtp.socketFactory.port", "465"); 

    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.debug", "true"); 
    props.put("mail.store.protocol", "pop3"); 
    props.put("mail.transport.protocol", "smtp"); 
    final String username = "sender-username"; 
    final String password = "sender-password"; 
    Session session = Session.getDefaultInstance(props, 
      new Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 

    // -- Create a new message -- 
    Message msg = new MimeMessage(session); 
    msg.setFrom(new InternetAddress("[email protected]")); 
    msg.setRecipients(Message.RecipientType.TO, 
      InternetAddress.parse("[email protected]", false)); 
    msg.setSubject("Hello"); 
    msg.setSentDate(new Date()); 

    // **************** Without Attachments ****************** 
    msg.setText("How are you"); 


    Transport.send(msg); 
    System.out.println("Message sent."); 

} 

} 
0

나는 같은 문제가 있었다. 내 경우에는, 트릭은

Session session = Session.getInstance(props);

Session session = Session.getDefaultInstance(props);

를 않았다 교체. 도움이되기를 바랍니다.

0

이 작품은 저에게 적합합니다. 다음 태그를 설정하십시오. 효과가있을 것입니다. 마태 복음에서 링크의 모든 단계를 시도해 봤어 -

props.put("mail.smtp.user","username"); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "25"); 
props.put("mail.debug", "true"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.EnableSSL.enable","true"); 

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
props.setProperty("mail.smtp.port", "465"); 
props.setProperty("mail.smtp.socketFactory.port", "465"); 
관련 문제