1 /****************************************************************
2 * Licensed to the Apache Software Foundation (ASF) under one *
3 * or more contributor license agreements. See the NOTICE file *
4 * distributed with this work for additional information *
5 * regarding copyright ownership. The ASF licenses this file *
6 * to you under the Apache License, Version 2.0 (the *
7 * "License"); you may not use this file except in compliance *
8 * with the License. You may obtain a copy of the License at *
9 * *
10 * http://www.apache.org/licenses/LICENSE-2.0 *
11 * *
12 * Unless required by applicable law or agreed to in writing, *
13 * software distributed under the License is distributed on an *
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15 * KIND, either express or implied. See the License for the *
16 * specific language governing permissions and limitations *
17 * under the License. *
18 ****************************************************************/
19
20
21
22 package org.apache.james.services;
23
24 import org.apache.mailet.Mail;
25 import org.apache.mailet.MailAddress;
26
27 import javax.mail.MessagingException;
28 import javax.mail.internet.MimeMessage;
29 import java.io.InputStream;
30 import java.util.Collection;
31
32 /**
33 * The interface for Phoenix blocks to the James MailServer
34 *
35 *
36 * @version This is $Revision: 521427 $
37 */
38 public interface MailServer
39 {
40 /**
41 * The component role used by components implementing this service
42 */
43 String ROLE = "org.apache.james.services.MailServer";
44
45 /**
46 * Reserved user name for the mail delivery agent for multi-user mailboxes
47 */
48 String MDA = "JamesMDA";
49
50 /**
51 * Reserved user name meaning all users for multi-user mailboxes
52 */
53 String ALL = "AllMailUsers";
54
55 /**
56 * Pass a MimeMessage to this MailServer for processing
57 *
58 * @param sender - the sender of the message
59 * @param recipients - a Collection of String objects of recipients
60 * @param msg - the MimeMessage of the headers and body content of
61 * the outgoing message
62 * @throws MessagingException - if the message fails to parse
63 *
64 * @deprecated You can use MailetContext service for this purpose
65 */
66 void sendMail(MailAddress sender, Collection recipients, MimeMessage msg)
67 throws MessagingException;
68
69 /**
70 * Pass a MimeMessage to this MailServer for processing
71 *
72 * @param sender - the sender of the message
73 * @param recipients - a Collection of String objects of recipients
74 * @param msg - an InputStream containing the headers and body content of
75 * the outgoing message
76 * @throws MessagingException - if the message fails to parse
77 *
78 * @deprecated You can use MailetContext service for this purpose
79 */
80 void sendMail(MailAddress sender, Collection recipients, InputStream msg)
81 throws MessagingException;
82
83 /**
84 * Pass a Mail to this MailServer for processing
85 *
86 * @param mail the Mail to be processed
87 * @throws MessagingException
88 */
89 void sendMail(Mail mail)
90 throws MessagingException;
91
92 /**
93 * Pass a MimeMessage to this MailServer for processing
94 *
95 * @param message the message
96 * @throws MessagingException
97 *
98 * @deprecated You can use MailetContext service for this purpose
99 */
100 void sendMail(MimeMessage message)
101 throws MessagingException;
102
103 /**
104 * Retrieve the primary mailbox for userName. For POP3 style stores this
105 * is their (sole) mailbox.
106 *
107 * @param userName - the name of the user
108 * @return a reference to an initialised mailbox
109 */
110 MailRepository getUserInbox(String userName);
111
112 /**
113 * Generate a new identifier/name for a mail being processed by this server.
114 *
115 * @return the new identifier
116 */
117 String getId();
118
119 /**
120 * Adds a new user to the mail system with userName. For POP3 style stores
121 * this may only involve adding the user to the UsersStore.
122 *
123 * @param userName - the name of the user
124 * @return a reference to an initialised mailbox
125 *
126 * @deprecated addUser should not be considered a property of a MailServer
127 * We could have readonly userbases providing full MailServer implementations.
128 * Look at the UsersRepository.addUser(username, password) method.
129 */
130 boolean addUser(String userName, String password);
131
132 /**
133 * Checks if a server is serviced by mail context
134 *
135 * @param serverName - name of server.
136 * @return true if server is local, i.e. serviced by this mail context
137 */
138 boolean isLocalServer(String serverName);
139
140 /**
141 * Return true if virtualHosting support is enabled, otherwise false
142 *
143 * @return true or false
144 */
145 boolean supportVirtualHosting();
146
147 /**
148 * Return the default domain which will get used to deliver mail to if only the localpart
149 * was given on rcpt to.
150 *
151 * @return the defaultdomain
152 */
153 String getDefaultDomain();
154
155 /**
156 * Return the helloName which should use for all services by default
157 *
158 * @return the helloName
159 */
160 String getHelloName();
161 }