JavaMail API-이메일 삭제
이 장에서는 JavaMail API를 사용하여 이메일을 삭제하는 방법을 살펴 봅니다. 메시지 삭제에는 메시지와 관련된 플래그 작업이 포함됩니다. 다른 상태, 일부 시스템 정의 및 일부 사용자 정의에 대해 다른 플래그가 있습니다. 미리 정의 된 플래그는 내부 클래스 Flags.Flag에 정의되어 있으며 다음과 같습니다.
Flags.Flag.ANSWERED
Flags.Flag.DELETED
Flags.Flag.DRAFT
Flags.Flag.FLAGGED
Flags.Flag.RECENT
Flags.Flag.SEEN
Flags.Flag.USER
POP 프로토콜은 메시지 삭제 만 지원합니다.
삭제 프로그램에서 따르는 기본 단계는 다음과 같습니다.
속성에서 POP 및 SMPT 서버 세부 정보가있는 세션 개체를 가져옵니다. 메시지를 검색하려면 POP 세부 정보가 필요하고 메시지를 보내려면 SMPT 세부 정보가 필요합니다.
POP3 저장소 개체를 만들고 저장소에 연결합니다.
폴더 개체를 만들고 READ_WRITE 모드로 사서함에서 적절한 폴더를 엽니 다.
받은 편지함 폴더에서 메시지를 검색합니다.
메시지를 반복하고 Message 객체에 대해 setFlag (Flags.Flag.DELETED, true) 메서드를 호출하여 메시지를 삭제하려면 "Y"또는 "y"를 입력합니다.
DELETED로 표시된 메시지는 Folder 개체에서 expunge () 메서드를 호출하거나 expunge가 true로 설정된 폴더를 닫을 때까지 실제로 삭제되지 않습니다.
저장소 개체를 닫습니다.
자바 클래스 생성
자바 클래스 파일 만들기 ForwardEmail, 그 내용은 다음과 같습니다.
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class DeleteEmail {
public static void delete(String pop3Host, String storeType, String user,
String password)
{
try
{
// get the session object
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", pop3Host);
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(pop3Host, user, password);
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
String subject = message.getSubject();
System.out.print("Do you want to delete this message [y/n] ? ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
// set the DELETE flag to true
message.setFlag(Flags.Flag.DELETED, true);
System.out.println("Marked DELETE for message: " + subject);
} else if ("n".equals(ans)) {
break;
}
}
// expunges the folder to remove messages which are marked deleted
emailFolder.close(true);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "[email protected]";// change accordingly
String password = "*****";// change accordingly
delete(host, mailStoreType, username, password);
}
}
emailSession.setDebug (true); 명령문의 주석 처리를 제거하여 디버그를 설정할 수 있습니다 .
컴파일 및 실행
이제 클래스가 준비되었으므로 위 클래스를 컴파일 해 보겠습니다. 클래스 DeleteEmail.java를 디렉토리에 저장했습니다./home/manisha/JavaMailAPIExercise. 클래스 경로에 jars javax.mail.jar 및 activation.jar 이 필요합니다 . 아래 명령을 실행하여 명령 프롬프트에서 클래스를 컴파일하십시오 (두 jar 모두 / home / manisha / 디렉토리에 있음).
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail.java
이제 클래스가 컴파일되었으므로 다음 명령을 실행하여 실행하십시오.
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail
출력 확인
명령 콘솔에 다음 메시지가 표시되어야합니다.
messages.length---1
---------------------------------
Email Number 1
Subject: Testing
From: ABC <[email protected]>
Do you want to delete this message [y/n] ? y
Marked DELETE for message: Testing