2011-10-11 4 views
2

JavaMail API를 사용하여 대량 전자 메일 프로그램을 작성하고 있습니다. 전자 메일을 보내려는 Microsoft Exhange 서버가 있습니다. 내 프로그램을 실행할 때 나는 다음과 같은 오류가 발생합니다 :JavaMail SMTPSendFailedException

**com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057) 
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1862) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1100) 
at javax.mail.Transport.send0(Transport.java:195) 
at javax.mail.Transport.send(Transport.java:124) 
at SendEmail.postMail(SendEmail.java:100) 
at EmailGenerator.main(EmailGenerator.java:52)** 

다음과 같이 메시지를 보내려고 내 코드의 일부는 다음과 같습니다

Properties props = new Properties(); 
props.put("mail.smtp.host", email_server); 
props.put("mail.transport.protocol", "smtp"); 
props.put("mail.smtp.auth", true); 

class EmailAuthenticator extends Authenticator { 
String user; 
String pw; 
EmailAuthenticator (String FROM, String PASSWORD) 
{ 
    super(); 
    this.user = FROM; 
    this.pw = PASSWORD; 
} 
public PasswordAuthentication getPasswordAuthentication() 
{ 
    return new PasswordAuthentication(user, pw); 
} 
} 

Session session = Session.getInstance(props, new EmailAuthenticator(USER, PASSWORD)); 
session.setDebug(debug); 
System.out.println("Session created"); 

.. CREATED MESSAGE HERE... 

Transport transport = session.getTransport("smtp"); 
transport.connect(exchange_server,user,password); 
transport.send(msg); 
transport.close(); 

은 내가 Exchange 서버에 대한 몇 가지 구성을 잃었 궁금 내 코드에 문제가 있습니까?

+0

세계에서 가장 유용한 예외는 아닙니다. 'props.put ("mail.debug", "true");로 디버깅을 켜면 어떻게됩니까? –

+1

Edward가 맞습니다. 서버에서 실제 SMTP 응답이 필요합니다. 확인할 수있는 또 다른 한가지는 서버가 Exchange 서버를 통해 메일을 보낼 수 있는지 여부입니다. 기본적으로 인증 된 사용자 만 허용됩니다. –

+1

내 서버 인터넷이 동일한 문제로 작동하지 않는다는 것을 알았습니다. –

답변

5

그래, 내가 어디서 잘못 됐는지 알아 냈어. 대답을 올리면 다른 누군가가 그걸 알아낼 수있어. 실제로는 일부러 때, 그것은 SMTP 서버에 인증 할 필요가 내 응용 프로그램을 말하고 있었다

props.put("mail.smtp.auth", true); 

: 나는 다음 코드 줄을했다. 이로 인해 내 응용 프로그램이 SMTP 서버에 로그인하여 전자 메일을 보내 오류 메시지가 생성되었습니다. 이 속성을 false로 설정하거나이 코드 줄을 사용하지 않으면이 문제가 해결됩니다. 이 외로운 코드는 내 Exchange 서버가 로그인하지 않은 SMTP 서버에만 필요합니다.