2010-04-27 8 views
0

다음 코드는 오류를 발생시킵니다. 나에게 무슨 잘못인지 이해시켜주세요.JavaMail : SMTP 서버에 연결할 수 없습니다.

import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 
public class SendMail 
{ 
    public static void main(String [] args)throws MessagingException 
    { 
    SendMail sm=new SendMail(); 
    sm.postMail(new String[]{"[email protected]"},"hi","hello","[email protected]"); 
    } 

public void postMail(String recipients[ ], String subject, String message , String from) throws MessagingException 
{ 
    boolean debug = false; 

    //Set the host smtp address 
    Properties props = new Properties(); 
    props.put("mail.smtp.host", "webmail.emailmyname.com"); 

    // create some properties and get the default Session 
    Session session = Session.getDefaultInstance(props, null); 
    session.setDebug(debug); 

    // create a message 
    Message msg = new MimeMessage(session); 

    // set the from and to address 
    InternetAddress addressFrom = new InternetAddress(from); 
    msg.setFrom(addressFrom); 

    InternetAddress[] addressTo = new InternetAddress[recipients.length]; 
    for (int i = 0; i < recipients.length; i++) 
    { 
     addressTo[i] = new InternetAddress(recipients[i]); 
    } 
    msg.setRecipients(Message.RecipientType.TO, addressTo); 


    // Optional : You can also set your custom headers in the Email if you Want 
    msg.addHeader("MyHeaderName", "myHeaderValue"); 

    // Setting the Subject and Content Type 
    msg.setSubject(subject); 
    msg.setContent(message, "text/plain"); 
    Transport.send(msg); 
} 
} 

Exception: 
<pre> 
com.sun.mail.smtp.SMTPSendFailedException: 450 smtpout04.dca.untd.com Authentication required 

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829) 
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368) 
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886) 
    at javax.mail.Transport.send0(Transport.java:191) 
    at javax.mail.Transport.send(Transport.java:120) 
    at SendMail.postMail(SendMail.java:52) 
    at SendMail.main(SendMail.java:10) 
많은, 많은 ISP들이 네트워크 외부의 서버에서 외부 포트 25에 대한 액세스를 차단하는 것이

+0

@javacode 같은 질문을 다시 게시하지 마십시오. 추가 할 사항이 있으면 원래 질문을 업데이트하십시오. 활동을 표시하면 웹 사이트에서 질문을 제기하고 더 많은 잠재 고객을 확보하게됩니다. –

+0

가능한 중복 http : // stackoverflow.com/questions/2724053/run-time-error-whats-wrong –

+1

BAH! 아무것도 편집하지 않았습니다! –

답변

0

참고. 대신 ISP는 SMTP 서버를 사용해야합니다.

"인증 필요"가 표시되면 먼저 사용자 이름과 암호를 입력하고 새 메일 확인과 같은 요청을 하나 이상 실행해야합니다. SMTP가 전자 메일을 보내기 위해 사용자 이름과 암호를 요구하지 않더라도 많은 SMTP 서버는 사용자가 로그인하기 전에 POP 또는 IMAP을 통해 메일을 확인하여 보낼 수 있습니다.

+0

코드를 사용할 수 있습니까? – user327136

+0

사용자 이름과 비밀번호는 어디에 지정해야합니까? – user327136

+0

POP 또는 IMAP을 통해 이루어집니다. –

1

예외 메시지에서 "인증 필요"는 대상 SMTP 서버가 로그인해야한다고 제안합니다 (아마도 TLS 또는 SSL을 통해). 몇 년 전까지 만해도 SMTP 서버에서는 일반적이지 않았습니다 (스팸 방지 대책). 간과하기 쉽습니다.

authenticate with JavaMail 사람 :

SMTP 서버에 연결할 때 사용자 이름과 암호를 사용하여 SMTP 전송을 mail.smtp.auth 특성 (아래 참조)를 설정하거나 제공해야합니다 SMTP 인증을 사용하려면 . 다음과 같은 방법이 사용 하나를 수행 할 수

  • 은 메일 세션을 생성 할 때 인증 자 객체를 제공하고, 인증 자 콜백하는 동안 사용자 이름과 암호 정보를 제공합니다.

    mail.smtp.user 속성은 콜백에 대한 기본 사용자 이름을 제공하도록 설정할 수 있지만 암호는 명시 적으로 제공해야합니다.

    이 방법을 사용하면 정적 전송 전송 방법을 사용하여 메시지를 보낼 수 있습니다.

  • username 및 password 인수를 사용하여 Transport 연결 메소드를 명시 적으로 호출하십시오.

이 방법을 사용하려면 전송 개체를 명시 적으로 관리하고 전송 sendMessage 메서드를 사용하여 메시지를 보내야합니다. transport.java 데모 프로그램은 Transport 객체를 관리하는 방법을 보여줍니다. 다음은 대략 정적 전송 전송 방법과 동일하지만 필요한 사용자 이름과 비밀번호를 제공합니다.

전송 tr = session.getTransport ("smtp");

tr.connect (smtphost, username, password);

msg.saveChanges(); // 이것을 잊지 마십시오.

tr.sendMessage (msg, msg.getAllRecipients());

tr.close();

+0

smtp 서버에 로그인하는 방법? – user327136

+0

나는 Javadoc을 봤는데 그것에서 인용문을 붙여. –

+0

서버가 "SMTP Auth"를 사용하고 있지 않습니다. "SMTP Auth"를 사용하는 경우 450 응답이 아니라 530 응답을 얻습니다. 응답이 450 인 경우 서버는 "POP before SMTP"를 사용하는 것이 가장 가능성이 높습니다. 메일을 보내기 전에 POP 또는 IMAP을 통해 연결해야합니다. –

관련 문제