Etiket arşivi: fetch email with java

Java İle Email İşlemleri

JavaMail Api İle Email İşlemleri

JavaMail Api ile email gönderme ve alma işlemlerini gerçekleştirebilirsiniz. Email işlemlerini gerçekleştirmek için yazıda verilen kod örneklerini incelemeniz yeterlidir. Yazının sonunda kaynak kodlar Eclipse Java projesi olarak bulunmaktadır.

1. Java İle E-Mail Gönderme

IEMailSender.java interfaceini oluşturuyoruz. IEMailSender iki adet metod içeriyor birisi sendSimpleEMail diğeri ise sendEMailWithAttachment.

package com.apps.email.sender;

import com.apps.email.model.EMail;

public interface IEMailSender {

	/**
	 * 
	 * Parametre olarak verilmis olan email nesnesi email olarak gonderilir.
	 * Email nesnesi attachmentlari ile birlikte gonderilir.
	 * 
	 * @param email
	 *            , attachmentlari ile birlikte gonderilmek istenen email
	 *            nesnesi.
	 * 
	 * @throws Exception
	 * 
	 * @author Musa YUVACI
	 * 
	 * @version 1.0 01.06.2012
	 */
	void sendEMailWithAttachment(EMail email) throws Exception;

	/**
	 * 
	 * Parametre olarak verilmis olan email nesnesi email olarak gonderilir.
	 * Email nesnesinin attachment kismi dikkate alinmaz.Sadece text olarak mail
	 * gonderilir.
	 * 
	 * @param email
	 *            , gonderilmek istenen email nesnesi.Emailin attachmentlari
	 *            dikkate alinmaz.
	 * 
	 * @throws Exception
	 * 
	 * @author Musa YUVACI
	 * 
	 * @version 1.0 01.06.2012
	 */
	void sendSimpleEMail(EMail email) throws Exception;
}

IEmailSender.java interfaceini implement eden EMailSender.java classını oluşturuyoruz.

package com.apps.email.sender;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
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 com.apps.email.model.EMail;
import com.apps.email.model.EMailAttachment;
import com.apps.email.utility.EnumValues.EmailBaglantiGuvenligi;

public class EMailSender implements IEMailSender {

	private String host;
	private String username;
	private String password;
	private String port;
	private EmailBaglantiGuvenligi baglantiGuvenligi;
	private boolean authentication;

	public EMailSender(String host, String username, String password, String port, EmailBaglantiGuvenligi baglantiGuvenligi, boolean authentication) {

		this.host = host;
		this.username = username;
		this.password = password;
		this.port = port;
		this.baglantiGuvenligi = baglantiGuvenligi;
		this.authentication = authentication;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void sendSimpleEMail(EMail email) throws Exception {

		Properties props = new Properties();
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.port", port);
		props.put("mail.smtp.auth", String.valueOf(authentication));

		if (EmailBaglantiGuvenligi.SSL.equals(baglantiGuvenligi)) {

			props.put("mail.smtp.socketFactory.port", "465");
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

		} else if (EmailBaglantiGuvenligi.STARTTLS.equals(baglantiGuvenligi)) {

			props.put("mail.smtp.starttls.enable", "true");
		}

		Session session;

		if (authentication) {

			session = Session.getInstance(props, new javax.mail.Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					
					return new PasswordAuthentication(username, password);
				}
			});

		} else {

			session = Session.getInstance(props);
		}

		try {

			List<String> to = null;
			List<String> cc = null;
			List<String> bcc = null;

			if(email.getToAdresses() != null) {
				
				to = Arrays.asList(email.getToAdresses().split(","));
			}
			
			if(email.getCcAdresses() != null) {
				
				cc = Arrays.asList(email.getCcAdresses().split(","));
			}
			
			if(email.getBccAdresses() != null) {
				
				bcc = Arrays.asList(email.getBccAdresses().split(","));
			}	
			
			InternetAddress[] toAddresses = null;

			if (to != null && to.size() != 0) {

				int size = 0;

				for (String toMailAdresi : to) {

					if (!"".equals(toMailAdresi.trim())) {
						size++;
					}
				}

				toAddresses = new InternetAddress[size];

				for (int index = 0; index < to.size(); index++) {

					if (!"".equals(to.get(index).trim())) {

						toAddresses[index] = new InternetAddress(to.get(index));
					}
				}
			}

			InternetAddress[] ccAddresses = null;

			if (cc != null && cc.size() != 0) {

				int size = 0;

				for (String ccMailAdresi : cc) {

					if (!"".equals(ccMailAdresi.trim())) {
						size++;
					}
				}

				ccAddresses = new InternetAddress[size];

				for (int index = 0; index < cc.size(); index++) {

					if (!"".equals(cc.get(index).trim())) {

						ccAddresses[index] = new InternetAddress(cc.get(index));
					}
				}
			}

			InternetAddress[] bccAddresses = null;

			if (bcc != null && bcc.size() != 0) {

				int size = 0;

				for (String bccMailAdresi : bcc) {

					if (!"".equals(bccMailAdresi.trim())) {
						size++;
					}
				}

				bccAddresses = new InternetAddress[size];

				for (int index = 0; index < bcc.size(); index++) {

					if (!"".equals(bcc.get(index).trim())) {

						bccAddresses[index] = new InternetAddress(bcc.get(index));
					}
				}
			}

			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress(email.getFrom()));
			

			if (toAddresses != null && toAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.TO, toAddresses);
			}

			if (ccAddresses != null && ccAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.CC, ccAddresses);
			}

			if (bccAddresses != null && bccAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.BCC, bccAddresses);
			}

			message.setSubject(email.getSubject());
			message.setSentDate(new Date());
			message.setContent(email.getMessage(), "text/html;charset=ISO-8859-9");

			Transport.send(message);

		} catch (MessagingException e) {
			
			throw new RuntimeException(e);
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void sendEMailWithAttachment(EMail email) throws Exception {

		Properties props = new Properties();
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.port", port);
		props.put("mail.smtp.auth", String.valueOf(authentication));

		if (EmailBaglantiGuvenligi.SSL.equals(baglantiGuvenligi)) {

			props.put("mail.smtp.socketFactory.port", "465");
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

		} else if (EmailBaglantiGuvenligi.STARTTLS.equals(baglantiGuvenligi)) {

			props.put("mail.smtp.starttls.enable", "true");

		} else {

		}

		Session session;

		if (authentication) {

			session = Session.getInstance(props, new javax.mail.Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(username, password);
				}
			});

		} else {

			session = Session.getInstance(props);
		}

		try {
			
			List<String> to = null;
			List<String> cc = null;
			List<String> bcc = null;

			if(email.getToAdresses() != null) {
				
				to = Arrays.asList(email.getToAdresses().split(","));
			}
			
			if(email.getCcAdresses() != null) {
				
				cc = Arrays.asList(email.getCcAdresses().split(","));
			}
			
			if(email.getBccAdresses() != null) {
				
				bcc = Arrays.asList(email.getBccAdresses().split(","));
			}
			
			InternetAddress[] toAddresses = null;

			if (to != null && to.size() != 0) {

				int size = 0;

				for (String toMailAdresi : to) {

					if (!"".equals(toMailAdresi.trim())) {
						size++;
					}
				}

				toAddresses = new InternetAddress[size];

				for (int index = 0; index < to.size(); index++) {

					if (!"".equals(to.get(index).trim())) {

						toAddresses[index] = new InternetAddress(to.get(index));
					}
				}
			}

			InternetAddress[] ccAddresses = null;

			if (cc != null && cc.size() != 0) {

				int size = 0;

				for (String ccMailAdresi : cc) {

					if (!"".equals(ccMailAdresi.trim())) {
						size++;
					}
				}

				ccAddresses = new InternetAddress[size];

				for (int index = 0; index < cc.size(); index++) {

					if (!"".equals(cc.get(index).trim())) {

						ccAddresses[index] = new InternetAddress(cc.get(index));
					}
				}
			}

			InternetAddress[] bccAddresses = null;

			if (bcc != null && bcc.size() != 0) {

				int size = 0;

				for (String bccMailAdresi : bcc) {

					if (!"".equals(bccMailAdresi.trim())) {
						size++;
					}
				}

				bccAddresses = new InternetAddress[size];

				for (int index = 0; index < bcc.size(); index++) {

					if (!"".equals(bcc.get(index).trim())) {

						bccAddresses[index] = new InternetAddress(bcc.get(index));
					}
				}
			}

			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress(email.getFrom()));

			if (toAddresses != null && toAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.TO, toAddresses);
			}

			if (ccAddresses != null && ccAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.CC, ccAddresses);
			}

			if (bccAddresses != null && bccAddresses.length > 0) {

				message.setRecipients(Message.RecipientType.BCC, bccAddresses);
			}

			message.setSubject(email.getSubject());
			message.setSentDate(new Date());

			/**
			 * Multi part tanımlanıyor.
			 */
			Multipart multiPart = new MimeMultipart();

			/**
			 *İlk önce text part tanımlanıp multi parta ekleniyor.
			 */
			MimeBodyPart textPart = new MimeBodyPart();
			textPart.setText(email.getMessage(),"ISO-8859-9");
			multiPart.addBodyPart(textPart);
		
			/**
			 *Emaile ait butun attachmentler(dosyalar) multi parta ekleniyor 
			 */
			for(EMailAttachment emailAttachment : email.getAttachmentList()) {
				
				MimeBodyPart filePart = new MimeBodyPart();
				FileDataSource fds = new FileDataSource(emailAttachment.getFilePath());

				filePart.setDataHandler(new DataHandler(fds));
				filePart.setFileName(fds.getName());

				multiPart.addBodyPart(filePart);
			}

			/**
			 *Multi partın içeriği message nesnesine veriliyor
			 */
			message.setContent(multiPart);

			Transport.send(message);

		} catch (MessagingException e) {

			throw new RuntimeException(e);
		}
	}
}

EMailSender.java classında IEMailSender.java interface inde bulunan sendSimpleEMail ve sendEMailWithAttachment metodları implement edildi. sendSimpleEmail metodu emailin sadece text olan kısmını gönderir, sendEMailWithAttachment metodu ise hem text hemde attachmentlari gönderir. Burada iki metod yazılmasındaki amaç Java Mail Api ile yapılabileceklerin gösterilmesidir.

2. Java İle Emailleri Email Servis Sağlayıcısından Alma İşlemi

IEMailReader.java interfaceini oluşturuyoruz.

package com.apps.email.reader;

import java.util.Date;
import java.util.List;

import com.apps.email.model.EMail;

public interface IEMailReader {

	/**
	 * EMail servis sağlayicisinda bulunan butun emailler alinir. Alinan
	 * emaillerin attachmentleri parametre olarak verilmis olan downloadDir
	 * system pathine download edilir.
	 * 
	 * @NOT: EMail servis saglayicisina giris yapabilmek icin gerekli olan
	 *       bilgiler, IEMailReader iğnterface ini implement eden classin
	 *       costructorinda verilecektir.
	 * 
	 * @param downloadDir
	 *            , EMail servis saglayicisindan alinan maillerin
	 *            attachmentlarinda bulunan dosyalarin download edilecegi system
	 *            pathi.
	 * 
	 * @return emailListesi, EMail servis saglayicisindan alinan emaillerin
	 *         listesi.
	 * 
	 * @throws Exception
	 * 
	 * @author Musa YUVACI
	 * 
	 * @version 1.0 01.06.2012
	 * 
	 */
	List<EMail> getAllEMailList(String downloadDir) throws Exception;

	/**
	 * EMail servis sağlayicisinda bulunan emaillerin sendDateleri, parametre
	 * olarak verilmis olan lastAccesingDate tarihine esit ve buyuk olanlar
	 * alinir. Alinan emaillerin attachmentleri parametre olarak verilmis olan
	 * downloadDir system pathine download edilir.
	 * 
	 * @NOT: EMail servis saglayicisina giris yapabilmek icin gerekli olan
	 *       bilgiler, IEMailReader iğnterface ini implement eden classin
	 *       costructorinda verilecektir.
	 * 
	 * @param downloadDir
	 *            , EMail servis saglayicisindan alinan maillerin
	 *            attachmentlarinda bulunan dosyalarin download edilecegi system
	 *            pathi.
	 * 
	 * @return emailListesi, EMail servis saglayicisindan alinan emaillerin
	 *         listesi.
	 * 
	 * @throws Exception
	 * 
	 * @author Musa YUVACI
	 * 
	 * @version 1.0 01.06.2012
	 * 
	 */
	List<EMail> getNewEMailList(String downloadDir, Date lastAccesingDate) throws Exception;
}

IEMailReader.java interfaceini implement eden Pop3EMailReader.java classını oluşturuyoruz.

package com.apps.email.reader;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import javax.activation.MimetypesFileTypeMap;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.SentDateTerm;

import com.apps.email.model.EMail;
import com.apps.email.model.EMailAttachment;

/**
 * 
 * Email Servis Saglayicisindan maillerin pop3 destegi ile okunmasi islemini
 * gerceklestrir.
 * 
 * @author Musa YUVACI
 * 
 * @version 1.0 01.06.2012
 */
public class Pop3EMailReader implements IEMailReader {

	private String host;
	private String userName;
	private String password;

	public Pop3EMailReader(String host, String userName, String password) {

		this.host = host;
		this.userName = userName;
		this.password = password;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<EMail> getAllEMailList(String downloadDir) throws Exception {

		List<EMail> retVal = new ArrayList<EMail>();

		Folder folder = null;
		Store store = null;

		try {

			Properties properties = System.getProperties();
			Session session = Session.getInstance(properties);

			store = session.getStore("pop3");
			store.connect(host, userName, password);

			folder = store.getFolder("inbox");

			if (!folder.exists()) {

				System.out.println("No INBOX...");
				System.exit(0);
			}

			folder.open(Folder.READ_ONLY);
			Message[] messages = folder.getMessages();

			for (int i = 0; i < messages.length; i++) {

				EMail email = new EMail();

				/**
				 * Emailin from bilgisi aliniyor
				 */
				email.setFrom(MimeUtility.decodeText(InternetAddress.toString(messages[i].getFrom())));

				/**
				 * TO adres bilgisi aliniyor.
				 */
				Address[] toAdresses = messages[i].getRecipients(Message.RecipientType.TO);

				String to = "";

				if (toAdresses != null) {

					for (int index = 0; index < toAdresses.length; index++) {

						to += "," + toAdresses[index];
					}

					email.setToAdresses(to.substring(1));
				}

				/**
				 * CC adres bilgisi aliniyor.
				 */
				Address[] ccAdresses = messages[i].getRecipients(Message.RecipientType.CC);

				String cc = "";

				if (ccAdresses != null) {

					for (int index = 0; index < ccAdresses.length; index++) {

						cc += "," + ccAdresses[index];
					}

					email.setCcAdresses(cc.substring(1));
				}

				/**
				 * BCC adres bilgisi aliniyor.
				 */
				Address[] bccAdresses = messages[i].getRecipients(Message.RecipientType.BCC);

				String bcc = "";

				if (bccAdresses != null) {

					for (int index = 0; index < bccAdresses.length; index++) {

						bcc += "," + bccAdresses[index];
					}

					email.setBccAdresses(bcc.substring(1));
				}

				email.setReplyTo(InternetAddress.toString(messages[i].getReplyTo()));
				email.setSubject(messages[i].getSubject());
				email.setReceivedDate(messages[i].getReceivedDate());
				email.setSentDate(messages[i].getSentDate());

				String messageBodyText = "";
				String messageBodyHtml = "";

				List<EMailAttachment> attachmentList = new ArrayList<EMailAttachment>();

				Object content = messages[i].getContent();

				if (content instanceof String) {

					messageBodyText += content;

				} else if (content instanceof Multipart) {

					MimeMultipart mimeMultipart = (MimeMultipart) content;

					LinkedList<Part> partList = new LinkedList<Part>();

					for (int index = 0; index < mimeMultipart.getCount(); index++) {

						partList.add(mimeMultipart.getBodyPart(index));
					}

					while (partList.size() != 0) {

						Part part = partList.pollFirst();

						String disposition = part.getDisposition();

						if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {

							/**
							 * Mail have some attachment
							 */
							EMailAttachment eMailAttachment = new EMailAttachment();
							File savedir = new File(downloadDir);

							if (!savedir.exists()) {

								savedir.mkdirs();
							}

							String systemFileName = MimeUtility.decodeText(part.getFileName());

							File savefile = new File(downloadDir, systemFileName);

							int fileSize = saveFile(savefile, part);

							eMailAttachment.setEmail(email);
							eMailAttachment.setFileName(MimeUtility.decodeText(part.getFileName()));
							eMailAttachment.setFileSystemName(systemFileName);
							eMailAttachment.setFilePath(savefile.getAbsolutePath());
							eMailAttachment.setFileSize(fileSize);
							eMailAttachment.setMimeType(new MimetypesFileTypeMap().getContentType(systemFileName));

							attachmentList.add(eMailAttachment);

						} else if (part.getContent() instanceof Multipart) {

							for (int index = ((Multipart) part.getContent()).getCount() - 1; index >= 0; index--) {

								partList.addFirst(((Multipart) part.getContent()).getBodyPart(index));
							}

						} else if (part.getContent() instanceof String) {

							if (part.isMimeType("text/html")) {

								messageBodyHtml += part.getContent();

							} else if (part.isMimeType("text/plain")) {

								messageBodyText += part.getContent();
							}

						} else if (part.getContent() instanceof InputStream) {

							InputStream in = (InputStream) part.getContent();

							BufferedInputStream bis = new BufferedInputStream(in);
							ByteArrayOutputStream buf = new ByteArrayOutputStream();

							int result = bis.read();

							while (result != -1) {
								byte b = (byte) result;
								buf.write(b);
								result = bis.read();
							}

							messageBodyText = buf.toString();
						}
					}
				}

				email.setAttachmentList(attachmentList);

				if (!"".equals(messageBodyHtml)) {

					email.setMessage(messageBodyHtml);

				} else {

					email.setMessage(messageBodyText);

				}

				retVal.add(email);
			}

		} catch (Exception e) {

			e.printStackTrace();

		} finally {

			if (folder != null) {

				folder.close(true);
			}

			if (store != null) {

				store.close();
			}
		}

		return retVal;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<EMail> getNewEMailList(String downloadDir, Date lastAccesingDate) throws Exception {

		List<EMail> retVal = new ArrayList<EMail>();

		Folder folder = null;
		Store store = null;

		try {

			Properties properties = System.getProperties();
			Session session = Session.getInstance(properties);

			store = session.getStore("pop3");
			store.connect(host, userName, password);

			folder = store.getFolder("inbox");

			if (!folder.exists()) {

				System.out.println("No INBOX...");
				System.exit(0);
			}

			folder.open(Folder.READ_ONLY);
			Message[] messages = folder.search(new SentDateTerm(ComparisonTerm.GE, lastAccesingDate));

			for (int i = 0; i < messages.length; i++) {

				EMail email = new EMail();

				/**
				 * Emailin from bilgisi aliniyor
				 */
				email.setFrom(MimeUtility.decodeText(InternetAddress.toString(messages[i].getFrom())));

				/**
				 * TO adres bilgisi aliniyor.
				 */
				Address[] toAdresses = messages[i].getRecipients(Message.RecipientType.TO);

				String to = "";

				if (toAdresses != null) {

					for (int index = 0; index < toAdresses.length; index++) {

						to += "," + toAdresses[index];
					}

					email.setToAdresses(to.substring(1));

				}

				/**
				 * CC adres bilgisi aliniyor.
				 */
				Address[] ccAdresses = messages[i].getRecipients(Message.RecipientType.CC);

				String cc = "";

				if (ccAdresses != null) {

					for (int index = 0; index < ccAdresses.length; index++) {

						cc += "," + ccAdresses[index];
					}

					email.setCcAdresses(cc.substring(1));
				}

				/**
				 * BCC adres bilgisi aliniyor.
				 */
				Address[] bccAdresses = messages[i].getRecipients(Message.RecipientType.BCC);

				String bcc = "";

				if (bccAdresses != null) {

					for (int index = 0; index < bccAdresses.length; index++) {

						bcc += "," + bccAdresses[index];
					}

					email.setBccAdresses(bcc.substring(1));
				}

				email.setReplyTo(InternetAddress.toString(messages[i].getReplyTo()));
				email.setSubject(messages[i].getSubject());
				email.setReceivedDate(messages[i].getReceivedDate());
				email.setSentDate(messages[i].getSentDate());

				String messageBodyText = "";
				String messageBodyHtml = "";

				List<EMailAttachment> attachmentList = new ArrayList<EMailAttachment>();

				Object content = messages[i].getContent();

				if (content instanceof String) {

					messageBodyText += content;

				} else if (content instanceof Multipart) {

					MimeMultipart mimeMultipart = (MimeMultipart) content;

					LinkedList<Part> partList = new LinkedList<Part>();

					for (int index = 0; index < mimeMultipart.getCount(); index++) {

						partList.add(mimeMultipart.getBodyPart(index));
					}

					while (partList.size() != 0) {

						Part part = partList.pollFirst();

						String disposition = part.getDisposition();

						if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
							/**
							 * Mail have some attachment
							 */
							EMailAttachment eMailAttachment = new EMailAttachment();
							File savedir = new File(downloadDir);

							if (!savedir.exists()) {

								savedir.mkdirs();
							}

							String systemFileName = MimeUtility.decodeText(part.getFileName());

							File savefile = new File(downloadDir, systemFileName);

							int fileSize = saveFile(savefile, part);

							eMailAttachment.setEmail(email);
							eMailAttachment.setFileName(MimeUtility.decodeText(part.getFileName()));
							eMailAttachment.setFileSystemName(systemFileName);
							eMailAttachment.setFilePath(savefile.getAbsolutePath());
							eMailAttachment.setFileSize(fileSize);
							eMailAttachment.setMimeType(new MimetypesFileTypeMap().getContentType(systemFileName));

							attachmentList.add(eMailAttachment);

						} else if (part.getContent() instanceof Multipart) {

							for (int index = ((Multipart) part.getContent()).getCount() - 1; index >= 0; index--) {

								partList.addFirst(((Multipart) part.getContent()).getBodyPart(index));
							}

						} else if (part.getContent() instanceof String) {

							if (part.isMimeType("text/html")) {

								messageBodyHtml += part.getContent();

							} else if (part.isMimeType("text/plain")) {

								messageBodyText += part.getContent();
							}

						} else if (part.getContent() instanceof InputStream) {

							InputStream in = (InputStream) part.getContent();

							BufferedInputStream bis = new BufferedInputStream(in);
							ByteArrayOutputStream buf = new ByteArrayOutputStream();

							int result = bis.read();

							while (result != -1) {

								byte b = (byte) result;
								buf.write(b);
								result = bis.read();
							}

							messageBodyText = buf.toString();
						}
					}
				}

				email.setAttachmentList(attachmentList);

				if (!"".equals(messageBodyHtml)) {

					email.setMessage(messageBodyHtml);

				} else {

					email.setMessage(messageBodyText);
				}

				retVal.add(email);
			}

		} catch (Exception e) {

			e.printStackTrace();

		} finally {

			if (folder != null) {

				folder.close(true);
			}

			if (store != null) {

				store.close();
			}
		}

		return retVal;
	}

	/**
	 * Email nesnesinin sahip oldugu attachmentlarin systeme download edilmesi
	 * islemini gerceklestirir.
	 */
	private static int saveFile(File saveFile, Part part) throws Exception {

		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile));

		byte[] buff = new byte[2048];

		InputStream is = part.getInputStream();

		int ret = 0, count = 0;

		while ((ret = is.read(buff)) > 0) {

			bos.write(buff, 0, ret);

			count += ret;
		}

		bos.close();
		is.close();

		return count;
	}
}

Pop3EMailReader sınıfında getAllEMailList ve getNewEMailList metodlarını implement ediyoruz. getAllEMailList metodu email servis sağlayıcısında bulunan bütün mailleri alma işlemi gerçekleştirir, getNewEMailList metodu ise, email servis saplayıcısından, metoda verilen lastAccesingDate tarih degerinden sonra gelen bütün emailleri alır.

3. Email Gönderme Örnekleri

3.a. Simple EMail Gönderme Örneği

EMail(Sadece email gonderilir attachmentlar dikkate alınmaz) göndermek için SendSimpleEMailSample.java classını oluşturuyoruz. Email servis sağlayıcısına ait ayar bilgileri EMailSender initialize edilirken constructorına veriliyor.

package com.apps.email.sample;

import com.apps.email.model.EMail;
import com.apps.email.sender.EMailSender;
import com.apps.email.utility.EnumValues.EmailBaglantiGuvenligi;

public class SendSimpleEMailSample {

	public static void main(String[] args) throws Exception {

		/**
		 * Email Settings
		 */
		String emailHost = "";
		String userName = "";
		String password = "";
		String emailSendingPort = "";
		/**
		 * Email authentication bilgisi, email servis saglayicilari farklilik
		 * gosterebilir.
		 */
		boolean authentication = true;

		/**
		 * Email Servis Saglayiciya ait baglanti guvenligi bilgisi.(Servis
		 * Saglayicilari Farklilik gosterebilir)
		 */
		EmailBaglantiGuvenligi emailBaglantiGuvenligi = EmailBaglantiGuvenligi.NONE;

		EMail email = new EMail();
		email.setFrom("");
		email.setToAdresses("");
		email.setCcAdresses(null);
		email.setBccAdresses(null);
		email.setSubject("E-Mail Sample");
		email.setMessage("E-Mail Sample Simple Message");

		EMailSender emailSender = new EMailSender(emailHost, userName, password, emailSendingPort, emailBaglantiGuvenligi, authentication);
		emailSender.sendSimpleEMail(email);
	}
}

3.b. Attachmentlı EMail Gönderme Örneği

Attachmentlı Email gönderme için SendEMailWithAttachmentSample.java classını olusturuyoruz. Email servis sağlayıcısına ait ayar bilgileri EMailSender initialize edilirken constructorına veriliyor.

package com.apps.email.sample;

import com.apps.email.model.EMail;
import com.apps.email.model.EMailAttachment;
import com.apps.email.sender.EMailSender;
import com.apps.email.utility.EnumValues.EmailBaglantiGuvenligi;

public class SendEMailWithAttachmentSample {

	public static void main(String[] args) throws Exception {

		/**
		 * Email Settings
		 */
		String emailHost = "";
		String userName = "";
		String password = "";
		String emailSendingPort = "";

		/**
		 * Email authentication bilgisi, email servis saglayicilari farklilik
		 * gosterebilir.
		 */
		boolean authentication = true;

		/**
		 * Email Servis Saglayiciya ait baglanti guvenligi bilgisi.(Servis
		 * Saglayicilari Farklilik gosterebilir)
		 */
		EmailBaglantiGuvenligi emailBaglantiGuvenligi = EmailBaglantiGuvenligi.NONE;

		/**
		 * Email
		 */
		EMail email = new EMail();
		email.setFrom("");

		/**
		 * birden fazla mail adresini , ile ayiriniz.
		 */
		email.setToAdresses("");
		email.setCcAdresses(null);
		email.setBccAdresses(null);
		email.setSubject("E-Mail Sample With Attachment");
		email.setMessage("E-Mail Sample Attachment Mail...");

		/**
		 * Email's attachment 1
		 */
		EMailAttachment eMailAttachment = new EMailAttachment();
		eMailAttachment.setFilePath("");

		/**
		 * Email's attachment 2
		 */
		EMailAttachment eMailAttachment2 = new EMailAttachment();
		eMailAttachment2.setFilePath("");

		email.getAttachmentList().add(eMailAttachment);
		email.getAttachmentList().add(eMailAttachment2);

		EMailSender emailSender = new EMailSender(emailHost, userName, password, emailSendingPort, emailBaglantiGuvenligi, authentication);
		emailSender.sendEMailWithAttachment(email);
	}
}

4. Email Servis Sağlayıcısından Emaillerin Alınması Örneği

Email servis sağlayıcısından emailleri almak için ReadEMailSample.java classını oluşturuyoruz.

package com.apps.email.sample;

import java.util.List;

import com.apps.email.model.EMail;
import com.apps.email.reader.Pop3EMailReader;

public class ReadEMailSample {

	public static void main(String[] args) throws Exception {

		String emailHost = "";
		String userName = "";
		String password = "";

		String downloadDir = "";

		Pop3EMailReader pop3EmailReader = new Pop3EMailReader(emailHost,userName,password);
		List<EMail> emailListesi = pop3EmailReader.getAllEMailList(downloadDir);

		for(EMail email : emailListesi) {

			System.out.println("-----------------------------------------------------------");
			System.out.println("Email From Adress : " + email.getFrom());
			System.out.println("Email Subject     : " + email.getSubject());
			System.out.println("Email Message     : " + email.getMessage());
			System.out.println("***********************************************************");
		}
	}
}

DETAYLAR

1) Email Sevis Sağlayıcısından Emailler Alınırken Email Adreslerinin Format Problemi.

Pop3EMailReader.java classı 92. satır

/*
 * Emailin from bilgisi aliniyor
 */
email.setFrom(MimeUtility.decodeText(InternetAddress.toString(messages[i].getFrom())));

MimeUtility classında bulunan static decodeText metodu format problemini çözüyor.

2) Email Servis Sağlayıcısından Emailler Alınırken Email Attchmentların Dosya İsimlerinin Format Problemi.

Pop3EMailReader.java classı 191. satır

String systemFileName = MimeUtility.decodeText(part.getFileName());

MimeUtility classında bulunan static decodeText metodu format problemini çözüyor.

3) Email Gönderme İşleminde Türkçe Karakter Problemi.

Simple email gönderilirken,

EMailSender.java classı 195.Satır. Simple email gonderilirken emailin contentine hangi charsetin kullanılacağı bilgisi verilir.

message.setContent(email.getMessage(), "text/html;charset=ISO-8859-9");

Attachmentlı email gönderilirken,

EMailSender.java classı 367.Satır. Attachmentlı email gönderilirken, gönderilen emailin text mesajının hangi karakter set ile gönderilmesi istendiği belirtiliyor “textPart.setText(email.getMessage(),“ISO-8859-9”);”

/**
 * Multi part tanımlanıyor.
 */
Multipart multiPart = new MimeMultipart();

/**
 * İlk önce text part tanımlanıp multi parta ekleniyor.
 */
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(email.getMessage(),"ISO-8859-9");
multiPart.addBodyPart(textPart);

SONUÇ

JavaEMailFramework projesinin kaynak kodlarına aşağıdaki linkten Eclipse (SpringSource Tool Suit) Java Projesi olarak ulaşabilirsiniz.

JavaEMailFramework (Kaynak Kodlar-Eclipse(SpringSource Tool Suit) Java Projesi)

Java Mail Api ile ilgili daha detaylı bilgiye adresinden ulaşabilirsiniz.