JavaMail API-이메일 전달
이 장에서는 JavaMail API를 사용하여 이메일을 전달하는 방법을 살펴 봅니다. 아래 프로그램에서 따르는 기본 단계는 다음과 같습니다.
속성에서 POP 및 SMPT 서버 세부 정보가있는 세션 개체를 가져옵니다. 메시지를 검색하려면 POP 세부 정보가 필요하고 메시지를 보내려면 SMPT 세부 정보가 필요합니다.
POP3 저장소 개체를 만들고 저장소에 연결합니다.
폴더 개체를 만들고 사서함에서 적절한 폴더를 엽니 다.
메시지를 검색합니다.
메시지를 반복하고 전달하려면 "Y"또는 "y"를 입력합니다.
메시지의 모든 정보 (To, From, Subject, Content)를 가져옵니다.
메시지를 구성하는 부분으로 작업하여 전달 메시지를 작성하십시오. 첫 번째 부분은 메시지 텍스트이고 두 번째 부분은 전달할 메시지입니다. 둘을 여러 부분으로 결합하십시오. 그런 다음 적절한 주소가 지정된 메시지에 멀티 파트를 추가하고 보냅니다.
전송, 폴더 및 저장소 개체를 각각 닫습니다.
여기서는 대상 이메일 주소로 이메일을 보내는 JangoSMPT 서버를 사용했습니다. 설정은 환경 설정 장 에서 설명합니다 .
자바 클래스 생성
자바 클래스 파일 만들기 ForwardEmail, 그 내용은 다음과 같습니다.
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class ForwardEmail {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "pop.gmail.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.host", "relay.jangosmtp.net");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties);
try {
// session.setDebug(true);
// Get a Store object and connect to the current host
Store store = session.getStore("pop3s");
store.connect("pop.gmail.com", "[email protected]",
"*****");//change the user and password accordingly
// Create a Folder object and open the folder
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
Message[] messages = folder.getMessages();
if (messages.length != 0) {
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
// Get all the information from the message
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println("From: " + from);
}
String replyTo = InternetAddress.toString(message
.getReplyTo());
if (replyTo != null) {
System.out.println("Reply-to: " + replyTo);
}
String to = InternetAddress.toString(message
.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Date sent = message.getSentDate();
if (sent != null) {
System.out.println("Sent: " + sent);
}
System.out.print("Do you want to reply [y/n] : ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
Message forward = new MimeMessage(session);
// Fill in header
forward.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(from));
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(to));
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Create a multipart message
Multipart multipart = new MimeMultipart();
// set content
messageBodyPart.setContent(message, "message/rfc822");
// Add part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
forward.setContent(multipart);
forward.saveChanges();
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
Transport t = session.getTransport("smtp");
try {
//connect to the smpt server using transport instance
//change the user and password accordingly
t.connect("abc", "*****");
t.sendMessage(forward, forward.getAllRecipients());
} finally {
t.close();
}
System.out.println("message forwarded successfully....");
// close the store and folder objects
folder.close(false);
store.close();
}// end if
}// end for
}// end if
} catch (Exception e) {
e.printStackTrace();
}
}
}
session.setDebug (true); 문을 주석 해제하여 디버그를 설정할 수 있습니다 .
컴파일 및 실행
이제 클래스가 준비되었으므로 위 클래스를 컴파일 해 보겠습니다. ForwardEmail.java 클래스를 디렉토리에 저장했습니다./home/manisha/JavaMailAPIExercise. 클래스 경로에 jars javax.mail.jar 및 activation.jar 이 필요합니다 . 아래 명령을 실행하여 명령 프롬프트에서 클래스를 컴파일하십시오 (두 jar 모두 / home / manisha / 디렉토리에 있음).
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ForwardEmail.java
이제 클래스가 컴파일되었으므로 다음 명령을 실행하여 실행하십시오.
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ForwardEmail
출력 확인
명령 콘솔에 다음 메시지가 표시되어야합니다.
From: ABC <[email protected]>
Reply-to: [email protected]
To: XYZ <[email protected]>
Subject: Hi today is a nice day
Sent: Thu Oct 17 15:58:37 IST 2013
Do you want to reply [y/n] : y
message forwarded successfully....
메일이 전송 된받은 편지함을 확인하십시오. 우리의 경우 전달 된 메시지는 다음과 같습니다.