Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.19 KB | None | 0 0
  1. package com.rkreja;
  2.  
  3. import com.sun.mail.imap.IMAPFolder;
  4. import com.sun.mail.imap.IMAPMessage;
  5. import com.sun.mail.imap.IMAPStore;
  6. import java.io.IOException;
  7. import java.io.PrintStream;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.ArrayList;
  11. import java.util.Calendar;
  12. import java.util.Date;
  13. import java.util.GregorianCalendar;
  14. import java.util.List;
  15. import java.util.Properties;
  16. import javax.mail.Authenticator;
  17. import javax.mail.BodyPart;
  18. import javax.mail.Flags;
  19. import javax.mail.Flags.Flag;
  20. import javax.mail.Folder;
  21. import javax.mail.Message;
  22. import javax.mail.Message.RecipientType;
  23. import javax.mail.MessagingException;
  24. import javax.mail.Multipart;
  25. import javax.mail.NoSuchProviderException;
  26. import javax.mail.PasswordAuthentication;
  27. import javax.mail.Session;
  28. import javax.mail.Transport;
  29. import javax.mail.internet.InternetAddress;
  30. import javax.mail.internet.MimeBodyPart;
  31. import javax.mail.internet.MimeMessage;
  32. import javax.mail.internet.MimeMessage.RecipientType;
  33. import javax.mail.internet.MimeMultipart;
  34. import javax.mail.search.AndTerm;
  35. import javax.mail.search.BodyTerm;
  36. import javax.mail.search.FlagTerm;
  37. import javax.mail.search.FromStringTerm;
  38. import javax.mail.search.OrTerm;
  39. import javax.mail.search.ReceivedDateTerm;
  40. import javax.mail.search.RecipientStringTerm;
  41. import javax.mail.search.SearchTerm;
  42. import javax.mail.search.SentDateTerm;
  43. import javax.mail.search.SubjectTerm;
  44.  
  45.  
  46.  
  47. public class EmailClient
  48. {
  49. private IMAPStore store;
  50. private IMAPFolder folder = null;
  51.  
  52.  
  53. private Session session;
  54.  
  55.  
  56. private final String userId;
  57.  
  58.  
  59. private final String userEmailAddress;
  60.  
  61.  
  62. private final String userEmailPassword;
  63.  
  64.  
  65.  
  66. public EmailClient(String emailAddress, String uid, String password, String incomingServer, String outgoingServer, int outgoingPort)
  67. {
  68. userId = uid;
  69. userEmailAddress = emailAddress;
  70. userEmailPassword = password;
  71. setSession(incomingServer, outgoingServer, outgoingPort);
  72. }
  73.  
  74.  
  75. private void setSession(String incomingServer, String outgoingServer, int outgoingPort)
  76. {
  77. String smtpPort = Integer.toString(outgoingPort);
  78.  
  79. Properties properties = new Properties();
  80.  
  81. properties.put("mail.smtp.host", outgoingServer);
  82. properties.put("mail.smtp.socketFactory.port", smtpPort);
  83. properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  84. properties.put("mail.smtp.auth", "true");
  85. properties.put("mail.smtp.port", smtpPort);
  86.  
  87.  
  88. properties.put("mail.store.protocol", "imaps");
  89.  
  90. Session session = Session.getInstance(properties, new Authenticator() {
  91. protected PasswordAuthentication getPasswordAuthentication() {
  92. return new PasswordAuthentication(userId, userEmailPassword);
  93. }
  94. });
  95.  
  96. try
  97. {
  98. store = ((IMAPStore)session.getStore("imaps"));
  99. } catch (NoSuchProviderException e) {
  100. e.printStackTrace();
  101. }
  102. try {
  103. store.connect(incomingServer, userId, userEmailPassword);
  104. }
  105. catch (MessagingException e) {
  106. e.printStackTrace();
  107. }
  108.  
  109. this.session = session;
  110. }
  111.  
  112. public void ComposeEmail(String toEmailAddress, String Subject, String messageBody)
  113. {
  114. try {
  115. MimeMessage message = new MimeMessage(session);
  116.  
  117. new InternetAddress();
  118. message.setFrom(new InternetAddress(userEmailAddress));
  119. message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmailAddress));
  120. message.setHeader("Subject", Subject);
  121. message.setText(messageBody);
  122.  
  123. Transport.send(message);
  124. } catch (Exception e) {
  125. e.printStackTrace();
  126. }
  127. }
  128.  
  129.  
  130.  
  131.  
  132. public void deleteAllEmailFromInbox()
  133. {
  134. Message[] msgs = searchEmail("Inbox", 2, new ReceivedDateTerm(1,
  135. Calendar.getInstance().getTime()));
  136. String log = null;
  137. for (Message m : msgs) {
  138. try {
  139. m.setFlag(Flags.Flag.DELETED, true);
  140. } catch (MessagingException e) {
  141. e.printStackTrace();
  142. }
  143. }
  144.  
  145. log = "Total email deleted " + msgs.length;
  146. System.err.println("***\n" + log + "\n***");
  147. }
  148.  
  149.  
  150.  
  151.  
  152. public void deleteAllEmailThatReceivedToday()
  153. {
  154. Date date = Calendar.getInstance().getTime();
  155. String formattedDate = new SimpleDateFormat("MM/dd/yyyy").format(date);
  156. deleteEmails(formattedDate);
  157. }
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. public void deleteEmails(String dateReceivedOrSent)
  168. {
  169. List<Message> msgs = searchEmailByDateReceivedOrSent("Inbox", 2, dateReceivedOrSent, null);
  170. String log = null;
  171. for (Message m : msgs) {
  172. try {
  173. m.setFlag(Flags.Flag.DELETED, true);
  174. } catch (MessagingException e) {
  175. e.printStackTrace();
  176. }
  177. }
  178.  
  179. log = "Total email deleted " + msgs.size();
  180. System.err.println("***\n" + log + "\n***");
  181. }
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193. public void deleteEmails(String dateReceivedOrSent, String subject)
  194. {
  195. int totalEmailDeleted = 0;
  196. List<Message> msgs = searchEmailByDateReceivedOrSent("Inbox", 2, dateReceivedOrSent, null);
  197. for (Message m : msgs) {
  198. try {
  199. if (m.getSubject().contains(subject)) {
  200. m.setFlag(Flags.Flag.DELETED, true);
  201. totalEmailDeleted++;
  202. }
  203. } catch (MessagingException e) {
  204. e.printStackTrace();
  205. }
  206. }
  207.  
  208. String log = "Total email deleted " + totalEmailDeleted;
  209. System.err.println("***\n" + log + "\n***");
  210. }
  211.  
  212. private IMAPStore getStore()
  213. {
  214. return store;
  215. }
  216.  
  217. private void mark_email_read(Message msg) {
  218. try {
  219. msg.setFlag(Flags.Flag.SEEN, true);
  220. } catch (MessagingException e) {
  221. e.printStackTrace();
  222. }
  223. }
  224.  
  225. private IMAPFolder getFolder(String folderName, int openStatus) {
  226. store = getStore();
  227. try {
  228. folder = ((IMAPFolder)store.getFolder(folderName));
  229. folder.open(openStatus);
  230. } catch (MessagingException e) {
  231. e.printStackTrace();
  232. }
  233.  
  234. return folder;
  235. }
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. public String get_most_recent_email()
  244. {
  245. return get_most_recent_email(userId);
  246. }
  247.  
  248. private String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException {
  249. String result = "";
  250. int count = mimeMultipart.getCount();
  251. for (int i = 0; i < count; i++) {
  252. BodyPart bodyPart = mimeMultipart.getBodyPart(i);
  253. if (bodyPart.isMimeType("text/plain")) {
  254. result = result + "\n" + bodyPart.getContent();
  255. break; }
  256. if (bodyPart.isMimeType("text/html")) {
  257. result = (String)bodyPart.getContent();
  258. } else if ((bodyPart.getContent() instanceof MimeMultipart)) {
  259. result = result + getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
  260. }
  261. }
  262. return result;
  263. }
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276. public void downloadMailAttachments(String downloadFilePath, String textContainsInSubject, String textContainsInBody, Date timebeforemailreceived)
  277. throws MessagingException, IOException
  278. {
  279. Folder inbox = getFolder("INBOX", 2);
  280. ReceivedDateTerm rd = new ReceivedDateTerm(3, Calendar.getInstance().getTime());
  281. SubjectTerm st = new SubjectTerm(textContainsInSubject);
  282. BodyTerm bt = new BodyTerm(textContainsInBody);
  283. SearchTerm s;
  284. SearchTerm s;
  285. if (textContainsInSubject != "") {
  286. s = new AndTerm(new SearchTerm[] { rd, st, bt });
  287. } else {
  288. s = new AndTerm(new SearchTerm[] { rd, bt });
  289. }
  290.  
  291. Message[] m = null;
  292. try {
  293. m = inbox.search(s);
  294. } catch (MessagingException e) {
  295. e.printStackTrace();
  296. }
  297.  
  298. if (m.length != 0) {
  299. for (int i = 0; i < m.length; i++) {
  300. Message message = m[i];
  301. String contentType = message.getContentType();
  302.  
  303. String messageContent = "";
  304.  
  305. String attachFiles = "";
  306. Date receivedDateTime = message.getReceivedDate();
  307. if ((receivedDateTime.after(timebeforemailreceived)) &&
  308. (contentType.contains("multipart"))) {
  309. Multipart multiPart = (Multipart)message.getContent();
  310. int numberOfParts = multiPart.getCount();
  311. for (int partCount = 0; partCount < numberOfParts; partCount++) {
  312. MimeBodyPart part = (MimeBodyPart)multiPart.getBodyPart(partCount);
  313. if ("attachment".equalsIgnoreCase(part.getDisposition()))
  314. {
  315. String fileName = part.getFileName();
  316. attachFiles = attachFiles + fileName + ", ";
  317. part.saveFile(downloadFilePath + fileName);
  318. mark_email_read(message);
  319. }
  320. else {
  321. messageContent = part.getContent().toString();
  322. mark_email_read(message);
  323. }
  324. }
  325. }
  326. }
  327. }
  328. }
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339. public String get_most_recent_email(String recipientEmailAddress)
  340. {
  341. int num = -1;
  342. IMAPFolder inbox = getFolder("INBOX", 2);
  343. RecipientStringTerm rs = new RecipientStringTerm(MimeMessage.RecipientType.TO, recipientEmailAddress);
  344.  
  345. SearchTerm s = new AndTerm(new SearchTerm[] { rs });
  346.  
  347. String contentString = null;
  348. IMAPMessage[] m = null;
  349. try {
  350. m = (IMAPMessage[])inbox.search(s);
  351.  
  352. if (m.length > 0) {
  353. num = m.length - 1;
  354.  
  355. try
  356. {
  357. if ((m[num].getContent() instanceof String)) {
  358. contentString = (String)m[num].getContent();
  359. mark_email_read(m[num]);
  360. } else if ((m[num].getContent() instanceof Multipart))
  361. {
  362. contentString = getTextFromMimeMultipart((MimeMultipart)m[num].getContent());
  363. mark_email_read(m[num]);
  364. }
  365. }
  366. catch (MessagingException e) {
  367. e.printStackTrace();
  368. } catch (IOException e) {
  369. e.printStackTrace();
  370. }
  371.  
  372. }
  373.  
  374. }
  375. catch (MessagingException e1)
  376. {
  377. e1.printStackTrace();
  378. }
  379.  
  380. return contentString;
  381. }
  382.  
  383.  
  384.  
  385.  
  386.  
  387. public String[] get_email()
  388. {
  389. return get_email(userId);
  390. }
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411. public String[] get_email(String recipientEmailAddress)
  412. {
  413. ArrayList<String> list = new ArrayList();
  414.  
  415. IMAPFolder inbox = getFolder("INBOX", 2);
  416. RecipientStringTerm rs = new RecipientStringTerm(MimeMessage.RecipientType.TO, recipientEmailAddress);
  417.  
  418.  
  419.  
  420. SearchTerm s = new AndTerm(new SearchTerm[] { rs });
  421.  
  422.  
  423. String contentString = null;
  424. try
  425. {
  426. Message[] m = inbox.search(s);
  427. for (int i = 0; i < m.length; i++) {
  428. try
  429. {
  430. if ((m[i].getContent() instanceof String)) {
  431. contentString = (String)m[i].getContent();
  432. mark_email_read(m[i]);
  433. }
  434. else if ((m[i].getContent() instanceof Multipart)) {
  435. Multipart part = (Multipart)m[i].getContent();
  436. contentString = part.getBodyPart(0).getContent().toString();
  437. mark_email_read(m[i]);
  438. }
  439.  
  440. list.add(contentString);
  441. } catch (IOException e) {
  442. e.printStackTrace();
  443. }
  444. }
  445. }
  446. catch (Exception e) {
  447. e.printStackTrace();
  448. }
  449.  
  450. String[] newArray = new String[list.size()];
  451. list.toArray(newArray);
  452. return newArray;
  453. }
  454.  
  455.  
  456. public String[] get_email(String senderEmailAddress, String recipientEmailAddress, String subject)
  457. {
  458. ArrayList<String> list = new ArrayList();
  459.  
  460. Folder inbox = getFolder("INBOX", 2);
  461. FromStringTerm fs = new FromStringTerm(senderEmailAddress);
  462. RecipientStringTerm rs = new RecipientStringTerm(MimeMessage.RecipientType.TO, recipientEmailAddress);
  463.  
  464.  
  465. SubjectTerm st = new SubjectTerm(subject);
  466.  
  467. SearchTerm s = new AndTerm(new SearchTerm[] { fs, rs, st });
  468.  
  469.  
  470. String contentString = null;
  471. try
  472. {
  473. Message[] m = inbox.search(s);
  474. for (int i = 0; i < m.length; i++) {
  475. try
  476. {
  477. if ((m[i].getContent() instanceof String)) {
  478. contentString = (String)m[i].getContent();
  479. mark_email_read(m[i]);
  480. } else if ((m[i].getContent() instanceof Multipart)) {
  481. Multipart part = (Multipart)m[i].getContent();
  482. contentString = part.getBodyPart(0).getContent().toString();
  483. mark_email_read(m[i]);
  484. }
  485.  
  486. list.add(contentString);
  487. } catch (IOException e) {
  488. e.printStackTrace();
  489. }
  490. }
  491. }
  492. catch (Exception e) {
  493. e.printStackTrace();
  494. }
  495.  
  496. String[] newArray = new String[list.size()];
  497. list.toArray(newArray);
  498. return newArray;
  499. }
  500.  
  501.  
  502. public String[] get_email(String recipientEmailAddress, String subject)
  503. {
  504. ArrayList<String> list = new ArrayList();
  505.  
  506. Folder inbox = getFolder("INBOX", 2);
  507. RecipientStringTerm rs = new RecipientStringTerm(MimeMessage.RecipientType.TO, recipientEmailAddress);
  508.  
  509.  
  510. SubjectTerm st = new SubjectTerm(subject);
  511.  
  512. SearchTerm s = new AndTerm(new SearchTerm[] { rs, st });
  513.  
  514.  
  515. String contentString = null;
  516. try {
  517. Message[] m = inbox.search(s);
  518. for (int i = 0; i < m.length; i++) {
  519. try
  520. {
  521. if ((m[i].getContent() instanceof String)) {
  522. contentString = (String)m[i].getContent();
  523. } else if ((m[i].getContent() instanceof Multipart)) {
  524. Multipart part = (Multipart)m[i].getContent();
  525. contentString = part.getBodyPart(0).getContent().toString();
  526. }
  527.  
  528. list.add(contentString);
  529. } catch (IOException e) {
  530. e.printStackTrace();
  531. }
  532. }
  533. }
  534. catch (Exception e) {
  535. e.printStackTrace();
  536. }
  537.  
  538. String[] newArray = new String[list.size()];
  539. list.toArray(newArray);
  540. return newArray;
  541. }
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554. public List<String> get_link_from_email(String recipientAddress)
  555. {
  556. List<String> res = new ArrayList();
  557. String str = null;
  558.  
  559. str = get_most_recent_email(recipientAddress);
  560. HTMLLinkExtractor htmlLinkExtractor = new HTMLLinkExtractor();
  561.  
  562. for (HTMLLinkExtractor.HtmlLink h : htmlLinkExtractor.grabHTMLLinks(str)) {
  563. res.add(link);
  564. }
  565.  
  566. return res;
  567. }
  568.  
  569.  
  570. private Message[] searchEmail(String folderName, int folderOpenStatus, SearchTerm searchTerm)
  571. {
  572. Folder folder = getFolder(folderName, folderOpenStatus);
  573. Message[] msgs = null;
  574. try {
  575. msgs = folder.search(searchTerm);
  576. } catch (MessagingException e) {
  577. e.printStackTrace();
  578. }
  579.  
  580. return msgs;
  581. }
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590. private List<Message> searchEmailByDateReceivedOrSent(String folderName, int folderOpenStatus, String sentOrRecievedDate, SearchTerm includeOtherSearchTerm)
  591. {
  592. List<Message> msgsToReturn = new ArrayList();
  593. Date userDate = null;
  594. String serverDate = null;
  595. Calendar calendar = new GregorianCalendar();
  596. SimpleDateFormat serverDateFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
  597. SimpleDateFormat userDateFormatter = new SimpleDateFormat("MM/dd/yyyy");
  598. try {
  599. userDate = userDateFormatter.parse(sentOrRecievedDate);
  600. }
  601. catch (ParseException e1) {
  602. e1.printStackTrace();
  603. }
  604.  
  605. Date dayBefore = null;
  606. Date dayAfter = null;
  607.  
  608.  
  609.  
  610. calendar.setTime(userDate);
  611. calendar.add(5, -1);
  612. dayBefore = calendar.getTime();
  613. calendar.add(5, 2);
  614. dayAfter = calendar.getTime();
  615. calendar.add(5, -1);
  616.  
  617.  
  618.  
  619.  
  620. AndTerm andTermRecDate = new AndTerm(new SearchTerm[] { new ReceivedDateTerm(6, userDate), new ReceivedDateTerm(5, dayBefore), new ReceivedDateTerm(1, dayAfter) });
  621.  
  622.  
  623.  
  624.  
  625.  
  626. AndTerm andTermSentDate = new AndTerm(new SearchTerm[] { new SentDateTerm(6, userDate), new SentDateTerm(5, dayBefore), new SentDateTerm(1, dayAfter) });
  627.  
  628.  
  629.  
  630.  
  631.  
  632. OrTerm orTerm = new OrTerm(andTermRecDate, andTermSentDate);
  633. SearchTerm term = null;
  634. if (includeOtherSearchTerm != null) {
  635. term = new AndTerm(new SearchTerm[] { orTerm, includeOtherSearchTerm });
  636.  
  637. }
  638. else
  639. {
  640. term = new AndTerm(new SearchTerm[] { orTerm });
  641. }
  642.  
  643.  
  644.  
  645. Message[] msgs = searchEmail(folderName, folderOpenStatus, term);
  646. for (Message m : msgs) {
  647. try {
  648. serverDate = m.getHeader("Date")[0];
  649. }
  650. catch (MessagingException e) {
  651. e.printStackTrace();
  652. }
  653. Date date = null;
  654. try {
  655. date = serverDateFormatter.parse(serverDate);
  656. } catch (ParseException e) {
  657. e.printStackTrace();
  658. }
  659. calendar.setTime(date);
  660.  
  661. if ((!userDate.after(calendar.getTime())) || (userDate.before(calendar.getTime()))) {
  662. msgsToReturn.add(m);
  663. }
  664. }
  665.  
  666.  
  667.  
  668.  
  669. return msgsToReturn;
  670. }
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684. public boolean check_todays_email_in_inbox(String recipientEmailAddress, String textContainsInSubject, String textContainsInBody)
  685. {
  686. return check_todays_email_in_inbox(recipientEmailAddress, textContainsInSubject, textContainsInBody, false);
  687. }
  688.  
  689.  
  690. public boolean check_todays_email_in_inbox(String recipientEmailAddress, String textContainsInSubject, String textContainsInBody, boolean includeReadEmailToo)
  691. {
  692. SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  693. String date = sdf.format(new GregorianCalendar().getTime());
  694.  
  695.  
  696. SubjectTerm st = new SubjectTerm(textContainsInSubject);
  697. BodyTerm bt = new BodyTerm(textContainsInBody);
  698.  
  699. Flags flags = new Flags(Flags.Flag.SEEN);
  700. FlagTerm ft = new FlagTerm(flags, false);
  701.  
  702. SearchTerm s = null;
  703. if (!includeReadEmailToo) {
  704. s = new AndTerm(new SearchTerm[] { st, bt, ft });
  705. } else {
  706. s = new AndTerm(new SearchTerm[] { st, bt });
  707. }
  708.  
  709. return searchEmailByDateReceivedOrSent("Inbox", 2, date, s).size() > 0;
  710. }
  711. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement