MboxStore.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2.  * MboxStore.java
  3.  * Copyright (C) 1999 dog <dog@dog.net.uk>
  4.  * 
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  * 
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  * 
  19.  * You may retrieve the latest version of this library from
  20.  * http://www.dog.net.uk/knife/
  21.  */
  22. package dog.mail.mbox;
  23. import java.io.*;
  24. import java.net.*;
  25. import javax.mail.*;
  26. import javax.mail.event.*;
  27. import java.util.Hashtable;
  28. import dog.mail.util.*;
  29. /**
  30.  * The storage class implementing the Mbox mailbox file format.
  31.  *
  32.  * @author dog@dog.net.uk
  33.  * @version 1.2.1
  34.  */
  35. public class MboxStore extends Store {
  36. static int fetchsize = 1024;
  37. Hashtable folders = new Hashtable();
  38. /**
  39.  * Constructor.
  40.  */
  41. public MboxStore(Session session, URLName urlname) {
  42. super(session, urlname);
  43. String ccs = session.getProperty("mail.mbox.fetchsize");
  44. if (ccs!=null) try { fetchsize = Math.max(Integer.parseInt(ccs), 1024); } catch (NumberFormatException e) {}
  45. }
  46. /**
  47.  * There isn't a protocol to implement, so this method just returns.
  48.  */
  49. protected boolean protocolConnect(String host, int port, String username, String password) throws MessagingException {
  50. return true;
  51. }
  52. /**
  53.  * Returns the default folder.
  54.  */
  55. public Folder getDefaultFolder() throws MessagingException {
  56. if (url!=null) {
  57. String file = url.getFile();
  58. if (file.length()>0) {
  59. String name = File.separator+file.replace('/', File.separatorChar);
  60. Folder folder = getFolder(name);
  61. return folder;
  62. }
  63. }
  64. try {
  65. return getFolder(System.getProperty("user.home"));
  66. } catch (SecurityException e) {
  67. throw new MessagingException("Access denied", e);
  68. }
  69. }
  70. /**
  71.  * Returns the folder with the specified filename.
  72.  */
  73. public Folder getFolder(String filename) throws MessagingException {
  74. Folder folder = (Folder)folders.get(filename);
  75. if (folder==null) {
  76. if ("inbox".equals(filename.toLowerCase())) {
  77. // First try the session property mail.mbox.inbox.
  78. String m = session.getProperty("mail.mbox.inbox");
  79. if (m!=null && new File(m).exists())
  80. filename = m;
  81. else { // If that fails try some common (UNIX) locations.
  82. try {
  83. m = File.separator+"var"+File.separator+"spool"+File.separator+"mail"+File.separator+System.getProperty("user.name");
  84. if (new File(m).exists())
  85. filename = m;
  86. else {
  87. m = System.getProperty("user.home")+File.separator+"mbox";
  88. if (new File(m).exists())
  89. filename = m;
  90. }
  91. } catch (SecurityException e) { // not allowed to read system properties
  92. }
  93. }
  94. }
  95. folders.put(filename, folder = new MboxFolder(this, filename));
  96. }
  97. return folder;
  98. }
  99. /**
  100.  * Returns the folder specified by the filename of the URLName.
  101.  */
  102. public Folder getFolder(URLName urlname) throws MessagingException {
  103.         return getFolder(File.separator+urlname.getFile().replace('/', File.separatorChar));
  104. }
  105. }