Installation Sendmail / Cyrus IMAP

Installation Cyrus IMAP

Es gibt jetzt einen sasl-mysql Port, daher kann man Cyrus ganz normal über die Ports installieren:

pkg install cyrus-sasl-sql
pkg install cyrus-imapd23
pkg install sendmail+tls+sasl2

Konfiguration

/etc/services

Datei /etc/services editieren und folgenden Eintrag hinzufügen (falls nicht bereits vorhanden):

sieve           4190/tcp   #ManageSieve Protocol
sieve           4190/udp   #ManageSieve Protocol

ACHTUNG! Früher war Sieve auf Port 2000.  Der Port hat im Jahr 2009 gewechselt:

7 Dec 2009.... sieve service moves from 2000/tcp to 4190/tcp

/etc/rc.conf

#-----------------------------------------------#
#       Mail Server                             #
#-----------------------------------------------#
# Cyrus
cyrus_imapd_enable="YES"
# Sendmail
sendmail_enable="YES"           # Run the sendmail inbound daemon (YES/NO).
sendmail_submit_enable="YES"    # Start a localhost-only MTA for mail submission

MySQL Anbindung

Cyrus Table erstellen:

CREATE TABLE `cyrus_email` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL default '',
  `password` varchar(50) NOT NULL default '',
  `real_name` varchar(150) NOT NULL default '',
  `active` tinyint(4) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;

Eventuell bestehende cyrus_email einträge Importieren (falls der Server neu aufgesetzt wird)

In der mysql DB noch Berechtigungen geben:

MySQL User erstellen:

 INSERT INTO `user` ( `Host` , `User` , `Password` , `Select_priv` , `Insert_priv` , `Update_priv` , 
 `Delete_priv` , `Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` , `Process_priv` , `File_priv` , 
 `Grant_priv` , `References_priv` , `Index_priv` , `Alter_priv` , `Show_db_priv` , `Super_priv` , 
 `Create_tmp_table_priv` , `Lock_tables_priv` , `Execute_priv` , `Repl_slave_priv` , `Repl_client_priv` , 
 `ssl_type` , `ssl_cipher` , `x509_issuer` , `x509_subject` , `max_questions` , `max_updates` , `max_connections`
 )
 VALUES (
 'localhost', 'cyrus', PASSWORD( 'yourpass' ) , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0'
 );

Berechtigung:

 INSERT INTO `db` VALUES('%', 'Corky_admin', 'cyrus', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

Nach Anpassungen an den den Berechtigungen sollte man entweder die Datenbank neu starten oder die forcieren, die Privilegien-Datenbank neu zu laden:

mysqladmin -u root -p flush-privileges 
Enter password:

imapd.conf

Um weiterzufahren, muss man das File /usr/local/etc/imapd.conf anpassen. Welche Änderungen man alle machen kann, erfährt man, indem man man imapd.conf eingibt. Leider fehlen die sasl_sql_* Direktiven.

cp /usr/local/etc/imapd.conf /usr/local/etc/imapd.conf-dist
vi /usr/local/etc/imapd.conf
configdirectory: /var/imap
partition-default: /var/spool/imap
allowplaintext: yes
timeout: 30
poptimeout: 10
admins: admin
autocreatequota: 0
duplicatesuppression: yes
reject8bit: no
sieveusehomedir: false
sievedir: /var/imap/sieve
postmaster: postmaster
sieve_maxscriptsize: 64
sieve_maxscripts: 5
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sql
sasl_sql_engine: mysql 
sasl_sql_hostnames: localhost
sasl_sql_user: dbuser
sasl_sql_passwd: dbpass
sasl_sql_database: dbname
sasl_sql_verbose: no
sasl_sql_select: SELECT password FROM mail_entries WHERE ( username = '%u' OR ( username = '%u' AND domain = '%r' ) ) AND is_active = 1 AND is_mainaccount = 1
sasl_sql_usessl: 0
sasl_mech_list: login plain cram-md5 digest-md5 tls_cert_file: /var/imap/server.pem tls_key_file: /var/imap/server.pem tls_ca_file: /var/imap/server.pem log_level: 1

Damit sich er admin auch im cyradm einloggen kann, muss man in der MySQL Table dbname.cyrus_email noch den user „admin“ erstellen.

cyrus.conf

Das File /usr/local/etc/cyrus.conf muss in der Regel nicht modifziert werden. Es beschreibt, welche Daemons gestartet werden sollen (z.B. imap, imaps, pop3s, etc.)

Verzeichnisstrukturen erstellen

Anschliessend fürt man als root folgenden befehl aus:

/usr/local/cyrus/bin/mkimap
reading configure file...
i will configure directory /var/imap.
i saw partition /var/spool/imap.
done
configuring /var/imap...
creating /var/spool/imap...
done

Somit wäre mal das Grundgerüst von Cyrus erstellt.

SSL Zertifikat installieren

# rm /var/imap/server.pem 
# openssl req -new -x509 -nodes -out /var/imap/server.pem -keyout /var/imap/server.pem -days 365
Generating a 1024 bit RSA private key
.++++++
.......++++++
writing new private key to '/var/imap/server.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:ZH
Locality Name (eg, city) []:Zürich
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Deine Firma
 Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:server.example.com <--Wichtig: muss gleich Servername sein!
Email Address []:meine@emailadresse.com
#
chmod 600 /var/imap/server.pem
chown cyrus:cyrus /var/imap/server.pem

Syslog Anpassung

Ich will, dass er nicht die ganzen Logs im /var/log/messages abspeichert, sondern in ein separtes File /var/log/imapd.log Dazu packe ich folgende Zeile ins /etc/syslog.conf rein:

# alles wird geloggt
# local6.debug                                    /var/log/imapd.log
#Damit Loggst Du alles was local6 ist und nicht debug oder info ist nach /var/
#log/cyrus:
local6.*;local6.!=debug;local6.!=info           -/var/log/imapd.log

Erstelle die Datei:

true > /var/log/imapd.log

Und restarte anschliessend syslog:

/etc/rc.d/syslogd restart

Bestehende Mailboxen Importieren

1) Self Scripts kopieren:

cd /usr/local/cyrus/
mkdir self
cd self
scp <username>@oldserver.com:/usr/local/cyrus/self/* .
chown cyrus:cyrus *

2) User vom bestehenden System kopieren:

Alter Server:

/etc/rc.d/sendmail stop
/usr/local/etc/rc.d/imapd stop

tar cvfzpP /var_spool_imap.tar.gz /var/spool/imap
tar cvfzpP /var_imap.tar.gz /var/imap

Neuer Server (Ich speichere meine Mailboxen auf einer Separaten (/data) Partition:

cd /data
scp <username>@oldserver.com:/var_spool_imap.tar.gz .
scp <username>@oldserver.com:/var_imap.tar.gz .
tar xzfv var_spool_imap.tar.gz
tar xzfv var_imap.tar.gz
mv /var/spool/imap/user /var/spool/imap/user_bak
cd /var/spool/imap/
ln -s /data/var/spool/imap .

mv /var/imap/mailboxes.db /var/imap/mailboxes.db.backup cp /data/var/imap/mailboxes.db /var/imap/mailboxes.db chown cyrus:cyrus /var/imap/mailboxes.db

Testen, ob auch alles da ist:

cyradm localhost -u admin
Password: 
localhost.myserver.ch> lm
INBOX (HasNoChildren)                                                  
user.abfab (HasNoChildren)                                             
user.cruiser (HasChildren)                                             
user.cruiser.Registrations (HasChildren)                               
user.cruiser.Registrations.SearchEngines (HasNoChildren)               
user.cruiser.Registrations.eurogay (HasNoChildren)                     
user.cruiser.Registrations.hddialer (HasNoChildren)                    
user.cruiser.TopLists (HasNoChildren)                                  
user.cruiser.werbung_von_uns (H
[..]

4) Sieve Scripts kopieren

cd /var/imap/
cp -r /data/var/imap/sieve/* /var/imap/sieve/
chown cyrus:cyrus /var/imap/sieve/

5) Nun alles testen auf dem neuen Server:

/usr/local/etc/rc.d/imapd start

6) Wenn es keine Fehlermeldungen gibt, die DNS Einträge auf den neuen Mailserver ändern. Auf dem alten Mailserver IMAP nicht mehr starten, damit nicht aus versehen noch Mails angenommen werden.

Installation Sendmail

Vorbereitungen

Pfade für eigene Konfigurationen etc. erstellen:

mkdir /etc/mail/bin
mkdir /etc/mail/my_prefs
mkdir /etc/mail/header  
mkdir /etc/mail/certs 

true > /etc/mail/certs/revocation.list
chmod 600 /etc/mail/certs/revocation.list

Nun die Header Files hinzufügen

access

vi /etc/mail/header/access.header

->paste

#
# With this file you can control the access
# to your mailserver, example:
#
#    cyberspammer.com        550 We don't accept mail from spammers
#    okay.cyberspammer.com   OK
#    sendmail.org            OK
#    128.32                  RELAY
#
# Take a look at /usr/share/sendmail/README for a full description
127.0           RELAY
# Eigenes Relaying für MX
myserver.com        RELAY
# autogenerated entries below

aliases

vi /etc/mail/header/aliases.header

-> paste

# $FreeBSD: src/etc/mail/aliases,v 1.20 2004/06/30 16:47:08 maxim Exp $
#       @(#)aliases     5.3 (Berkeley) 5/24/90
#
#  Aliases in this file will NOT be expanded in the header from
#  Mail, but WILL be visible over networks.
#
#       >>>>>>>>>>      The program "newaliases" must be run after
#       >> NOTE >>      this file is updated for any changes to
#       >>>>>>>>>>      show through to sendmail.
#
#
# See also RFC 2142, `MAILBOX NAMES FOR COMMON SERVICES, ROLES
# AND FUNCTIONS', May 1997

# Pretty much everything else in this file points to "root", so
# you would do well in either reading root's mailbox or forwarding
# root's email from here.

# root: me@my.domain

# Basic system aliases -- these MUST be present
MAILER-DAEMON: postmaster
postmaster: root
root: /dev/null
www:            root

# General redirections for pseudo accounts
_pflogd: root
bin:    root
bind:   root
daemon: root
games:  root
kmem:   root
mailnull: postmaster
man:    root
news:   root
nobody: root
operator: root
pop:    root
proxy:  root
smmsp:  postmaster
sshd:   root
system: root
toor:   root
tty:    root
usenet: news
uucp:   root

# Well-known aliases -- these should be filled in!
# manager:
# dumper:

# BUSINESS-RELATED MAILBOX NAMES
# info:
# marketing:
# sales:
# support:

# NETWORK OPERATIONS MAILBOX NAMES
abuse:  root
# noc:          root
security:       root

# SUPPORT MAILBOX NAMES FOR SPECIFIC INTERNET SERVICES
ftp:            root
ftp-bugs:       ftp
# hostmaster:   root
# webmaster:    root
# www:          webmaster

# NOTE: /var/msgs and /var/msgs/bounds must be owned by sendmail's
#       DefaultUser (defaults to mailnull) for the msgs alias to work.
#
# msgs: "| /usr/bin/msgs -s"

# bit-bucket: /dev/null
# dev-null: bit-bucket
# ---------- BEGIN OF AUTOGENERATED STUFF --------------

sendmail.cw

vi /etc/mail/header/sendmail.cw.header

-> paste

# Lokale Hostnamen, für die Mail angenommen und an einen User auf diesem System gesandt wird
# (kann über /etc/aliases) weitergeleitet werden. Die Datei wird bei neueren Versionen auch
# als /etc/mail/local-host-names gespeichert.
mail.myserver.com
localhost
127.0.0.1
localhost.myserver.com

virtusertable

vi /etc/mail/header/virtusertable.header

-> paste

@mail.myserver.com         root

Installation

Anschliessend im

vi /etc/make.conf

folgendes hinzufügen:

#-----------------------------------------------#
# Sendmail                                      #
#-----------------------------------------------#
SENDMAIL_WITHOUT_IPV6=yes
SENDMAIL_WITHOUT_MILTER=no
SENDMAIL_WITH_TLS=yes
SENDMAIL_WITH_SMTPS=yes
SENDMAIL_WITH_SASL2=yes
SENDMAIL_WITH_CYRUSLOOKUP=yes
SENDMAIL_MC=/etc/mail/my_prefs/corky.mc
SENDMAIL_SUBMIT_MC=/etc/mail/my_prefs/corky.submit.mc
SENDMAIL_CFLAGS+= -DMILTER -DSASL=2
SENDMAIL_LDADD+= -lsasl2

Nun Sendmail aus den Ports installieren:

cd /usr/ports/mail/sendmail-sasl
make install clean

   lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
   x Options for cyrus-sasl-saslauthd 2.1.25                            x
   x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
   x x         [*] BDB       Use Berkeley DB                          x x
   x x         [ ] OPENLDAP  Use OpenLDAP                             x x
   x x         [ ] HTTPFORM  Enable HTTP form authentication          x x
   x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
   tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
   x                   <  OK  >          <Cancel>                       x
   mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

mailer.conf generieren

FreeBSD benutzt eine Datei namens /etc/mail/mailer.conf um rauszusuchen, welchen Mailer er nehmen soll. Nach der obigen Installation müssen wir daher das entsprechende File anpassen, damit er unser Sendmail aus den Ports nehmen soll, und nicht mehr jene aus der Base installation:

cd /usr/ports/mail/sendmail
make mailer.conf

Output:

/bin/mv /etc/mail/mailer.conf.new  /etc/mail/mailer.conf

Prüfen der Kompilation

Wir möchten nachtürlich wissen, ob Cyrus, SSL, wie auch Milter aktiv ist im Sendmail, denn das sind die wichtigsten drei Sachen, die wir unbedingt haben wollen.

sendmail -d0.1 < /dev/null 
Version 8.14.5
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
              NAMED_BIND NETINET NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF
              SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG

Konfiguration

Cyrus SASL / MySQL für Benutzer Authentisierung benutzen

Analog zum /usr/local/etc/imapd.conf richten wir SASL dazu ein, dass man den Benutzernamen ebenfalls mit der gleichen Datenbank authentisieren kann. Dazu erstellen resp. ändern wir das File:

vi /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: auxprop
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: localhost
sql_user: cyrus
sql_passwd: <sqlpass>
sql_database: Corky_admin
sql_verbose: no
sql_select: SELECT password FROM cyrus_email WHERE username = '%u' AND active='1'
sql_usessl: 0
mech_list: login plain cram-md5 digest-md5
log_level: 1

Sendmail

Die Konfiguration bei Sendmail geschieht am besten über sogenannte m4 Macros. Man kann, wenn man Lust hat, auch das ganze sendmail.cf von Hand editieren – ist jedoch nicht empfehlenswert, da ein Space und ein Tabulator zuviel oder an der falschen Stelle das ganze Sendmail schon abschalten kann…

Am einfachsten kopiert man /etc/mail/freebsd.submit.mc nach /etc/mail/my_prefs/default.submit.mc und /etc/mail/hostname.mc nach /etc/mail/default.mc (gemäss den Pfaden im /etc/make.conf) und linkt die .cf Dateien schön zurück:

mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.ORIGINAL
mv /etc/mail/submit.cf /etc/mail/submit.cf.ORIGINAL

mv /etc/mail/freebsd.submit.mc /etc/mail/my_prefs/default.submit.mc
mv /etc/mail/freebsd.mc /etc/mail/my_prefs/default.mc
touch /etc/mail/my_prefs/default.cf
touch /etc/mail/my_prefs/default.submit.cf
ln -s /etc/mail/my_prefs/default.cf /etc/mail/sendmail.cf
ln -s /etc/mail/my_prefs/default.submit.cf /etc/mail/submit.cf 

Anschliessend heisst es, vorallem das default.mc zu editieren. Bei Cyrus gibt es einige Sachen, die man speziell anpassen muss. Hier ist mein default.mc für einen Überblick der Funktionen.

Und wenn alles gut geklappt hat, kann man so schnell das ganze .cf File erstellen/editeren und anschliessend installieren lassen:

cd /etc/mail/
make cf install

Output:

/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 /etc/mail/my_prefs/corky.mc > /etc/mail/my_prefs/corky.cf
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 /etc/mail/my_prefs/corky.submit.mc > /etc/mail/my_prefs/corky.submit.cf
install -m 444 /etc/mail/my_prefs/corky.cf /etc/mail/sendmail.cf
install: /etc/mail/my_prefs/corky.cf and /etc/mail/sendmail.cf are the same file
*** Error code 64

Stop in /etc/mail.

–> Fehler ignorieren, wenn die .cf files erstellt worden sind.  Sind die Files nicht erstellt worden, einfach eine kleine Modifikation (z.B. dnl## ) in den *.mc hinzufügen, dann nochmals make cf install ausführen. Dann sollten die CF Files generiert werden.

SSL Zertifikat

openssl req -newkey rsa:1024 -keyout /etc/mail/certs/mycert.pem -nodes -x509 -days 365 -out  /etc/mail/certs/cacert.pem


Generating a 1024 bit RSA private key ................................................++++++ ...................++++++ writing new private key to '/etc/mail/certs/mycert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CH State or Province Name (full name) [Some-State]:ZH Locality Name (eg, city) []:Zürich Organization Name (eg, company) [Internet Widgits Pty Ltd]:Meine Firma GmbH Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:name.myserver.com <-- Wichtig: muss gleich Servername sein! Email Address []:meine@emailadresse.com echo "" >> /etc/mail/certs/mycert.pem cat /etc/mail/certs/cacert.pem >> /etc/mail/certs/mycert.pem

Anschliessend nur noch die Berechtigungen richtig anpassen:

chmod 400 /etc/mail/certs/*

sendmailmake

Dieses kleine hilfreiche Tool hab ich von Steven. Es generiert alle nötigen Sendmail Files aus der MySQL Datenbank heraus.

Mysql Tables erstellen:
# --------------------------------------------------------
#
# Table structure for table `mail_add_cyrus_sasl`
#

CREATE TABLE `mail_add_cyrus_sasl` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(250) NOT NULL default '',
  `password` varchar(250) NOT NULL default '',
  `active` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id_2` (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;

# --------------------------------------------------------

#
# Table structure for table `mail_alias_entries`
#

CREATE TABLE `mail_alias_entries` (
  `id` int(4) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL default '',
  `alias` text NOT NULL,
  `domain` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;

# --------------------------------------------------------

#
# Table structure for table `mail_auto_replys`
#

CREATE TABLE `mail_auto_replys` (
  `id` int(11) NOT NULL auto_increment,
  `user` varchar(50) NOT NULL default '',
  `message` text NOT NULL,
  `active` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id_2` (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;

# --------------------------------------------------------

#
# Table structure for table `mail_domain_forwarding`
#

CREATE TABLE `mail_domain_forwarding` (
  `id` int(11) NOT NULL auto_increment,
  `source_domain` varchar(50) NOT NULL default '',
  `destination_domain` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id_2` (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;

# --------------------------------------------------------

#
# Table structure for table `mail_entries`
#

CREATE TABLE IF NOT EXISTS `mail_entries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`comment` text NOT NULL,
`username` varchar(50) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
`domain` varchar(50) NOT NULL DEFAULT '',
`alias` varchar(50) NOT NULL DEFAULT '',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
`is_mainaccount` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`,`is_mainaccount`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1; # -------------------------------------------------------- # # Table structure for table `mail_mx_entries` # CREATE TABLE `mail_mx_entries` ( `id` int(11) NOT NULL auto_increment, `domain` varchar(150) NOT NULL default '', UNIQUE KEY `domain` (`domain`), UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='MX Eintr?ge'; # -------------------------------------------------------- # # Table structure for table `nonexisting_email` # CREATE TABLE `nonexisting_email` ( `id` int(11) NOT NULL auto_increment, `nonexist` varchar(250) NOT NULL default '', `message` varchar(250) NOT NULL default 'error:nouser No such User here!', UNIQUE KEY `id` (`id`), KEY `nonexist` (`nonexist`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Installation

sendmail-build-autoresponder.tar.gz downloaden und installieren:

cd /usr/local/software
fetch http://www.teslina.com/wp-content/uploads/2012/03/sendmail-build-autoresponder.tar.gz
tar xzfv sendmail-build-autoresponder.tar.gz
Konfiguration

DB username/passwd etc. anpassen:

cd sendmail-build-autoresponder-new
vi header.h

nun das Sendmailmake generieren und ins /etc/mail/bin Verzeichnis kopieren:

make # <- warnings einfach ignorieren
cp sendmailmake /etc/mail/bin/

jetzt noch das sendmailmake ausführen

/etc/mail/bin/sendmailmake

Starten/Testen

Alias im .bashrc hinzufügen:

cd
vi .bashrc 
alias rcsendmail='/etc/rc.d/sendmail'

Starte Cyrus

/usr/local/etc/rc.d/imapd start

Starte Sendmail

rcsendmail start

Testen

# telnet localhost imap

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5 SASL-IR COMPRESS=DEFLATE]
my.testserver.ch Cyrus IMAP v2.3.16 server ready . login <mail username> <mail password> . OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED COMPRESS=DEFLATE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE SCAN IDLE URLAUTH] User logged in

um telnet zu verlassen:

. logout
# telnet localhost 110

Trying 127.0.0.1...
Connected to localhost. Escape character is '^]'. +OK my.testserver.ch Cyrus POP3 v2.3.16 server ready <4056458412.1126900089@my.testserver.ch> user <mail username> +OK Name is a valid mailbox pass <mail pass> +OK Mailbox locked and ready stat +OK 47 2630366 quit +OK Connection closed by foreign host.

Mail über Remote Server senden

Um zu testen, ob ich von einem entfernten Server über den soeben konfigurierten Sendmail Server Mails versenden kann, nutzt man am einfachsten mailx.

Achtung: das auf FreeBSD vorinstallierte mailx kann nicht verwendet werden:

mailx -V
mailx: illegal option -- V
Usage: mailx [-dEiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ...
[-sendmail-option ...]
mailx [-dEHiInNv] [-F] -f [name]
mailx [-dEHiInNv] [-F] [-u user]
mailx [-d] -e [-f name]

Daher am Besten kurz heirloom-mailx installieren:

pkg install heirloom-mailx

nun klappts:

/usr/local/bin/mailx -V
12.4 7/29/08

Und das Testmail kann verschickt werden:

echo "Das ist eine Testnachricht" | /usr/local/bin/mailx -v 
-r "absender@test.com"
-s "Testmail"
-S smtp="mail.example.com:587"
-S smtp-use-starttls
-S ssl-verify=ignore
empfaenger@adresse.com

 

Probleme & Fehlermeldungen

Cyrus

badlogin: localhost [::1] LOGIN [SASL(-13): user not found: checkpass failed]

Nach grossem Portupgrade ( pkg-static upgrade -f ) kann man sich per IMAP nicht mehr einloggen.

# cyradm localhost -u admin
# testsaslauthd -u <user> -p <password>
0: NO "authentication failed"

Die Fehlermeldungen sehen so aus:

# tail -f /var/log/messages

May  3 18:43:01 corky imap[86844]: badlogin: 123-123-123-123.x.y.ch [123.123.123.123] CRAM-MD5 [SASL(-13): user not found: no user in db]

auth.log:

May  3 19:57:07 corky saslauthd[2193]: do_auth         : auth failure: [user=xyz] [service=imap] [realm=] [mech=pam] [reason=PAM auth error]
May  3 19:57:10 corky sm-mta[2583]: unknown password verifier(s) auxprop
#tail -f auth.log

May  3 18:42:19 corky sm-mta[87735]: unknown password verifier(s) auxprop

*lach* da hab ich schon fast aufgegeben und wollte Dovecot installieren, als ich von Google darauf aufmerksam gemacht wurde, dass ich die Lösung schon vor einem Jahr gefunden habe 😉 Hier der Lösungsweg:

 

DBERROR: critical database situation

Nach einer Reinstallation von Cyrus / bzw. Port-/Serverupgrade gab es viele Fehlermeldungen:

Jul 11 13:04:47 corky lmtpunix[93579]: DBERROR: dbenv->open '/var/imap/db' failed: BDB0091 DB_VERSION_MISMATCH: Database environment version mismatch
Jul 11 13:04:47 corky lmtpunix[93579]: DBERROR: init() on berkeley
Jul 11 13:04:47 corky lmtpunix[93579]: DBERROR db5: BDB0633 DB_AUTO_COMMIT may not be specified in non-transactional environment
Jul 11 13:04:47 corky lmtpunix[93579]: DBERROR: opening /var/imap/deliver.db: Invalid argument
Jul 11 13:04:47 corky lmtpunix[93579]: DBERROR: opening /var/imap/deliver.db: cyrusdb error
Jul 11 13:04:47 corky lmtpunix[93580]: DBERROR db5: BDB1539 Build signature doesn't match environment
Jul 11 13:55:49 corky imap[1073]: DBERROR: critical database situation
Jul 11 13:55:49 corky imap[1074]: DBERROR db5: BDB0060 PANIC: fatal region error detected; run recovery

Lösung:

Ich habe dann von allen DB Files Backups gemacht und gelöscht. Also:

service imapd stop
cd /var/imap/
mkdir backup
cp *.db backup/

Jetzt mal DB neu Builden:

/usr/local/cyrus/bin/ctl_cyrusdb -r

imapd wieder starten und log checken.

service imapd start

Ist der Error noch nicht weg, alle db Files löschen (ist safe!), nochmals rebuilden und dann erneut testen.

rm *.db

Jetzt wäre schonmal dieser Error weg.

Falls nun vorher ein einfaches Rebuilden nicht geklappt hat und wir die *.db Files löschen mussten, ist nun das Problem, dass wir die Users neu erstellen müssen (die Daten Verzeichnisse sind ja noch da unter

/var/spool/imap/user/

Aber die User müssen halt neu in die DB geschrieben werden, sonst heisst es

Mailbox nicht gefunden

Mailboxen wieder erstellen (falls Login mit user admin nicht geht, siehe Lösung weiter unten):

cyradm localhost -u admin

Erstellen mit

cm user.username

Sobald alle erstellt sind, die Mailboxen wieder flicken:

su cyrus
/usr/local/cyrus/bin/reconstruct -r -f user.username

Folders nicht gefunden

Nun, nachdem die Mailboxen erstellt wurden, konnte ich zwar endlich auf die INBOX zugreifen, aber alle anderen Imap Folders waren weg. So hab ich das wieder hingekriegt:

su cyrus
/usr/local/cyrus/bin/ctl_mboxlist -v

Jetzt werden alle Folders aufgelistet, die keinen DB eintrag haben.

'user.ddjdjdj.498' has a directory '/var/spool/imap/L/user/ddjdjdj/498' but no DB entry

Wenn ich jetzt

/usr/local/cyrus/bin/reconstruct -r -f user.username

nochmals laufenlasse (natürlich für jeden einzelnen User, der über ctl_mboxlist aufgelistet wurde) sollte es endgültig wieder laufen 🙂

Falls der Fehler danach weiterhin existiert (war bei mir der Fall)

'user.xyuser.folder1.folder2.folder3' has a directory '/var/spool/imap/user/xyuser/folder1/folder2/folder3' but no DB entry

bin ich so zur Lösung gekommen, dass ich über den Email Client den ersten Folder (in diesem Beispiel den folder1) erstellt habe und danach

/usr/local/cyrus/bin/reconstruct -r -f user.xyuser

nochmals ausgeführt habe. Danach wurden die restlichen fehlenden Mailboxen ebenfalls in die Datenbank zurückgeschrieben.

Crash nachdem Nachrichten in ein Sub-Directory verschoben werden

Nach einem DB Error habe ich die Datenbanken neu gebuildet mit ctl_cyrusdb -r

Es lief dann auch alles wieder normal, aber sobald über den Email Client man eine Nachricht in einen anderen IMAP Folder verschoben hatte, kamen kurz darauf wieder die DBERRORs:

Jul 12 09:00:00 corky master[32801]: service imap pid 72247 in READY state: terminated abnormally
Jul 12 09:00:01 corky pop3[72252]: DBERROR db5: BDB0060 PANIC: fatal region error detected; run recovery
Jul 12 09:00:01 corky imaps[72251]: DBERROR db5: BDB0060 PANIC: fatal region error detected; run recovery
Jul 12 09:00:01 corky imaps[72251]: DBERROR: critical database situation

Die Lösung brachte ctl_mboxlist -v und danach reconstruct -r -f user.username – wie unter „Folders nicht gefunden“ beschrieben.

cyradm localhost -u admin -> Login failed

 cyradm localhost -u admin
Password:
IMAP Password:
Login failed: authentication failure at /usr/local/lib/perl5/site_perl/mach/5.18/Cyrus/IMAP/Admin.pm line 120.
cyradm: cannot authenticate to server with as admin

Mit grösster Wahrscheinlichkeit läuft das Login nicht wegen dem fehlenden Mysql Plugin

Wenn man mysql über auxprop aber nicht auf die Schnelle hinkriegt, kann man temporär Abhilfe schaffen und den User admin kurz so erstellen:

saslpasswd2 admin

So kann man die Admin Arbeiten trotzdem als user admin erledigen, auch wenn die Anbindung an MySQL noch nicht funktioniert.

imap[87354]: IOERROR: opening /var/imap/user_deny.db: No such file or directory

touch /var/imap/user_deny.db
chown cyrus:cyrus /var/imap/user_deny.d

löst das Problem.

SQUAT failed to open index file

Jul 13 11:14:35 corky imap[37158]: SQUAT failed to open index file
Jul 13 11:14:35 corky imap[37158]: SQUAT failed

Das Squat Index File wurde nicht gefunden. Squatter erstellt einen Index aller Nachrichten in einer Mailbox. Wenn man den Index neu buildet, verschwindet die Nachricht:

su cyrus
/usr/local/cyrus/bin/squatter

Das dauert jetzt recht lange, bis alles indexiert ist. Um den Index dauerhaft auf dem neusten Stand zu halten, im cyrus.conf die squatter Lines aktivieren:

EVENTS {
 # this is required
 checkpoint    cmd="ctl_cyrusdb -c" period=30

 # this is only necessary if using duplicate delivery suppression,
 # Sieve or NNTP
 delprune      cmd="cyr_expire -E 3" at=0400

 # this is only necessary if caching TLS sessions
 tlsprune      cmd="tls_prune" at=0400
 # for index searches
 # get rid of "SQUAT failed to open index file" error uncomment this
 # or change to higher debug level in /etc/syslog.conf
 # squatter cmd="squatter -r user" period=1440
 # squatter        cmd="/usr/local/cyrus/bin/squatter -r" at=0401
squatter cmd="squatter -r" period=1440 }

-r steht für rekursiv (alle Subfolders).
period=1440 bedeutet, dass der Befehl alle 1440 Minuten ausgeführt werden soll (=alle 24 Stunden).

und Service neu starten

service imapd restart

Sendmail

sendmail[24971]: gethostbyaddr(IPv6:xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx) failed: 1

Der Fehler kam bei mir, als ich den Versand zu Gmail testete:

sendmail -v -Am -i testadresse@gmail.com

dann im maillog:

Sep 14 14:12:45 corky sendmail[38838]: gethostbyaddr(IPv6:xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx) failed: 1

Lösung:

IPv6 Adresse im /etc/hosts File eintragen:

::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx localhost localhost.my.domain

Nun ist der Fehler weg.

IPv6 Versand in Sendmail deaktivieren (Gmail Problem)

Gmail verweigert die Mails, wenn der PTR Record fehlt. Den IPv6 SPF Record habe ich bereits hinzugefügt, doch dies löst das Problem mit Google nicht, da explizit der PTR Record gefordert wird. Dummerweise kann ich für unsere Adressen (noch) keine IPv6 PTR Records erstellen lassen, da dies von unserem Hosting Provider noch nicht unterstützt wird. Daher muss man den IPv6 Versand über Sendmail deaktivieren.

Folgendes Problem:

echo "Subject: test" | sendmail -v -Am -i testmail@gmail.com 

Bedeutung der Flags:

 -Am Use sendmail.cf even if the operation mode indicates an initial
mail submission.
-i Do not strip a leading dot from lines in incoming messages, and
do not treat a dot on a line by itself as the end of an incoming
message. This should be set if you are reading data from a
file.
-v Go into verbose mode. Alias expansions will be announced, etc.

Output

testmail@gmail.com... Connecting to gmail-smtp-in.l.google.com. via esmtp...
220 mx.google.com ESMTP x132-v6si1486162wmb.122 - gsmtp
>>> EHLO name.testserver.com
250-mx.google.com at your service, [xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO name.testserver.com
250-mx.google.com at your service, [xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx]
250-SIZE 157286400
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> MAIL From:<teslina@name.testserver.com> SIZE=14
250 2.1.0 OK x132-v6si1486162wmb.122 - gsmtp
>>> RCPT To:<testmail@gmail.com>
>>> DATA
250 2.1.5 OK x132-v6si1486162wmb.122 - gsmtp
354 Go ahead x132-v6si1486162wmb.122 - gsmtp
>>> .
550-5.7.1 [xxxx:xxxx:x:xx:xxxx:xxxx:xxxx:xxxx] Our system has detected that this
550-5.7.1 message does not meet IPv6 sending guidelines regarding PTR records
550-5.7.1 and authentication. Please review
550-5.7.1 https://support.google.com/mail/?p=IPv6AuthError for more information
550 5.7.1 . x132-v6si1486162wmb.122 - gsmtp
sunci... Connecting to /var/run/dovecot/lmtp via local...
220 name.testserver.com Dovecot ready.
>>> LHLO name.testserver.com
250-name.testserver.com
250-8BITMIME
250-CHUNKING
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-STARTTLS
250 VRFY
>>> STARTTLS
220 2.0.0 Begin TLS negotiation now.
>>> LHLO name.testserver.com
250-name.testserver.com
250-8BITMIME
250-CHUNKING
250-ENHANCEDSTATUSCODES
250-PIPELINING
250 VRFY
>>> MAIL From:<>
250 2.1.0 OK
>>> RCPT To:<teslina>
>>> DATA
250 2.1.5 OK
354 OK
>>> .
250 2.0.0 <teslina> oNBrD/mnm1trngAAB3XiVw Saved
teslina... Sent
Closing connection to localhost
>>> QUIT
221 2.0.0 Bye
Closing connection to gmail-smtp-in.l.google.com.
>>> QUIT

Lösung:

Im sendmail.mc folgende Zeilen unterhalb DAEMON_OPTIONS einfügen:

dnl ### Daemon Options
DAEMON_OPTIONS(`Port=smtp, Name=MTA')
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')
DAEMON_OPTIONS(`Family=inet, Port=smtps, Name=MTA-SSL, M=s')
dnl ## disable ipv6:
CLIENT_OPTIONS(`Family=inet6, Address=::1')dnl
CLIENT_OPTIONS(`Family=inet, Address=0.0.0.0')dnl

Jetzt sendmail Files rebuilden und sendmail neu starten.

Jetzt sollte es funktionieren!

root@testserver(/etc/mail)> echo "Subject: test" | sendmail -v -Am -i testmail@gmail.com
testmail@gmail.com... Connecting to gmail-smtp-in.l.google.com. via esmtp...
220 mx.google.com ESMTP a21-v6si6414675edc.228 - gsmtp
>>> EHLO name.testserver.com
250-mx.google.com at your service, [xxx.xx.xx.xx]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO name.testserver.com
250-mx.google.com at your service, [xxx.xx.xx.xx]
250-SIZE 157286400
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> MAIL From:<teslina@name.testserver.com> SIZE=14
250 2.1.0 OK a21-v6si6414675edc.228 - gsmtp
>>> RCPT To:<testmail@gmail.com>
>>> DATA
250 2.1.5 OK a21-v6si6414675edc.228 - gsmtp
354 Go ahead a21-v6si6414675edc.228 - gsmtp
>>> .
250 2.0.0 OK 1536931108 a21-v6si6414675edc.228 - gsmtp
testmail@gmail.com... Sent (OK 1536931108 a21-v6si6414675edc.228 - gsmtp)
Closing connection to gmail-smtp-in.l.google.com.
>>> QUIT
221 2.0.0 closing connection a21-v6si6414675edc.228 - gsmtp

 

.

Cyrus Admin Scripts

Leider ist es bei cyrus schon öfters passiert, dass ich alles neu builden musste. Daher habe ich hier ein paar Scripts geschrieben, die das ganze etwas einfacher machen. Grundsätzlich wird einfach alles durchlaufen, was in den oben genannten Fehlermeldungen zur Behebung beschrieben wird.

Damit die Scripts funktionieren, muss expect vorhanden sein.

pkg install expect
mkdir ~/cyrus
cd ~/cyrus

Hauptscript, welches die komplette Recovery durchführt, inkl. Backup:

Scripts

START_RECOVERY.sh 

vi START_RECOVERY.sh 

paste:

#!/usr/local/bin/bash
source ./config.cfg

DATE=`date +"%Y%m%d-%H%M"`
BACKUPDIR=$IMAP_DIR/backup.$DATE/

echo "Stopping imapd..."
$IMAPD_STARTUP stop

echo "Backing up old data to $BACKUPDIR ..."
mkdir $BACKUPDIR
mv $IMAP_DIR/*.db $BACKUPDIR

echo "Re-Build Database..."
su -m cyrus -c "$CYRUS_BIN_DIR/ctl_cyrusdb -r"

touch $IMAP_DIR/user_deny.db
chown cyrus:cyrus $IMAP_DIR/user_deny.db


echo "Starting imapd..."
$IMAPD_STARTUP start

# fuer cyradm muss imapd gestartet sein
echo "Recreating Mailboxes by cyradm..."
./recreate.mailboxes.sh

echo "Reconstructing Mailboxes..."
./reconstruct.mailboxes.sh


printf "nn---------- RECONSTRUCTION DONE! ------------nn"

echo "Checking for missing DB Entries..."
su -m cyrus -c "$CYRUS_BIN_DIR/ctl_mboxlist -v"

printf "nnFalls hier Fehler ausgegeben wurden, hier findest du den Loesungsweg: https://www.teslina.com/tutorials/freebsd/installation-software/installation-sendmail-cyrus-imap/#Folders_nicht_gefundennn"

config.cfg

Das Config File dazu:

vi config.cfg

Paste:

IMAPD_STARTUP="/usr/local/etc/rc.d/imapd"
IMAP_DIR="/var/imap"
CYRUS_BIN_DIR="/usr/local/cyrus/bin"
POP_DIR="/var/spool/imap/user"
CYR_PW="YOUR_CYRADM_PASSWORD"

cyradm.createbulkusers.exp

Dieses Script wird von recreate.mailboxes.sh aufgerufen. Es connected zu cyradm und führt die gewünschten Befehle aus.

Bitte beachte, dass dafür expect installiert sein muss.

vi cyradm.createbulkusers.exp
#!/usr/local/bin/expect -f
#
# usage: cyrus.createbulkusers.exp COMMANDS
#
set commands [lindex $argv 0]
#
#
spawn /usr/local/bin/cyradm -u admin localhost
expect "assword:"
expect_user -re "(.*)n"
set mypw $expect_out(1,string)
send "$mypwr"
expect "host>"
#
send "$commandsr"
expect "host>"
#
send "exitr"
expect eof
#

cyradm.createuser.exp

Dies ist einfach ein Helperscript (gehört nicht zum Rebuild), welches eine Mailbox erstellt. Aufruf:

cyradm.createuser.exp USERNAME

vi cyradm.createuser.exp

Paste:

#!/usr/local/bin/expect -f
#
# usage: cyradm.createuser.exp USERNAME
#
set user [lindex $argv 0]
#
#
spawn /usr/local/bin/cyradm -u admin localhost
expect "assword:"
expect_user -re "(.*)n"
set mypw $expect_out(1,string)
send "$mypwr"
expect "host>"
#
send "cm user.$user r"
expect "host>"
#
send "exitr"
expect eof
#

reconstruct.mailboxes.sh

Rekonstruiert alle Mailboxen, für die ein Verzeichnis auf dem Server existiert. Dieses Script wird über START_RECOVERY.sh aufgerufen – es kann bei Bedarf aber auch standalone aufgerufen werden.

vi reconstruct.mailboxes.sh

Paste:

#!/usr/local/bin/bash
source ./config.cfg

USERS=`cd $POP_DIR; ls -d *`

echo "Stopping imapd..."
$IMAPD_STARTUP stop


for USER in $USERS; do

echo "Reconstructing Mailbox for $USER ..."

su -m cyrus -c "$CYRUS_BIN_DIR/reconstruct -r -f user.$USER"

done

echo "Starting imapd..."
$IMAPD_STARTUP start

recreate.mailboxes.sh

Hier werden die vorhandenen Mailboxen aufgelistet und an cyradm übergeben per cyradm.createbulkusers.exp. Dieses Script wird über START_RECOVERY.sh aufgerufen – es kann bei Bedarf aber auch standalone aufgerufen werden.

vi recreate.mailboxes.sh

Paste:

#!/usr/local/bin/bash
source ./config.cfg

USERS=`cd $POP_DIR; ls -d *`

echo "Stopping imapd..."
$IMAPD_STARTUP stop


for USER in $USERS; do

echo "Reconstructing Mailbox for $USER ..."

su -m cyrus -c "$CYRUS_BIN_DIR/reconstruct -r -f user.$USER"

done

echo "Starting imapd..."
$IMAPD_STARTUP start


root@corky(~/cyrus)> cat recreate.mailboxes.sh
#!/usr/local/bin/bash
# fuer cyradm muss imapd gestartet sein
source ./config.cfg

USERS=`cd $POP_DIR; ls -d *`

for USER in $USERS; do

echo "Creating Mailbox for $USER"

#echo "cm user.$USER"

# unsafe, ich will pw nicht sichtbar uebergeben
cyradm -u admin -w $CYR_PW localhost << CYRADMSCRIPT
cm user.$USER
CYRADMSCRIPT

#COMMANDS+="cm user.$USER r"

done


# prompt for login and execute bulk commands
#./cyradm.createbulkusers.exp $COMMANDS

Berechtigungen setzen

chmod 775 *.sh
chmod 775 *.exp

Usage

Nachdem das Config File angepasst wurde (bei Bedarf auch die *.exp Scripts wegen dem Pfad zu den Cyrus Binaries), können mit

./START_RECOVERY.sh

alle Mailboxen neu erstellt werden.

Beachte: Da die DB Files bei diesem Prozess gelöscht werden, erscheinen nachher in den Email Programmen alle Nachrichten als ungelesen. Ansonsten sollte alles so funktionieren wie gewünscht.

Den Script

./cyradm.createuser.exp meinusername

kann man ausführen, um eine neue Mailbox zu erstellen

 

 

.

  • Hallo
    #1 geschrieben von Hallo vor 11 Jahren

    Manche Deiner Anleitungen sind ja ganz nett. Aber diese hier kann man echt überhaupt nicht gebrauchen. Einige Sachen fehlen, andere Sachen sind falsch und wieder andere Sachen sind vollkommen unnötig.

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben