JavaEE-JavaMail 05受信、解析、返信、検索メール例
POP 3プロトコルとIMAPプロトコルの違い POP 3プロトコルは、電子メールクライアントがサーバ上のメールをダウンロードすることを許可するが、クライアントの操作[モバイルメール、タグ既読など]では、サーバ上の にフィードバックしない. IMAPプロトコルはWebMailと電子メールクライアント間の双方向通信を提供し、クライアントの操作はいずれもサーバーに同期して反応し、メールに対する操作は、サーバー上のメールも対応する動作を行い、例えばクライアントがメールボックスの中の3通のメールを受け取り、そのうちの1通を既読とマークし、他の2通を削除とマークする.これらの操作は、サーバ上の に即座にフィードバックされます.両プロトコルはIMAPプロトコルよりも便利で信頼性が高く、POP 3はメールを紛失したり、同じメールを複数回ダウンロードしたりしやすいが、IMAPプロトコルはメールクライアントを通じてWebMailとの双方向同期機能がこれらの問題をよく回避している POP 3プロトコルを使用したメールの表示
IMAPプロトコルを使用したメールの表示
メールの内容を解析する
前に定義したMailUtilsを修正し、対応する解析方法を追加します.
ブログの制限を超えているため、次の記事は単独でリストされます
返信メール、POP 3プロトコルでメールを表示、SMTPプロトコルで返信メールを送信
転送メール、POP 3プロトコルでメールを表示、SMTPプロトコルでメールを転送
メールの削除
メールの検索
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [CheckingMailsByPop3.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import org.junit.Before;
import org.junit.Test;
import javamail.utils.MailConstants;
import javamail.utils.PasswordUtils;
/**
* POP3
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class CheckingMailsByPop3 {
private static Properties properties = null;
private static String emailAddress = "[email protected]";
@Before
public void init() {
properties = new Properties();
properties.put("mail.store.protocol", MailConstants.PROTOCAL_POP3);
properties.put("mail.pop3.host", MailConstants.POP3_HOST_OF_SINA);
properties.put("mail.pop3.port", MailConstants.POP3_PORT_OF_SINA);
properties.put("mail.pop3.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
}
/**
* POP3
*
* @throws Exception
*/
public static void checkMailsByPop3() throws Exception {
// Session
Session session = Session.getInstance(properties);
Store store = session.getStore(MailConstants.PROTOCAL_POP3);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
//
Folder folder = store.getFolder("INBOX");
// , Folder.READ_WRITE
folder.open(Folder.READ_ONLY);
// POP3
// getUnreadMessageCount ,
// getNewMessageCount getDeletedMessageCount 0
System.out.println(" " + folder.getMessageCount() + " ");
System.out.println(" " + folder.getNewMessageCount() + " ");
System.out.println(" " + folder.getUnreadMessageCount() + " ");
System.out.println(" " + folder.getDeletedMessageCount() + " ");
//
Message[] messages = folder.getMessages();
System.out.println(" " + messages.length);
folder.close(true);
store.close();
}
@Test
public void testCheckMailsByPop3() throws Exception {
checkMailsByPop3();
}
}
IMAPプロトコルを使用したメールの表示
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [CheckingMailsByImap.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeUtility;
import org.junit.Before;
import org.junit.Test;
import com.sun.mail.imap.IMAPMessage;
import javamail.utils.MailConstants;
import javamail.utils.MailUtils;
import javamail.utils.PasswordUtils;
/**
* IMAP
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class CheckingMailsByImap {
private static Properties properties = null;
private static String emailAddress = "[email protected]";
@Before
public void init() {
properties = new Properties();
properties.put("mail.store.protocol", MailConstants.PROTOCAL_IMAP);
properties.put("mail.imap.host", MailConstants.IMAP_HOST_OF_SINA);
properties.put("mail.imap.port", MailConstants.IMAP_PORT_OF_SINA);
properties.put("mail.imap.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
}
/**
* IMAP
*
* @throws Exception
*/
public static void checkMailsByImap() throws Exception {
// Session
Session session = Session.getInstance(properties);
Store store = session.getStore("imap");
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
//
Folder folder = store.getFolder("INBOX");
//
folder.open(Folder.READ_WRITE);
//
System.out.println(" " + folder.getMessageCount() + " ");
System.out.println(" " + folder.getNewMessageCount() + " ");
System.out.println(" " + folder.getUnreadMessageCount() + " ");
System.out.println(" " + folder.getDeletedMessageCount() + " ");
//
Message[] messages = folder.getMessages();
for (Message message : messages) {
IMAPMessage imapMessage = (IMAPMessage) message;
String subject = MimeUtility.decodeText(imapMessage.getSubject());
boolean isSeen = MailUtils.isSeen(imapMessage);
if (!isSeen) {
System.out.println("[" + subject + "] , ?");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String answer = reader.readLine();
if ("yes".equalsIgnoreCase(answer)) {
// ,
message.setFlag(Flag.SEEN, true);
}
}
}
folder.close(true);
store.close();
}
@Test
public void testCheckMailsByImap() throws Exception {
checkMailsByImap();
}
}
メールの内容を解析する
前に定義したMailUtilsを修正し、対応する解析方法を追加します.
ブログの制限を超えているため、次の記事は単独でリストされます
返信メール、POP 3プロトコルでメールを表示、SMTPプロトコルで返信メールを送信
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [ReplyingMails.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import org.junit.Before;
import org.junit.Test;
import javamail.utils.MailConstants;
import javamail.utils.PasswordUtils;
/**
* POP3 SMTP <br/>
*
* POP3 <br/>
* SMTP <br/>
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class ReplyingMails {
private static Properties properties;
private static String emailAddress = "[email protected]";
@Before
public void init() {
properties = new Properties();
properties.put("mail.store.protocol", MailConstants.PROTOCAL_POP3);
properties.put("mail.pop3.host", MailConstants.POP3_HOST_OF_SINA);
properties.put("mail.pop3.port", MailConstants.POP3_PORT_OF_SINA);
properties.put("mail.pop3.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.smtp.host", MailConstants.SMTP_HOST_OF_SINA);
properties.put("mail.smtp.port", MailConstants.SMTP_PORT_OF_SINA);
properties.put("mail.smtp.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
}
/**
*
*
* @throws Exception
*/
public static void replayMails() throws Exception {
Session session = Session.getInstance(properties);
Store store = session.getStore(MailConstants.PROTOCAL_POP3);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Message[] messages = folder.getMessages();
if (messages != null && messages.length > 0) {
for (Message message : messages) {
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println(" : " + MimeUtility.decodeText(from));
}
String replayTo = InternetAddress.toString(message.getReplyTo());
if (replayTo != null) {
System.out.println(" : " + MimeUtility.decodeText(replayTo));
}
String to = InternetAddress.toString(message.getRecipients(RecipientType.TO));
System.out.println(" : " + MimeUtility.decodeText(to));
String subject = message.getSubject();
if (subject != null) {
System.out.println(" : " + MimeUtility.decodeText(subject));
}
Date sendDate = message.getSentDate();
if (sendDate != null) {
System.out.println(" : " + sendDate);
}
System.out.println(" ?");
String answer = reader.readLine();
if ("yes".equalsIgnoreCase(answer)) {
MimeMessage replayMessage = new MimeMessage(session);
replayMessage = (MimeMessage) message.reply(false);
replayMessage.setFrom(new InternetAddress(to));
replayMessage.setText(" ...");
replayMessage.setReplyTo(message.getReplyTo());
Transport transport = session.getTransport(MailConstants.PROTOCOL_SMTP);
transport.connect(MailConstants.SMTP_HOST_OF_SINA, emailAddress,
PasswordUtils.readPassword(emailAddress));
transport.sendMessage(replayMessage, replayMessage.getAllRecipients());
transport.close();
} else {
break;
}
}
}
folder.close(true);
store.close();
}
@Test
public void testReplayMails() throws Exception {
replayMails();
}
}
転送メール、POP 3プロトコルでメールを表示、SMTPプロトコルでメールを転送
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [ForwardingMails.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Multipart;
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;
import javax.mail.internet.MimeUtility;
import org.junit.Before;
import org.junit.Test;
import javamail.utils.MailConstants;
import javamail.utils.PasswordUtils;
/**
* POP3 SMTP <br/>
*
* POP3 <br/>
* SMTP <br/>
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class ForwardingMails {
private static Properties properties;
private static String emailAddress = "[email protected]";
@Before
public void init() {
properties = new Properties();
properties.put("mail.store.protocol", MailConstants.PROTOCAL_POP3);
properties.put("mail.pop3.host", MailConstants.POP3_HOST_OF_SINA);
properties.put("mail.pop3.port", MailConstants.POP3_PORT_OF_SINA);
properties.put("mail.pop3.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.smtp.host", MailConstants.SMTP_HOST_OF_SINA);
properties.put("mail.smtp.port", MailConstants.SMTP_PORT_OF_SINA);
properties.put("mail.smtp.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
}
/**
*
*
* @throws Exception
*/
public static void fowrardMails() throws Exception {
Session session = Session.getInstance(properties);
Store store = session.getStore(MailConstants.PROTOCAL_POP3);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Message[] messages = folder.getMessages();
if (messages != null && messages.length > 0) {
for (Message message : messages) {
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println(" : " + MimeUtility.decodeText(from));
}
String replayTo = InternetAddress.toString(message.getReplyTo());
if (replayTo != null) {
System.out.println(" : " + MimeUtility.decodeText(replayTo));
}
String to = InternetAddress.toString(message.getRecipients(RecipientType.TO));
System.out.println(" : " + MimeUtility.decodeText(to));
String subject = message.getSubject();
if (subject != null) {
System.out.println(" : " + MimeUtility.decodeText(subject));
}
Date sendDate = message.getSentDate();
if (sendDate != null) {
System.out.println(" : " + sendDate);
}
System.out.println(" ?");
String answer = reader.readLine();
if ("yes".equalsIgnoreCase(answer)) {
MimeMessage forwardMessage = new MimeMessage(session);
forwardMessage.setRecipients(RecipientType.TO, InternetAddress.parse(from));
forwardMessage.setFrom(new InternetAddress(to));
forwardMessage.setSubject(" : " + subject);
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart.setContent(message, "message/rfc822");
multipart.addBodyPart(messageBodyPart);
forwardMessage.setContent(multipart);
forwardMessage.saveChanges();
Transport transport = session.getTransport(MailConstants.PROTOCOL_SMTP);
transport.connect(MailConstants.SMTP_HOST_OF_SINA, emailAddress,
PasswordUtils.readPassword(emailAddress));
transport.sendMessage(forwardMessage, forwardMessage.getAllRecipients());
transport.close();
} else {
break;
}
}
}
folder.close(true);
store.close();
}
@Test
public void testForwardMails() throws Exception {
fowrardMails();
}
}
メールの削除
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [DeletingMails.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
import org.junit.Before;
import org.junit.Test;
import javamail.utils.MailConstants;
import javamail.utils.PasswordUtils;
/**
* , <br/>
*
* <br/>
* Flags.Flag.ANSWERED<br/>
* Flags.Flag.DELETED<br/>
* Flags.Flag.DRAFT<br/>
* Flags.Flag.FLAGGED<br/>
* Flags.Flag.RECENT<br/>
* Flags.Flag.SEEN<br/>
* Flags.Flag.USER<br/>
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class DeletingMails {
private static Properties properties;
private static String emailAddress = "[email protected]";
@Before
public void init() {
properties = new Properties();
properties.put("mail.store.protocol", MailConstants.PROTOCAL_POP3);
properties.put("mail.pop3.host", MailConstants.POP3_HOST_OF_SINA);
properties.put("mail.pop3.port", MailConstants.POP3_PORT_OF_SINA);
properties.put("mail.pop3.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.smtp.host", MailConstants.SMTP_HOST_OF_SINA);
properties.put("mail.smtp.port", MailConstants.SMTP_PORT_OF_SINA);
properties.put("mail.smtp.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
}
/**
*
*
* @throws Exception
*/
public static void deleteMails() throws Exception {
Session session = Session.getInstance(properties);
Store store = session.getStore(MailConstants.PROTOCAL_POP3);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Message[] messages = folder.getMessages();
if (messages != null && messages.length > 0) {
for (Message message : messages) {
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println(" : " + MimeUtility.decodeText(from));
}
String replayTo = InternetAddress.toString(message.getReplyTo());
if (replayTo != null) {
System.out.println(" : " + MimeUtility.decodeText(replayTo));
}
String to = InternetAddress.toString(message.getRecipients(RecipientType.TO));
System.out.println(" : " + MimeUtility.decodeText(to));
String subject = message.getSubject();
if (subject != null) {
System.out.println(" : " + MimeUtility.decodeText(subject));
}
Date sendDate = message.getSentDate();
if (sendDate != null) {
System.out.println(" : " + sendDate);
}
System.out.println(" ?");
String answer = reader.readLine();
if ("yes".equalsIgnoreCase(answer)) {
message.setFlag(Flags.Flag.DELETED, true);
System.out.println(" ");
} else {
break;
}
}
}
folder.close(true);
store.close();
}
@Test
public void testDeleteMails() throws Exception {
deleteMails();
}
}
メールの検索
/********************************************************************************
* Project Name [JavaEE_Components]
* File Name [SearchingMails.java]
* Creation Date [2015-01-01]
*
* Copyright© [email protected] All Rights Reserved
*
* Work hard, play harder, think big and keep fit
********************************************************************************/
package javamail.mail;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.search.AndTerm;
import javax.mail.search.BodyTerm;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.FromStringTerm;
import javax.mail.search.IntegerComparisonTerm;
import javax.mail.search.NotTerm;
import javax.mail.search.OrTerm;
import javax.mail.search.SearchTerm;
import javax.mail.search.SentDateTerm;
import javax.mail.search.SizeTerm;
import javax.mail.search.SubjectTerm;
import org.junit.Before;
import org.junit.Test;
import javamail.utils.MailConstants;
import javamail.utils.PasswordUtils;
/**
*
*
* @author (Sean Yang aka ShortPeace)
* @version 1.0
* @since jdk 1.8
*
*/
public class SearchingMails {
private static Properties properties = null;
private static String emailAddress = "[email protected]";
private static URLName url;
@Before
public void init() {
properties = new Properties();
properties.put("mail.pop3.auth", MailConstants.IS_AUTHORIZATION_NEED);
properties.put("mail.debug", String.valueOf(MailConstants.IS_DEBUG_MOD_ENABLED));
url = new URLName(MailConstants.PROTOCAL_POP3, MailConstants.POP3_HOST_OF_SINA,
Integer.parseInt(MailConstants.POP3_PORT_OF_SINA), null, emailAddress,
PasswordUtils.readPassword(emailAddress));
}
/**
*
*
* @throws Exception
*/
public static void searchMails() throws Exception {
// Session
Session session = Session.getInstance(properties);
Store store = session.getStore(url);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));
//
Folder folder = store.getFolder("INBOX");
// , Folder.READ_WRITE
folder.open(Folder.READ_ONLY);
//
Message[] messages = searchMails(folder);
System.out.println(" " + messages.length + " ");
}
/**
*
*
* @param folder
* @return
* @throws MessagingException
*/
@SuppressWarnings("unused")
private static Message[] searchMails(Folder folder) throws MessagingException {
//
String subject = "java";
SearchTerm subjectTerm = new SubjectTerm(subject);
//
String emailFrom = "[email protected]";
SearchTerm fromTerm = new FromStringTerm(emailFrom);
//
String content = "html";
SearchTerm bodyTerm = new BodyTerm(content);
SearchTerm andTerm = new AndTerm(subjectTerm, fromTerm);
SearchTerm notTerm = new NotTerm(bodyTerm);
SearchTerm orTerm = new OrTerm(andTerm, notTerm);
//
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date monday = calendar.getTime();
SearchTerm geTerm = new SentDateTerm(ComparisonTerm.GE, monday);
SearchTerm leTerm = new SentDateTerm(ComparisonTerm.LE, new Date());
SearchTerm dateRangeTerm = new AndTerm(geTerm, leTerm);
//
int size = 1024 * 100; // 100kb
SearchTerm mailSizeTerm = new SizeTerm(IntegerComparisonTerm.GE, size);
return folder.search(dateRangeTerm);
}
@Test
public void testSearchMails() throws Exception {
searchMails();
}
}