Advertisement
Guest User

Untitled

a guest
Jan 26th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.04 KB | None | 0 0
  1. java.util.concurrent.TimeoutException: com.sun.mail.imap.IMAPSSLStore.finalize() timed out after 10 seconds
  2.  
  3. public void checkInboxEmail(final String host, final String user, final String password) {
  4.  
  5. Log.d(TAG, "checkEmail");
  6.  
  7. this.host = host;
  8. this.user = user;
  9. this.password = password;
  10.  
  11. new Thread(new Runnable() {
  12. @Override
  13. public void run() {
  14. try {
  15. Log.d(TAG, "checkEmail - run()");
  16.  
  17. long databaseRecords;
  18.  
  19. //create properties field
  20. Properties properties = new Properties();
  21. properties.put("mail.store.protocol", "imaps");
  22. properties.put("mail.imaps.ssl.trust", "*");
  23. //properties.put("mail.debug", "true");
  24.  
  25. emailSession = Session.getInstance(properties, new Authenticator() {
  26. protected PasswordAuthentication getPasswordAuthentication() {
  27. return new PasswordAuthentication(user, password);
  28. }
  29. });
  30.  
  31. imapStore = (IMAPStore) emailSession.getStore("imaps");
  32. // imapStore.connect();
  33.  
  34. imapStore.connect(host, user, password);
  35.  
  36. if (imapStore.isConnected()) {
  37. Log.d("MailPush", "Successfully connected to IMAP");
  38. } else {
  39. Log.d("MailPush", "Not connected to IMAP");
  40. }
  41.  
  42. imapFolder = (IMAPFolder) imapStore.getFolder("Inbox");
  43. imapFolder.open(IMAPFolder.READ_WRITE);
  44.  
  45. databaseRecords = dbManager.getReceivedEmailRecordsCount();
  46.  
  47. if (databaseRecords < imapFolder.getMessageCount()) {
  48. Log.d(TAG, "Receiving Mail...");
  49. receiveMail(imapFolder.getMessages());
  50. } else {
  51. Log.d(TAG, "Records match.");
  52. }
  53.  
  54. Folder[] fdr = imapStore.getDefaultFolder().list();
  55. for (Folder fd : fdr)
  56. System.out.println(">> " + fd.getName());
  57.  
  58. imapFolder.addMessageCountListener(new MessageCountListener() {
  59.  
  60. public void messagesAdded(MessageCountEvent e) {
  61.  
  62. System.out.println("Message Added Event Fired");
  63. Log.d(TAG, "MESSAGE TYPE: " + e.getType());
  64. //ADDED = 1 & REMOVED = 2
  65.  
  66. Boolean proceed = true;
  67.  
  68. try {
  69. Message[] messages = e.getMessages();
  70.  
  71. Log.d(TAG, "Last Subject 1: " + lastSubject + " " + "Last Date: " + lastDate);
  72. Log.d(TAG, "Current Subject 1: " + messages[0].getSubject() + " " + "Last Date: " + messages[0].getSentDate().toString());
  73.  
  74. if (lastSubject != null && lastDate != null) {
  75. Log.d(TAG, "Existing last subject or date");
  76.  
  77. if (lastSubject.equals(messages[0].getSubject()) && lastDate.equals(messages[0].getSentDate().toString())) {
  78. Log.d(TAG, "Stopping proceed");
  79. proceed = false;
  80. } else {
  81. Log.d(TAG, "Allowing proceed");
  82. proceed = true;
  83. lastSubject = messages[0].getSubject();
  84. lastDate = messages[0].getSentDate().toString();
  85. }
  86. } else {
  87. Log.d(TAG, "No existing last subject or date");
  88. lastSubject = messages[0].getSubject();
  89. lastDate = messages[0].getSentDate().toString();
  90. }
  91.  
  92. Log.d(TAG, "Last Subject 2: " + lastSubject + " " + "Last Date: " + lastDate);
  93. Log.d(TAG, "Current Subject 2: " + messages[0].getSubject() + " " + "Last Date: " + messages[0].getSentDate().toString());
  94.  
  95. if (proceed) {
  96. Log.d(TAG, "Proceeding...");
  97. System.out.println("messages.length---" + messages.length);
  98. getMessages(messages);
  99. } else {
  100. Log.d(TAG, "Not Proceeding...");
  101. }
  102.  
  103. } catch (Exception ex) {
  104. Log.d(TAG, "CATCH 2");
  105. ex.printStackTrace();
  106. }
  107. }
  108.  
  109. public void messagesRemoved(MessageCountEvent e) {
  110. System.out.println("Message Removed Event fired");
  111. }
  112. });
  113.  
  114. imapFolder.addMessageChangedListener(new MessageChangedListener() {
  115.  
  116. public void messageChanged(MessageChangedEvent e) {
  117. System.out.println("Message Changed Event fired");
  118. }
  119. });
  120.  
  121. startListening(imapFolder);
  122.  
  123. //close the store and folder objects
  124. // emailFolder.close(false);
  125. // store.close();
  126.  
  127. } catch (MessagingException e) {
  128. Log.d(TAG, "CATCH 3");
  129.  
  130. AndroidUtils.closeEmailFolder(imapFolder);
  131. AndroidUtils.closeEmailStore(imapStore);
  132.  
  133. Handler handler = new Handler(Looper.getMainLooper());
  134. Runnable runnable = new Runnable() {
  135. @Override
  136. public void run() {
  137. checkConnectivity();
  138. }
  139. };
  140.  
  141. handler.postDelayed(runnable, 30 * 1000); // 30 seconds
  142.  
  143. } catch (Exception e) {
  144. Log.d(TAG, "CATCH 4");
  145. e.printStackTrace();
  146. }
  147. }
  148. }).start();
  149. }
  150.  
  151. private void getMessages(Message[] messages) {
  152.  
  153. Log.d(TAG, "getMessages()");
  154.  
  155. try {
  156. for (Message message : messages) {
  157. if (!message.getFlags().contains(Flags.Flag.SEEN)) {
  158.  
  159. message.setFlag(Flags.Flag.SEEN, true);
  160.  
  161. if (message.getSubject().startsWith("<confirm>")) {
  162. Log.d(TAG, "Sender is looking for a confirm receipt");
  163. sendConfirmReceipt(message);
  164. }
  165.  
  166. //Message is new (hasn't been seen) > Message Details
  167. System.out.println("---------------------------------");
  168. System.out.println("Email Number " + (message.getMessageNumber()));
  169. System.out.println("Subject: " + message.getSubject());
  170. System.out.println("From: " + message.getFrom()[0]);
  171. System.out.println("Text: " + message.getContent().toString());
  172.  
  173. String from = message.getFrom()[0].toString();
  174.  
  175. String cc = InternetAddress.toString(message.getRecipients(Message.RecipientType.CC));
  176. Log.d(TAG, "CC 1: " + cc);
  177.  
  178. Address[] recipients = message.getRecipients(Message.RecipientType.CC);
  179. cc = InternetAddress.toString(recipients);
  180. Log.d(TAG, "CC 2: " + cc);
  181.  
  182. //Check Encryption Details > Add SEEN Flag > Add to database
  183. checkEncryption((MimeMessage) message, from, cc);
  184. }
  185. }
  186. } catch (Exception ex) {
  187. Log.d(TAG, "CATCH 5");
  188. ex.printStackTrace();
  189. }
  190. }
  191.  
  192. private void startListening(IMAPFolder imapFolder) {
  193. Log.d(TAG, "startListening");
  194.  
  195. // We need to create a new thread to keep alive the connection
  196. Thread t = new Thread(
  197. new KeepAliveRunnable(imapFolder), "IdleConnectionKeepAlive"
  198. );
  199.  
  200. t.start();
  201.  
  202. while (!Thread.interrupted()) {
  203. Log.d(TAG, "Starting IDLE");
  204. try {
  205. Log.d(TAG, "Setting IDLE");
  206. //getMessages(imapFolder.getMessages());
  207. imapFolder.idle();
  208. } catch (FolderClosedException fex) {
  209. Log.d(TAG, "CATCH 6");
  210.  
  211. //Server closes connection.
  212. Log.d(TAG, "FolderClosedException. Server potentially dropped connection. Retrying connection...");
  213. fex.printStackTrace();
  214.  
  215. AndroidUtils.closeEmailFolder(imapFolder);
  216. AndroidUtils.closeEmailStore(imapStore);
  217.  
  218. checkConnectivity();
  219.  
  220. } catch (MessagingException e) {
  221. Log.d(TAG, "CATCH 7");
  222.  
  223. //Idle isn't supported by server.
  224. Log.d(TAG, "Messaging exception during IDLE: ");
  225. e.printStackTrace();
  226.  
  227. AndroidUtils.closeEmailFolder(imapFolder);
  228. }
  229. }
  230.  
  231. // Shutdown keep alive thread
  232. if (t.isAlive()) {
  233. Log.d(TAG, "Interrupting thread");
  234. t.interrupt();
  235. }
  236. }
  237.  
  238. private static class KeepAliveRunnable implements Runnable {
  239.  
  240. private final String TAG = getClass().getName();
  241.  
  242. private static final long KEEP_ALIVE_FREQ = 60000 * 10; // 10 minutes (Exchange connection drops after 20-30 minutes)
  243.  
  244. private IMAPFolder folder;
  245.  
  246. KeepAliveRunnable(IMAPFolder folder) {
  247. this.folder = folder;
  248. }
  249.  
  250. @Override
  251. public void run() {
  252. while (!Thread.interrupted()) {
  253. try {
  254. Thread.sleep(KEEP_ALIVE_FREQ);
  255.  
  256. // Perform a messageCount check just to keep alive the connection
  257. Log.d(TAG, "Performing a messageCount check to keep the connection alive");
  258. folder.getMessageCount();
  259. } catch (InterruptedException e) {
  260. Log.d(TAG, "CATCH 7");
  261.  
  262. // Ignore, just aborting the thread...
  263. Log.d(TAG, "Interrupted...");
  264. e.printStackTrace();
  265. } catch (MessagingException e) {
  266. Log.d(TAG, "CATCH 8");
  267.  
  268. // Shouldn't really happen...
  269. Log.d(TAG, "Unexpected exception while keeping alive the IDLE connection");
  270. e.printStackTrace();
  271. }
  272. }
  273. }
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement