1 19 20 package org.apache.james.test.mock.james; 21 22 import org.apache.avalon.framework.activity.Disposable; 23 import org.apache.avalon.framework.container.ContainerUtil; 24 import org.apache.james.core.MailImpl; 25 import org.apache.james.services.MailRepository; 26 import org.apache.james.services.MailServer; 27 import org.apache.james.smtpserver.MessageSizeException; 28 import org.apache.james.userrepository.MockUsersRepository; 29 import org.apache.mailet.Mail; 30 import org.apache.mailet.MailAddress; 31 32 import javax.mail.Address ; 33 import javax.mail.MessagingException ; 34 import javax.mail.internet.InternetAddress ; 35 import javax.mail.internet.MimeMessage ; 36 37 import java.io.InputStream ; 38 import java.util.Collection ; 39 import java.util.HashMap ; 40 import java.util.HashSet ; 41 import java.util.Iterator ; 42 import java.util.Map ; 43 44 public class MockMailServer implements MailServer, Disposable { 45 46 private final MockUsersRepository m_users = new MockUsersRepository(); 47 48 private static int m_counter = 0; 49 private int m_maxMessageSizeBytes = 0; 50 51 53 private final InMemorySpoolRepository mails = new InMemorySpoolRepository(); 54 private String lastMailKey = null; 55 56 private HashMap inboxes; 57 58 private boolean virtualHosting; 59 60 61 public MockUsersRepository getUsersRepository() { 62 return m_users; 63 } 64 65 public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException { 66 String newId = newId(); 70 MailImpl m = new MailImpl(newId, sender, recipients, msg); 71 sendMail(m); 72 m.dispose(); 73 } 74 75 public void sendMail(MailAddress sender, Collection recipients, InputStream msg) throws MessagingException { 76 MailImpl m = new MailImpl(newId(), sender, recipients, msg); 79 sendMail(m); 80 m.dispose(); 81 } 82 83 public void sendMail(Mail mail) throws MessagingException { 84 int bodySize = mail.getMessage().getSize(); 85 try { 86 if (m_maxMessageSizeBytes != 0 && m_maxMessageSizeBytes < bodySize) throw new MessageSizeException(); 87 } catch (MessageSizeException e) { 88 throw new MessagingException ("message size exception is nested", e); 89 } 90 91 lastMailKey = mail.getName(); 92 mails.store(mail); 93 } 95 96 public void sendMail(MimeMessage message) throws MessagingException { 97 MailAddress sender = new MailAddress((InternetAddress )message.getFrom()[0]); 99 Collection recipients = new HashSet (); 100 Address addresses[] = message.getAllRecipients(); 101 if (addresses != null) { 102 for (int i = 0; i < addresses.length; i++) { 103 if ( addresses[i] instanceof InternetAddress ) { 106 recipients.add(new MailAddress((InternetAddress )addresses[i])); 107 } 108 } 109 } 110 sendMail(sender, recipients, message); 111 } 112 113 public MailRepository getUserInbox(String userName) { 114 if (inboxes==null) { 115 return null; 116 } else { 117 if ((userName.indexOf("@") < 0) == false && supportVirtualHosting() == false) userName = userName.split("@")[0]; 118 return (MailRepository) inboxes.get(userName); 119 } 120 121 } 122 123 public void setUserInbox(String userName, MailRepository inbox) { 124 if (inboxes == null) { 125 inboxes = new HashMap (); 126 } 127 inboxes.put(userName,inbox); 128 } 129 130 public Map getRepositoryCounters() { 131 return null; } 133 134 135 public synchronized String getId() { 136 return newId(); 137 } 138 139 public static String newId() { 140 m_counter++; 141 return "MockMailServer-ID-" + m_counter; 142 } 143 144 public boolean addUser(String userName, String password) { 145 m_users.addUser(userName, password); 146 return true; 147 } 148 149 public boolean isLocalServer(String serverName) { 150 return "localhost".equals(serverName); 151 } 152 153 public Mail getLastMail() 154 { 155 if (mails.size() == 0) return null; 156 try { 157 return mails.retrieve(lastMailKey); 158 } catch (MessagingException e) { 159 e.printStackTrace(); 160 } 161 return null; 162 } 163 164 public void setMaxMessageSizeBytes(int maxMessageSizeBytes) { 165 m_maxMessageSizeBytes = maxMessageSizeBytes; 166 } 167 168 public void dispose() { 169 mails.dispose(); 178 if (inboxes!=null) { 179 Iterator i = inboxes.values().iterator(); 180 while (i.hasNext()) { 181 MailRepository m = (MailRepository) i.next(); 182 ContainerUtil.dispose(m); 183 } 184 } 185 } 186 187 public MailRepository getSentMailsRepository() { 188 return mails; 189 } 190 191 public void setVirtualHosting(boolean virtualHosting) { 192 this.virtualHosting = virtualHosting; 193 } 194 195 public boolean supportVirtualHosting() { 196 return virtualHosting; 197 } 198 199 public String getDefaultDomain() { 200 return "localhost"; 201 } 202 203 public String getHelloName() { 204 return "localhost"; 205 } 206 } 207 208 209 | Popular Tags |