1 package org.lucane.applications.jmail.base; 2 3 22 23 import java.io.*; 24 import java.util.*; 25 import javax.activation.*; 26 import javax.mail.*; 27 import javax.mail.internet.*; 28 import javax.swing.*; 29 import javax.swing.tree.*; 30 31 import org.lucane.client.widgets.DialogBox; 32 33 34 final class MailClient 35 { 36 41 protected final static Store connect(Profile profile) 42 { 43 try { 44 Properties props = System.getProperties(); 46 47 if (profile.getUseSSL()) 50 props.setProperty("mail.imap.socketFactory.class", "JMailSSLSocketFactory"); 51 else 52 { 53 props.remove("mail.imap.socketFactory.class"); 57 } 58 59 Session s = Session.getInstance(props); 60 62 63 Store store = s.getStore(profile.getType()); 64 store.connect(profile.getIncoming(), profile.getIncomingPort(), 65 profile.getLogin(), profile.getDecryptedMailPassword()); 66 67 return store; 68 } catch(Exception e) { 69 DialogBox.error("" + e); 70 e.printStackTrace(); 71 return null; 72 } 73 } 74 75 81 protected final static JTree getFolders(Store store, Profile profile) 82 { 83 DefaultMutableTreeNode top; 84 85 top = new DefaultMutableTreeNode("Mailbox"); 86 DefaultTreeModel model = new DefaultTreeModel(top); 87 88 try { 89 if (profile.getType().compareTo("pop3") == 0) 90 top.add(new DefaultMutableTreeNode(store.getFolder("INBOX").getFullName())); 91 else { 93 try { 95 top.add(getFolder(store.getFolder("INBOX"))); 96 } catch(Exception e) {} 97 try { 98 top.add(getFolder(store.getFolder("Sent"))); 99 } catch(Exception e) {} 100 try { 101 top.add(getFolder(store.getFolder("Drafts"))); 102 } catch(Exception e) {} 103 try { 104 top.add(getFolder(store.getFolder("Trash"))); 105 } catch(Exception e) {} 106 107 Folder folder = store.getDefaultFolder(); 109 if(folder != null) 110 { 111 TreeNode node = getFolder(folder); 112 for(int i=0;i<node.getChildCount();i++) 113 { 114 DefaultMutableTreeNode child = (DefaultMutableTreeNode)node.getChildAt(i); 115 if(!alreadyHasFolder(top, (String )child.getUserObject())) 116 top.add((MutableTreeNode)node.getChildAt(i)); 117 } 118 } 119 } 120 121 return new JTree(model); 122 } catch (Exception e) { 123 DialogBox.error("" + e); 124 e.printStackTrace(); 125 return null; 126 } 127 } 128 129 134 private static DefaultMutableTreeNode getFolder(Folder f) 135 { 136 try { 137 DefaultMutableTreeNode node = new DefaultMutableTreeNode(f.getFullName()); 140 141 Folder sons[] = f.listSubscribed(); 142 143 if (sons != null) 144 { 145 for (int i = 0; i < sons.length; i++) 146 { 147 if(!alreadyHasFolder(node, sons[i].getFullName())) 148 node.add(getFolder(sons[i])); 149 } 150 } 151 return node; 152 } catch (Exception e) { 153 return null; 154 } 155 } 156 157 158 private static boolean alreadyHasFolder(DefaultMutableTreeNode node, String folder) 159 { 160 if(node.getChildCount() > 0) 161 { 162 DefaultMutableTreeNode child = (DefaultMutableTreeNode)node.getFirstChild(); 163 while(child != null) 164 { 165 if(child.getUserObject().equals(folder)) 166 return true; 167 168 child = child.getNextSibling(); 169 } 170 } 171 return false; 172 } 173 174 181 protected final static boolean deleteMessage(Store store, Folder currentFolder, String id) 182 { 183 try { 184 Message msg[] = currentFolder.getMessages(); 186 String currentId = null; 187 188 for(int i = 0; i < msg.length; i++) 189 { 190 currentId = ((MimeMessage) msg[i]).getMessageID(); 191 192 if(currentId != null) 193 { 194 if (currentId.compareTo(id) == 0) 196 { 197 msg[i].setFlag(Flags.Flag.DELETED, true); 199 break; 200 } 201 } 202 } 203 204 return true; 205 } catch (Exception e) { 206 DialogBox.error("" + e); 207 e.printStackTrace(); 208 return false; 209 } 210 } 211 212 220 protected final static boolean copyMsg(Store store, Folder currentFolder, String id, String dest) 221 { 222 try { 223 Message msg[] = currentFolder.getMessages(); 225 226 Message moved[] = new Message[1]; 228 229 int i; 230 String currentId = null; 231 232 for(i=0; i<msg.length; i++) 233 { 234 currentId = ((MimeMessage) msg[i]).getMessageID(); 235 if(currentId != null) 236 { 237 if(currentId.compareTo(id) == 0) 238 { 239 moved[0] = msg[i]; 241 break; 242 } 243 } 244 } 245 246 Folder f2 = store.getFolder(dest); 248 f2.open(Folder.READ_WRITE); 249 currentFolder.copyMessages(moved, f2); 250 f2.close(false); 251 252 return true; 253 } catch (Exception e) { 254 DialogBox.error("" + e); 255 e.printStackTrace(); 256 return false; 257 } 258 } 259 260 268 protected final static boolean moveMsg(Store store, Folder currentFolder, String id, String dest) 269 { 270 try { 271 Message msg[] = currentFolder.getMessages(); 273 274 Message moved[] = new Message[1]; 276 277 int i; 278 String currentId = null; 279 280 for(i=0;i<msg.length;i++) 281 { 282 currentId = ((MimeMessage) msg[i]).getMessageID(); 283 284 if(currentId != null) 285 { 286 if(((MimeMessage) msg[i]).getMessageID().compareTo(id) == 0) 287 { 288 moved[0] = msg[i]; 290 break; 291 } 292 } 293 } 294 295 Folder f2 = store.getFolder(dest); 296 if (!f2.isOpen()) 297 f2.open(Folder.READ_WRITE); 298 f2.appendMessages(moved); 299 f2.close(false); 300 301 msg[i].setFlag(Flags.Flag.DELETED, true); 302 303 return true; 304 } catch (Exception e) { 305 DialogBox.error("" + e); 306 e.printStackTrace(); 307 return false; 308 } 309 } 310 311 316 protected final static boolean deleteFolder(Folder currentFolder) 317 { 318 try { 319 if (currentFolder.isOpen()) 320 currentFolder.close(true); 321 return currentFolder.delete(true); 322 } catch (Exception e) { 323 DialogBox.error("" + e); 324 e.printStackTrace(); 325 return false; 326 } 327 } 328 329 336 protected final static void createFolder(Store store, Profile profile, String name, int type) 337 { 338 try { 339 Folder f = store.getFolder(name); 340 f.create(type); 341 f.setSubscribed(true); 342 } catch (Exception e) { 343 DialogBox.error("" + e); 344 e.printStackTrace(); 345 } 346 } 347 348 359 protected final static boolean sendMsg(String dest[], String cc[], String bcc[], 360 String subject, String content, Vector filenames, Profile profile) 361 { 362 try { 363 Properties p = System.getProperties(); 365 p.put("mail.smtp.host", profile.getOutgoing()); 366 367 Session s = Session.getInstance(System.getProperties()); 369 370 InternetAddress addr[] = new InternetAddress[dest.length]; 371 for (int i = 0; i < addr.length; i++) 372 addr[i] = new InternetAddress(dest[i]); 373 374 InternetAddress addrCC[] = new InternetAddress[cc.length]; 375 for (int i = 0; i < cc.length; i++) 376 addrCC[i] = new InternetAddress(cc[i]); 377 378 InternetAddress addrBCC[] = new InternetAddress[bcc.length]; 379 for (int i = 0; i < addrBCC.length; i++) 380 addrBCC[i] = new InternetAddress(bcc[i]); 381 382 InternetAddress a = new InternetAddress(profile.getEmail()); 383 Message m = new MimeMessage(s); 384 m.setHeader("X-Mailer", "JMail " + Common.JMAIL_VERSION); 385 386 String replyTo = profile.getReplyTo(); 387 if (replyTo != null && replyTo.compareTo("") != 0) 388 m.setHeader("Reply-To", replyTo); 389 390 m.setFrom(a); 391 m.setRecipients(Message.RecipientType.TO, addr); 392 m.setRecipients(Message.RecipientType.CC, addrCC); 393 m.setRecipients(Message.RecipientType.BCC, addrBCC); 394 m.setSubject(subject); 395 396 int size = filenames.size(); 397 if (size == 0) 398 m.setText(content); 399 else 400 { 401 MimeMultipart mp = new MimeMultipart(); 402 MimeBodyPart bp1 = new MimeBodyPart(); 403 bp1.setContent(content, "text/plain"); 404 mp.addBodyPart(bp1); 405 406 MimeBodyPart parts[] = new MimeBodyPart[size]; 407 String name = null; 408 File f = null; 409 String shortName = null; 410 411 for(int i=0; i<size; i++) 412 { 413 parts[i] = new MimeBodyPart(); 414 name = (String ) filenames.get(i); 415 f = new File(name); 416 shortName = f.getName(); 417 parts[i].setFileName(shortName); 418 parts[i].setContent(shortName, "text/plain"); 419 parts[i].setDataHandler(new DataHandler(new FileDataSource(f))); 420 mp.addBodyPart(parts[i]); 421 } 422 423 m.setContent(mp); 424 } 425 426 Transport t = s.getTransport(new URLName("smtp://" + profile.getOutgoing())); 427 t.connect(profile.getOutgoing(), profile.getOutgoingPort(), profile.getLogin(), profile.getPassword()); 428 Transport.send(m); 429 t.close(); 430 } catch (Exception e) { 431 DialogBox.error("" + e); 432 e.printStackTrace(); 433 return false; 434 } 435 436 return true; 437 } 438 } 439 | Popular Tags |