2010-06-02 3 views
14

나는 아래의 코드와 함께 작동하도록 노력하고있어 나는 mail.jar와 activation.jar을 사용하고JavaMail과 함께 사용하기 위해 메일 서버를 구성하는 방법은 무엇입니까?

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import javax.mail.*; 
import javax.mail.internet.*; // important 
import javax.mail.event.*;  // important 
import java.net.*; 
import java.util.*; 

public class servletmail extends HttpServlet { 
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out=response.getWriter(); 
     response.setContentType("text/html"); 
     try { 
      Properties props=new Properties(); 
      props.put("mail.smtp.host","localhost"); // 'localhost' for testing 
      Session session1 = Session.getDefaultInstance(props,null); 
      String s1 = request.getParameter("text1"); //sender (from) 
      String s2 = request.getParameter("text2"); 
      String s3 = request.getParameter("text3"); 
      String s4 = request.getParameter("area1"); 
      Message message =new MimeMessage(session1); 
      message.setFrom(new InternetAddress(s1)); 
      message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(s2,false)); 
      message.setSubject(s3); 
      message.setText(s4);   
      Transport.send(message); 
      out.println("mail has been sent"); 
     } catch(Exception ex) { 
      System.out.println("ERROR....."+ex); 
     } 
    } 
} 

. 그러나 메일 서버로 어떻게 구성해야하는지 이해할 수 없습니다. 어떤 메일 서버를 사용해야합니까? 위의 코드를 사용하여 전자 메일을 보낼 수 있습니까? 메일 서버 요구 사항은 무엇입니까? 어떻게 구성해야합니까?

답변

22

시작하려면 SMTP server이 필요합니다. 이메일을 보낼 수 있어야합니다. 웹 사이트를 제공하기 위해 HTTP 서버가 필요한 것과 같은 방식입니다. 분명히 이미 HTTP 서버 (servletcontainer 포함)가 있지만 SMTP 서버가 아직 구성되어 있지 않습니다.

ISP 나 Gmail, Yahoo 등의 공용 편지함과 같은 기존 이메일 계정과 연결된 SMTP 서버를 사용할 수 있습니다. SMTP 연결 세부 정보는 해당 설명서에서 찾을 수 있습니다. 일반적으로 호스트 이름포트 번호을 알아야합니다. 사용자 이름/비밀번호은 이메일 계정의 내용과 동일합니다.

호스트 이름 및 포트 번호는 다음 JavaMail에 대한 SMTP의 속성으로 설정해야합니다 다음

properties.put("mail.smtp.auth", "true"); 
Authenticator authenticator = new Authenticator() { 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication("yourusername", "yourpassword"); 
    } 
}; 

당신이 얻을 수있는 다음과 같이

Properties properties = new Properties(); 
properties.put("mail.transport.protocol", "smtp"); 
properties.put("mail.smtp.host", "smtp.example.com"); // smtp.gmail.com? 
properties.put("mail.smtp.port", "25"); 

사용자 이름/암호가 Authenticator 사용되어야한다 메일 세션은 다음과 같습니다.

Session session = Session.getDefaultInstance(properties, authenticator); 

SP 또는 공개 사서함을 사용하는 경우 이메일의 From 필드에 자신의 주소를 사용하도록 제한되며 대개 특정 간격으로 보낼 수있는 이메일의 양도 제한됩니다. 이 문제를 해결하려면 자체 SMTP 서버 (예 : Apache James) (Java 기반 또는 Microsoft Exchange 등)를 설치해야합니다.

어쨌든 나는 더 나은 이해를 얻을 수 있도록 JavaMail tutorial을 통해 스스로를 제안합니다.

+0

괜찮아요 ... thnaks .. – simplyblue

+0

안녕하세요 @ BalusC 내가 언급 한 바와 같이 메일 서버를 구성했지만, 나는'javax.mail.SendFailedException 점점 : 잘못된 주소; 중첩 예외는 다음과 같습니다. \t com.sun.mail.smtp.SMTPAddressFailedException : 450 4.1.1 <[email protected]> :받는 사람 주소가 거부되었습니다. 가상 사서함 표에 알 수없는 사용자입니다. 예외입니다. 동일한 도메인에서 메일을 보내는 중이면 잘 작동합니다. 어떤 생각? \t' – amarmishra

관련 문제