package mail;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import java.io.IOException;
import javax.mail.*;
import javax.mail.search.FlagTerm;
import java.io.*;
import javax.mail.internet.MimeBodyPart;
public class mail {
public static void main(String args[]) throws IOException {
String host = "imap.gmail.com";
String username = "maviay518@gmail.com"; //gmail hesabı
String password = "maviay518"; //gmail hesap şifresi
String Subject = ""; // mesaj konusu
String Content = "";// mesaj içeriği
String Sender = "";// mail'i gönderenin adresi
int bas_index = 0;
int son_index = 0;
Properties properties = System.getProperties();
properties.setProperty("mail.store.protocol", "imaps");
try {
// bağlantı kuruluyor.
Session session = Session.getDefaultInstance(properties, null);
Store store = session.getStore("imaps");
store.connect(host, username, password);
// bağlantı adı yazdırılıyor
System.out.println(store);
// mesajlar alınıyor.
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_WRITE);
Message messages[] = inbox.getMessages();
// sadece okunmamışlar alınıyor.
messages = inbox.search(new FlagTerm(
new Flags(Flags.Flag.ANSWERED), false));
int i = 0;
for (Message message : messages) {
Subject = message.getSubject();
// mail adresini ayıklıyor
bas_index = messages[i].getFrom()[0].toString().indexOf("<");// <...>
// mail
// bu
// iki
son_index = messages[i].getFrom()[0].toString().indexOf(">");// karakterle
// sınırlandırılmış.
Sender = messages[i].getFrom()[0].toString().substring(
bas_index + 1, son_index);
Object content = message.getContent();
// mesajın içeriği alınıyor
Content = "";
if (content instanceof java.lang.String)
Content = (String) content;
else if (content instanceof Multipart) {
Multipart mp = (Multipart) content;
for (int j = 0; j < mp.getCount(); j++) {
Part part = mp.getBodyPart(j);
MimeBodyPart mbp = (MimeBodyPart) part;
if (mbp.isMimeType("text/plain"))
Content += (String) mbp.getContent();
}
}
// ek dosyalar ayıklanıyor.
if (content instanceof Multipart) {
Multipart mp = (Multipart) content;
for (int j = 0; j < mp.getCount(); j++) {
Part part = mp.getBodyPart(j);
MimeBodyPart mbp = (MimeBodyPart) part;
if (!mbp.isMimeType("text/plain")) {
String name = decodeName(part.getFileName());
if (!name.equals("unknown")) {
System.out.println(name);
saveFile(new File(name), part);
}
}
}
}
// gönderen,konu ve içerik bastırılıyor
System.out.println(i + ": " + Sender);
System.out.println(i + ": " + Subject);
System.out.println(i + ": " + Content);
// veritabanına kaydetme cevaplandı olarak işaretlemeden
// yapılmalı.
messages[i].setFlag(Flags.Flag.ANSWERED, true); // cevaplandı
// olarak
// işaretliyor.
i++;
}
store.close();
} catch (Exception e) {
System.out.println("Error!");
}
}
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;
}
private static String decodeName(String name) throws Exception {
if (name == null || name.length() == 0)
return "unknown";
String ret = java.net.URLDecoder.decode(name, "UTF-8");
// also check for a few other things in the string:
ret = ret.replaceAll("=?utf-8?q?", "");
ret = ret.replaceAll("?=", "");
ret = ret.replaceAll("=20", " ");
return ret;
}
}