Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Java WebMail System Implementation(4)
 
첨부파일의 메일보내기 및 POP3서버의 폴더내용을 이용하여 데이터를 가져오도록 하는 샘플을 설명과 함께 보도록 하자. ( 2003/05/13 ) 686
Written by ienvyou - 최지웅
4 of 4
 
Sending HTML / Image Mail 


HTML메시지 및 Image보내기

HTML을 메시지로 보내는 것은 text 메시지를 보내는 것보다 조금 더 간단하게 이루어 낼수 있다. 

특정값만 세팅하면 되기 때문인데, 받는 쪽에서 해당되는 contentType에 따라 메시지를 html로 

해석할지 아니면 일반 text로 해석할지를 결정하기 때문에 보내는 쪽에서 message의 setContent() 

메소드로 원하는 타입만 세팅하면 그만이다.

예>
	String htmlText = "<H1>Hello</H1>" + 
		"<img src=\"http://www.jguru.com/images/logo.gif\">";
	message.setContent(htmlText, "text/html"));

메시지를 수신하는 측에서 모두 받았을때, JavaMail API는 HTML메시지를 표현하기 위하여 

아무런 일을 하지 않아도 된다. 단순히 보기 위해 Swing의 JEditorPane이나 HTML을 볼수 있는

third-Party 컴포넌트만 있으면 되기 때문이다.

예로서 JEditorPane예제를 메일에 포함시켜 놓은 코드이다.

if (message.getContentType().equals("text/html")) {
  String content = (String)message.getContent();
  JFrame frame = new JFrame();
  JEditorPane text = new JEditorPane("text/html", content);
  text.setEditable(false);
  JScrollPane pane = new JScrollPane(text);
  frame.getContentPane().add(pane);
  frame.setSize(300, 300);
  frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  frame.show();
}

================================
이번에는 메일이 이미지를 포함시켜 전송하는 방법에 대하여 알아보자.

HTML을 이용하여 메시지를 모두 보냈다면 사실 궁금한 것이 이미지를 어떻게 메시지내용안에 

포함시켜 전송해야 할것인가에 대한 것인데, 이러한 이미지의 전송은 cid URL, 즉 image를 첨부할때 

content-ID header를 참조하는 특별한 태그에 의해서 이미지를 조작하여 보낼수 있는 기능을 제공한다.

이미지 첨부에 대한 처리는 메시지에 파일을 포함하는 것과 비슷하며, 단지 다른 것이라고는 

MimeMultiPart의 생성자들에게 subType들이 세팅되어지고 img태그를 사용해서 이미지가 

Content-ID header에 세팅되어진다는것을 반드시 알려야 한다.

 아래의 코드가 바로 그것을 구현해 놓은 코드이다.

String file = ...;

// Create the message
Message message = new MimeMessage(session);

// Fill its headers
message.setSubject("Embedded Image");
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, 
  new InternetAddress(to));

// message part를 생성한다.
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>Hello</H1>" + 
  "<img src=\"cid:memememe\">";
messageBodyPart.setContent(htmlText, "text/html");

// Multipart를 생성한다.
MimeMultipart multipart = new MimeMultipart("related");
multipart.addBodyPart(messageBodyPart);

// 이미지를 위한 part를 생성한다.
messageBodyPart = new MimeBodyPart();

// 이미지를 가져와 part에 포함시킨다.
DataSource fds = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","memememe");

//  multi-part에 추가시킨다.
multipart.addBodyPart(messageBodyPart);

// 메시지와 multipart를 결합시킨다.
message.setContent(multipart);

아래는 소스코드이다.



import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class HtmlImageExample {
  public static void main (String args[]) throws Exception {
	  new HtmlImageExample();
  }
  public HtmlImageExample() throws Exception {
    String host = "orgio.net";
    String from = "ienvyou@javapattern.info";
    String to = "specular@netsgo.com";
    String file = "logo.gif";

    // Get system properties
    Properties props = System.getProperties();

    // Setup mail server
    props.put("mail.smtp.host", host);
	
	props.put("mail.smtp.auth","true");

	Authenticator auth = new MyAuthentication();
    // Get session
    Session session = Session.getDefaultInstance(props, auth);

	session.setDebug(true);

    // Create the message
    Message message = new MimeMessage(session);

    // Fill its headers
    message.setSubject("Embedded Image");
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

    // Create your new message part
    BodyPart messageBodyPart = new MimeBodyPart();

    // Set the HTML content, be sure it references the attachment
    String htmlText = "<H1>Hello</H1>" + 
      "<img src=\"cid:memememe\">";

    // Set the content of the body part
    messageBodyPart.setContent(htmlText, "text/html");

    // Create a related multi-part to combine the parts
    MimeMultipart multipart = new MimeMultipart("related");

    // Add body part to multipart
    multipart.addBodyPart(messageBodyPart);

    // Create part for the image
    messageBodyPart = new MimeBodyPart();

    // Fetch the image and associate to part
    DataSource fds = new FileDataSource(file);
    messageBodyPart.setDataHandler(new DataHandler(fds));

    // Add a header to connect to the HTML
    messageBodyPart.setHeader("Content-ID","memememe");

    // Add part to multi-part
    multipart.addBodyPart(messageBodyPart);

    // Associate multi-part with message
    message.setContent(multipart);

    // Send message
	Transport.send(message);
  }
}


class MyAuthentication extends Authenticator {
	PasswordAuthentication pa;
	public MyAuthentication(){
		pa = new PasswordAuthentication("ienvyou","0000");
	}
	public PasswordAuthentication getPasswordAuthentication() {
		return pa;
	}
}
 
1 2 3 4
References
 
아티클소스 : javaMail2.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD