Rund ums Mailen ...
Mail ist einer der ältesten Netzwerkdienste. Dementsprechend standardisiert (in Form von RFC) sind die verwendeten Protokolle (z. B. SMTP seit 1982).
Mailserver
Verwendete Protokolle:
- POP3: Lesen von Mails - verwendet zur Kommunikation zwischen MUA und Mailserver
- IMAP: Lesen von Mails - verwendet zur Kommunikation zwischen MUA und Mailserver
- SMTP: Mailversand
- verwendet zur Kommunikation zwischen MUA und Mailserver
- verwendet zum Versenden zwischen MTAs
Wichtige Konzepte
siehe
http://de.wikipedia.org/wiki/Mail_Transfer_Agent- MUA: MessageUserAgent - Komponente, die mit dem Mailsender (z. B. Mensch) und dem MTA sitzt. MUA und MTA sprechen miteinander die o. a. Protokolle (SMTP, IMAP, ...)
- MTA: MessageTransferAgent leitet zu versendende eMails vom lokalen Netz zum MTA des Empfängers weiter (evtl. über weitere Vermittler-MTAs im Internet - fürs Routing sind sog. MX-records entscheidend).
- ein MTA ist Teil eines Mailservers
- MDA: MailDeliveryAgent. Nimmt die Nachrichten seines empfangenden MTA entgegen und sortiert sie in die Postfächer ein
- MX-Record (http://de.wikipedia.org/wiki/MX_Resource_Record): MX-RR (MaileXchangeResourceRecord) sind Einträge im DNS. Sie dienen der Zustellung von eMails. Für jede Maildomain (bei info@cachaca.de ist cachaca.de die Maildomain) gibt es ein oder mehrere (mehrere ist zu empfehlen - dann kann man einen Mailserver auch mal vom Netz nehmen bzw. durch einen anderen ersetzen) Einträge, über welchen Rechnernamen (FQDN = FullQualifiedDomainName) ein Mailserver erreichbar ist (details siehe hier).
- Fetchmail: viele Mailserver besitzen nicht nur einen MessageTransferAgent (zum Mailversand), sondern auch eine Komponente, um Mails von anderen Postfächern abzuholen. Dies bietet für die User den Vorteil, daß sie ihre Mails zentral in einem Mail-Postfach liegen haben. Hierzu muss man der Fetchmail-Komponente allerdings die Account/Passwörter auf den anderen Mailservern verraten
SMTP - SimpleMailTransferProtocol
Zum Mailversand wird dieses Protokoll verwendet. Es handelt sich um ein textbasiertes Protokoll, so daß ein Mailversand prinzipiell über telnet möglich ist (hier findet man ein Beispiel:
http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol).
SMTP über telnet-Protokoll
Da es sich bei SMTP um ein textbasiertes Protokoll handelt (wie HTTP auch) kann man auch einen einfachen telnet-Client (z. B. mit CommandLineInterface) verwenden, um eMails zu versenden. Hierzu bedient man sich der Kommandos, die im SMTP-Protokoll zur Verfügung stehen - siehe
http://tools.ietf.org/html/rfc5321#page-19:
SMTP-Auth
Bekannte Mailserver
- postfix (Aufrufkompatibel mit sendmail, d. h. für die Clients ist es transparent, ob sie mit postfix oder sendmail arbeiten)
- sendmail
- cyrus
- qmail - im Gegensatz zu anderen Unix-MTAs: modularer Aufbau
- Apache James - erweiterbar über Mailet-API!!!
Mailzustellungsprozess
Nach Abfrage des MX-Records wird eine Verbindung zum Mailserver aufgebaut. ACHTUNG: der SMTP-Port ist nicht im MX-Record enthalten, denn es wird davon ausgegangen, daß der
IANA-Standardport (für SMTP: 25) verwendet wird. Aus diesem Grund sollte man einen extern erreichbaren SMTP-Server immer auf Port 25 laufen lassen!!!
Mailserver postfix
Typischer Linux-Mailserver, der häufig schon out-of-the-box für Betriebssystem-internes Mailing konfiguriert ist. So bekommt ein Benutzer aktuelle System-Informationen, z. B.
- gelaufene Cron-Jobs
- abgebrochene Druck-Jobs
- Systemnachrichten (zu jedem User lässt sich einstellen, ob er Systemnachrichten erhalten soll oder
nicht - siehe Benutzerverwaltung)
- fehlgeschlagene Login-Versuche
- ...
Als Mailbox-Format wird mbox verwendet. Diese kann beispielsweise mit dem Mail-Client mailx gelesen werden - weitere Informationen findet man hier.
Konfiguration
Die Postfix-Konfiguration befindet sich üblicherweise in /etc/postfix/. So sieht das Ergebnis einer üblichen Konfiguration aus:
- Mailboxen liegen in /var/mail/${USERNAME}
- hier liegen die neuen (bzw. noch nicht gelesenen) Nachrichten
- Anzeige dieser Nachrichten kann per Kommando mail von der Console erfolgen
- evtl. eine Mailbox in /home/${USERNAME}/mbox
- hier liegen die gespeicherten Nachrichten
OS-internes Mailing
Viele Informationen werden vom Betriebssystem automatisch per Mail zugestellt. Die Benutzer können untereinander aber auch per Mail kommunizieren (ohne weitere Mail-Infrastruktur). Im einfachsten Fall wird dazu der textbasierte mailx-Client verwendet (hier eine Mail an den Betriebssystemuser pfh):
mailx pfh
Der Mailclient ist interaktiv ... man wird dann nach dem Subject gefragt und kann den Text eingeben. Die Eingabe wird mit Ctrl-D beendet - dann erfolgt die Mailzustellung. siehe auch
Postfix als richtiger Mailserver
Damit Postfix auch nach außen (ins Internet - also zu nicht-Betriebssystem-Users) Mails verschicken kann, muss er allerdings noch speziell konfiguriert werden. Wenn man das nicht tut, so könnte es zu folgender Fehlermeldung kommen (siehe /var/log/mail):
Sep 28 11:33:18 linux-lmzo postfix/smtp[17095]: EC57C80C7: to=<info@cachaca.de>, relay=mail.cachaca.de[80.246.53.10]:25,
delay=1.1, delays=0.47/0.21/0.24/0.15, dsn=5.7.1, status=bounced (host mail.cachaca.de[80.246.53.10] said:
554 5.7.1 Service unavailable; Client host [xxx.yyy.21.144] blocked using zen.spamhaus.org;
http://www.spamhaus.org/query/bl?ip=xxx.yyy.21.144 (in reply to RCPT TO command))
Der Message-Transfer-Agent von Postfix wollte die Mail an info@cachaca.de zustellen. Hierzu hat er Kontakt zum SMTP-Server (mail.cachaca.de) aufgenommen. Der hat jedoch die Annahme verweigert, weil sich der Postfix nicht authentifiziert hat und die sendende IP-Adresse xxx.yyy.21.144 - laut http://www.spamhaus.org/query/bl?ip=xxx.yyy.21.144 - nicht in der Liste der Mailserver ist, die Mails ohne Authentifizierung zustellen dürfen. Und das ist auch klar, denn xxx.yyy.21.144 ist die IP-Adresse, die ich von meinem DSL-Hoster bekommen habe (besser mein Router). Sonst könnte ja jeder rumspammen ... Ein offizieller Mailserver - wie beispielsweise mail.marmorbau.de - würde dieses Problem nicht haben, weil seine IP-Adresse nicht geblockt ist.
Mailserver Apache James - Konzepte
Spool
Will der Client eine Mail versenden, dann schickt er einen SMTP-Request an den SMTP-Port des James. Die Verarbeitung der Mail (u. a. Zustellung) erfolgt dannn asynchron. Hierzu landet die Mail in der sog. Spool (ein Container für noch nicht zugestellte Mails). Ein Thread ist dann dafür zuständig die Mails aus der Spool an die Empfänger zuzustellen - scheitert die Zustellung, so kann man den Server so konfigurieren, daß er es mehrfach versucht.
Fetchmail
Über Fetchmail kann man Nachrichten von anderen Mailservern abrufen und in die lokalen Postfächer zustellen. füpr den Benutzer ist das sehr komfortabel, denn er bracuht dann nur einen Mailserver zu konfigurieren.
Mailets
James bietet mit Mailets eine Möglichkeit, sich in die Mailverarbeitung mit selbstgeschriebenem Code einzuklinken, um so beispielsweise einen Decorator (DirectProject tut dies um verschlüsselung/Entschlüsselung und Signierung/Signaturcheck für den Mailversender transparent anzubieten). Ein Custom-Mailet muss hierzu das Interface
org.apache.mailet.Mailet implementieren, ein Custom-Matcher muss das Interface
org.apache.mailet.Matcher implementieren.
James verwendet diese Technologie selbst, um typische Mailserver-Funktionalität abzubilden (z. B. Spoolmanager, .
Mailets sind vergleichbar mit Servlet-Filtern - sie bilden i. d. R. eine Kette von Filtern, die nacheinander durchlaufen werden. Bei der Definition der Mailets wird eine Ausführungsbedingung in Form eines Match-Ausdrucks definiert. Die Mailets werden zunächst mal in der Reihenfolge der Konfiguration (in config.xml - James 3) durchlaufen, es kann aber passieren, dass die Reihenfolge durch eine (bedingte) Delegation an einen Processor (per <processor>BLA</processor>) geändert wird.
KonfigurationEin Beispiel aus der Direct Project-Konfiguration:
<!-- Import einiger Mailets - Standard-Mailets wie org.apache.james.transport.mailets.smime - selbstentwickelte Custom-Mailets wie org.nhindirect.gateway.smtp.james.mailet--><mailetpackages>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage>
<mailetpackage>org.nhindirect.gateway.smtp.james.mailet</mailetpackage>
<mailetpackage>org.nhind.james.mailet</mailetpackage>
</mailetpackages>
<matcherpackages>
<matcherpackage>org.apache.james.transport.matchers</matcherpackage>
<matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage>
<matcherpackage>org.nhindirect.gateway.smtp.james.matcher</matcherpackage>
<matcherpackage>org.nhind.james.matcher</matcherpackage>
</matcherpackages>
<spoolmanager> <!-- This block is responsible for processing messages on the spool. -->
<processor name="root">
<!-- The root processor is a required processor - James routes all mail on the spool through this processor first. --><!-- This mailet redirects mail for the user 'postmaster' at any
local domain to the postmaster address specified for the server. -->
<mailet match="All" class="PostmasterAlias"/>
<!-- Important check to avoid looping -->
<mailet match="RelayLimit=30" class="Null"/>
<mailet match="All" class="ClamAVScan" onMailetException="ignore"/> <!-- Virenscannerintegration -->
<mailet match="HasMailAttributeWithValue=org.apache.james.infected, true" class="ToProcessor">
<processor>virus</processor> <!-- DELEGATION, wenn virus gefunden -->
</mailet>
... spamcheck, etc. ...
<mailet match="SMTPAuthSuccessful" class="ToProcessor">
<processor>transport</processor> <!-- DELEGATION, wenn versand erfolgen soll (alle vorbedingung sind geprüft -->
</mailet>
...
</processor>
<processor name="transport">
<!-- die Mail-Header werden ergänzt --><mailet match="SMTPAuthSuccessful" class="SetMimeHeader">
<name>X-UserIsAuth</name>
<value>true</value>
</mailet>
<mailet match="HasMailAttribute=org.apache.james.SMIMECheckSignature" class="SetMimeHeader">
<name>X-WasSigned</name>
<value>true</value>
</mailet>
<!-- so ist der Decorator zur Verschlüsselung eingebunden
Mails an lokale Empfänger (LocalDelivery) werden nicht verschlüsselt, das NHINDSecurityAndTrustMailet
implementiert die Verschlüsselungs/Signierungslogik - entsprechende
--> <mailet match="RecipAndSenderIsNotLocal=myhealthdomain" class="NHINDSecurityAndTrustMailet">
<ConfigURL>http://localhost:8081/config-service/ConfigurationService</ConfigURL>
</mailet>
<mailet match="RecipientIsLocal" class="LocalDelivery"/>
</processor>
Mailserver Apache James - Version 3
Hierbei handelt es sich um einen in Java geschriebenen Mailserver mit Support verschiedener Standardprotokolle im Mailbereich (u. a. POP3, SMTP, IMAP).
Verwendete Technologien:
- Spring (Konfiguration)
- siehe james-server-context.xml (importiert dann weitere Spring-Konfigurationen für JCR, JPA, maildir, memory)
- Camel
- ActiveMQ
- JPA
- Derby (Persistenz)
- JackRabbit
- maven 3
Dokumentation:
Ein erster Einstieg ...
http://james.apache.org/server/3/quick-start.html
Start
$JAMES_HOME/bin/james [start | status | stop]
Ob der Server richtig gestartet ist, kann man folgendermassen überprüfen:
- Logfile
- $JAMES_HOME/bin/james status
- netstat -anp | grep 25
- telnet 127.0.0.1 25 - so muss das dann aussehen
:~/programs/apache-james> telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 ... SMTP Server (JAMES SMTP Server) ready Tue, 30 Aug 2011 18:53:55 +0200 (CEST)
ACHTUNG: die Default-Ports liegen unter 1099, so daß Root-rechte erforderlich sind
Domains und User anlegen
Die Organisationstruktur sieht folgendermassen aus:
- Domain (z. B. zwergnase)
- Account (z. B. ich@zwergnase)
- eMail-Adresse (z. B. ich@zwergnase, ich-alias@zwergnase)
Ein Account muss also immer einer Domain zugeordnet werden - der Accountname enthält den Domainname (ich@zwergnase).
Das Apache-James-Paket bringt ein Command-Line-Interface mit (CLI), über das man folgenermassen eine Domain und User anlegen kann (9999 ist der JMX-Port ... entsprechend anpassen, wenn man ihn geändert hat):
james-cli -h localhost -p 9999 adddomain mydomain.tld
james-cli -h localhost -p 9999 adduser myuser@mydomain.tld mypassword
Der CLI verwendet die JMX-Schnittstelle, die man über die JConsole auch direkt erreicht (
http://james.apache.org/server/3/manage.html)
Konfiguration
Doku der verschiedenen Konfigurationsdateien:
http://james.apache.org/server/3/config.htmlDie Konfiguration erfolgt über Property-Dateien und Spring-Konfigurationen, die sich im Ordner
$JAMES_HOME/conf/* befinden. Zur Laufzeit kann man auch noch Konfigurationen per MBeans (z. B. JConsole verwenden) verändern (siehe Administration / Monitoring).
Administration / Monitoring
Zur Administration im laufenden Betrieb bietet James zwei Clients an:
- CommandLineInterface (setzt auf den MBeans auf)
- MBeans (gemäß JMX-Spezifikation), z. B. über JConsole
siehe Doku:
http://james.apache.org/server/3/manage.htmlPersistenz
Zur Speicherung der Mail kommen folgende Varianten in Frage (konfigurierbar)
- Filesystem
- Datenbank (integrierte Derby-Datenbank)
- Hauptspeicher
- JavaContentRepository
- hierzu wird JackRabbit gebraucht
Logging
Die Logs sind natürlich immer die erste Anlaufstellen, wenn etwas schiefgeht. Bei James schreibt jede größere Komponente eine eigene Logdatei (pop3server.log, smtpserver.log, mailetcontainer.log, ...).
Für die Erstanalyse scheint
james-server.log die beste Anlaufstelle zu sein, denn hier laufen alle Logs zusammen.
Insofern bietet James das beste aus beiden Ansätzen (eine große Logdatei vs. viele spezialisierte Logdateien). Das Logging ist natürlich per
conf/log4j.properties konfigurierbar - oben beschrieben ist die Default-Konfiguration.
Customisierung
Ein großer Vorteil, den James bietet, besteht in den sog. Mailets (der Name ist an die im HTTP-Umfeld für Webapplikationen verwendeten Servlets angelehnt). Hierüber kann man ähnlich wie bei ServletFiltern in die Mailprozessierung eingreifen.
Die
DirectProject Referenzimplementierung verwendet diese Technologie beispielsweise, um die Mails - für den Nutzer transparent - zu verschlüsseln und zu signieren. Durch folgende Konfiguration
<mailetpackages>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage>
<mailetpackage>org.nhindirect.gateway.smtp.james.mailet</mailetpackage>
</mailetpackages>
<matcherpackages>
<matcherpackage>org.apache.james.transport.matchers</matcherpackage>
<matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage>
<matcherpackage>org.nhindirect.gateway.smtp.james.matcher</matcherpackage>
</matcherpackages>
...
<processor name="transport">
<mailet match="RecipAndSenderIsNotLocal=mydomain.com" class="NHINDSecurityAndTrustMailet">
<ConfigURL>http://localhost:8081/config-service/ConfigurationService</ConfigURL>
</mailet>
wird das
NHINDSecurityAndTrustMailet (ist Bestandteil eines jars im James-lib-Folder) in die Prozessierung von Mails integriert. Mehr Details:
http://api.nhindirect.org/java/site/gateway/1.0.1/users-guide/depl-james.html#Apache_James_DeploymentFAQ
Problem 1: Start als Nicht-Root-User
Lösung 1:
Die Mail-defaul-Ports liegen unterhalb 1099, so daß nur der Root-User
James starten kann ... wer das nicht will sollte sudo verwenden
Problem 2: James fährt sofort wieder runter und ich finde keinen Hinweis in der $JAMES_HOME/log/james-server.log
Lösung 2:
ich fand einen Hinweis in der wrapper.log, die leider im
$JAMES_HOME/bin-Verzeichnis liegt. Hier fand ich gleich mehrere Ports,
die bereits anderweitig vergeben waren (25: Postfix, 9999: meine
HSQL-Datenbank, ...)
Problem 3: Ich möchte einen Mailserver mit zwei Domains quatschdomain1 und quatschdomain2 zu Lernzwecken innerhalb eines LANs betreiben, so daß ich eine Mail von user1@quatschdomain1 nach user2@quatschdomain2 schicken kann. Beide Domains laufen auf dem gleichen Rechner (localhost). Ich habe die
/etc/hosts Datei angepasst, so daß quatschdomain1 und quatschdomain2 auf localhost umgeleitet werden (so zumindest mein Plan). Leider werden allerdings die Mails nicht versendet (ich verwende Thunderbird als Mailclient) - ich bekomme einen Fehler beim connect an den smtp-Server (localhost). Kann es sein, dass der James-MTA meine
/etc/hosts Datei nicht zum Routing der Mail verwendet (bei Postfix kann man das ja beispielsweise per
disable_dns_lookups konfigurieren)?
Antwort 3a: Es hat scheinbar nichts mit der Zustellung zu tun - Thunderbird wird die Mail schon gar nicht beim SMTP-Server los, weil die Verbindung fehlschlägt. Das Problem scheint also schon früher aufzutreten. Der Fehler liegt darin, daß ich cmMaildomain als SMTP-Servername eingetragen habe - mit localhost funktioniert es.
Antwort 3b: Durch localhost als Server geht die Mail wenigstens bis zum SMTP-Server, aber der Empfänger bekommt sie nicht :-( Ein Blick in die
smtpserver.log verrät:
Successfully spooled mail Mail1317152020780-50eab7d2-c4cc-46e9-afc8-4a7b094ac028 from user1@quatschdomain1 on 0:0:0:0:0:0:0:1 for [user2@quatschdomain2]
Die Mail hängt im Spooler fest ... In der
james-server.log finde ich dann aber wenigsten noch ein bissl mehr:
INFO 22:17:10,008 | james.smtpserver | ID=1946375588 Connection established from localhost (0:0:0:0:0:0:0:1)
INFO 22:17:11,700 | james.smtpserver | ID=1946375588 Successfully spooled mail Mail1317154631642-50fd1195-61bd-4bda-a7a1-c961724
a0f76 from user1@quatschdomain1 on 0:0:0:0:0:0:0:1 for [user2@quatschdomain2]
INFO 22:17:12,447 | james.smtpserver | ID=1946375588 Connection closed for localhost (0:0:0:0:0:0:0:1)
INFO 22:17:12,656 | james.dnsservice | Couldn't resolve MX records for domain quatschdomain1.
ERROR 22:17:12,657 | james.dnsservice | Couldn't resolve IP address for host quatschdomain1.
INFO 22:17:12,657 | james.mailetcontext | No mail server found for: quatschdomain1
INFO 22:17:12,658 | james.mailetcontext | Permanent exception delivering mail (Mail1317154631642-50fd1195-61bd-4bda-a7a1-c961724a0f76-to-quatschdomain1:
INFO 22:17:12,804 | james.dnsservice | Couldn't resolve MX records for domain quatschdomain2.
ERROR 22:17:12,805 | james.dnsservice | Couldn't resolve IP address for host quatschdomain2.
INFO 22:17:12,805 | james.mailetcontext | No mail server found for: quatschdomain2
INFO 22:17:12,805 | james.mailetcontext | Permanent exception delivering mail (Mail1317154631642-50fd1195-61bd-4bda-a7a1-c961724a0f76-to-quatschdomain1-!884258-to-quatschdomain2:
INFO 22:17:12,805 | james.mailetcontext | Null Sender: no bounce will be generated for Mail1317154631642-50fd1195-61bd-4bda-a7a1-c961724a0f76-to-quatschdomain1-!884258-to-quatschdomain2
Hier ist der Code, der die Ausgabe erzeugt:
234 public Collection findMXRecords(String hostname) {
235 List servers = new ArrayList();
236 try {
237 servers = findMXRecordsRaw(hostname);
238 return Collections.unmodifiableCollection(servers);
239 } finally {
240 //If we found no results, we'll add the original domain name if
241 //it's a valid DNS entry
242 if (servers.size () == 0) {
243 StringBuffer logBuffer =
244 new StringBuffer(128)
245 .append("Couldn't resolve MX records for domain ")
246 .append(hostname)
247 .append(".");
248 getLogger().info(logBuffer.toString());
249 Record cnames[] = lookup(hostname, Type.CNAME);
250 Collection cnameMXrecords = null;
251 if (cnames!=null && cnames.length > 0) {
252 cnameMXrecords = findMXRecordsRaw(((CNAMERecord) cnames[0]).getTarget().toString());
253 } else {
254 logBuffer = new StringBuffer(128)
255 .append("Couldn't find CNAME records for domain ")
256 .append(hostname)
257 .append(".");
258 getLogger().info(logBuffer.toString());
259 }
260 if (cnameMXrecords==null) {
261 try {
262 getByName(hostname);
263 servers.add(hostname);
264 } catch (UnknownHostException uhe) {
265 // The original domain name is not a valid host,
266 // so we can't add it to the server list. In this
267 // case we return an empty list of servers
268 logBuffer = new StringBuffer(128)
269 .append("Couldn't resolve IP address for host ")
270 .append(hostname)
271 .append(".");
272 getLogger().error(logBuffer.toString());
273 }
274 } else {
275 servers.addAll(cnameMXrecords);
276 }
277 }
278 }
279 }
Da ich keine MX-Records im DNS für meine Spiel-Maildomains habe, wird
Couldn't resolve MX records for domain ausgegeben.
Mailserver Apache James - Version 2
Strukturierung auf Filesystemebene
Ein bisschen seltsam ist anfangs, daß James ein Server ist, der intern eine Applikation deployed, die auch James heisst (JAMES_HOME/apps/james - erzeugt durch ein sog. SAR-Paket). James hat also seine eigene Deployment-Struktur (in Form des SAR-Files), so daß man sich vorstellen könnte, noch weitere SAR-Applikationen im James-Server zu deployen. Vermutlich kommt das vom Mailet-Konzept.
JAMES_HOME
apps/
james.sar
james/ - entpacktes SAR-File
conf/
logs/
SAR-INF/
var/
mail/
address-error/
error/
inboxes/
pierre.feldbusch/
mailIdBla_Repository.FileObjectStore
mailIdBla_Repository.FileStreamStore
mailIdBlubb_Repository.FileObjectStore
mailIdBlubb_Repository.FileStreamStore
postmaster/
...
outgoing/
relay-denied/
spam/
spool/
nntp/
users/
bin/ - Start/Stop-Skripts
conf/
logs/
Konfiguration
Zentrale Konfigurationsdateien sind:
- assembly.xml - Grobkonfiguration
- welche Dienste werden bereitgestellt
- config.xml - Detailkonfiguration
- Servername (Maildomain)
- RemoteManager
- Inbox-Konfiguration ... wo liegen die Postfächer und in welchem Format werden sie abgelegt
- environment.xml
- hier wird das Logging definiert (LogLevel, LogFiles, LogFormat, ...) definiert !!!
Start
Unter Linux kann man den Server per
- phoenix.sh im Hintergrund initd-konform (start, stop,, ...) starten
- run.sh im Vordergrund laufen lassen - praktisch für den Fall, daß man auf Fehlersuche ist, denn dann muss man nicht erst in den vielen getrennten Log-Files nachschauen. Ganz praktisch ist auch das Einschalten der TRACE-Augaben durch Konfiguration des Startprozesses (phoenix.sh anpassen) - siehe http://api.nhindirect.org/java/site/gateway/1.0.1/users-guide/depl-james.html#Logging
- -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
- -Dorg.apache.commons.logging.simplelog.defaultlog=trace"
RemoteManager ... zur Administration
James bringt den sog. RemoteManager mit, der auf einem konfigurierten
Port (konfiguriert in config.xml) lauscht und mit dem man sich z. B. per telnet verbinden kann.
user@host:~/programs/directGatewayHealthDomain/james-2.3.2/apps/james/conf> telnet localhost 4555
Trying ::1...
Connected to localhost.
Escape character is '^]'.
JAMES Remote Administration Tool 2.3.2
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands
HELP
Currently implemented commands:
help display this help
listusers display existing accounts
countusers display the number of existing accounts
adduser [username] [password] add a new user
verify [username] verify if specified user exist
deluser [username] delete existing user
setpassword [username] [password] sets a user's password
setalias [user] [alias] locally forwards all email for 'user' to 'alias'
showalias [username] shows a user's current email alias
unsetalias [user] unsets an alias for 'user'
setforwarding [username] [emailaddress] forwards a user's email to another email address
showforwarding [username] shows a user's current email forwarding
unsetforwarding [username] removes a forward
user [repositoryname] change to another user repository
shutdown kills the current JVM (convenient when James is run as a daemon)
quit close connection
Nach Einloggen mit root/root (Username/Passwort) kann man die aufgeführten Kommandos (bekommt man per HELP) verwenden.
User anlegen - RemoteManager
http://james.apache.org/server/2/adding_users.htmlAnmelden an den RemoteManager (siehe oben) und dann
adduser myuser mypassword
an.
Beachte den Hinweis aus der
Doku:
"3. After logging in, type "adduser <user> <password>" where <user> is the user name
and <password> is the password of the account you wish to create. Please note that the user name
should NOT be a complete email address. Rather, all email addresses of the form <user>@<domain>
(where <domain> is any of the values specified in the <servernames> block) will be delivered to
this account by default. Mailet configuration can change this default behavior."
Mailversand
Die Mailverteilung erfolgt durch unterschiedliche Komponenten, die die Mail jeweils ein Stück näher zum Enpfänger bringen (oder im Fehlerfall in einer Sackgasse enden, z. B. address-error). Die Synchronisierung der Mails erfolgt über folgende Filesystem-Verzeichnisse:
spool/
outgoing/
sollte die Mailzustellung nicht auf Anhieb klappen, so verbleibt die Mail im outgoing-Folder bis sie entweder erfolgreich zugestellt wurde oder in den error- bzw. releay-denied-Folder geschoben wird
error/
address-error/
relay-denied/