# Mail-User importieren?



## Daniel26 (18. Juni 2015)

Hallo,

ich würde gerne die User unseres Systems importieren.
Alle User stecken im LDAP. Ich hab mir also ein Script gebaut, das mir die User aus dem LDAP zieht und eine SQL-Datei bastelt.
Diese würde ich dann gern per mysql impotieren. 

Momentan machen mir nur die mail_userid, sys_userid und sys_groupid sorgen. Die werden ja immer hochgezählt. Für die mail_userid der impotierten User hätte ich deren UID unsers Systems genommen.

Es kann passieren das im ISPconfig auch User von Hand angelegt werden. Kann ich ISPconfig irgendwo konfigurieren das es bei Neuanlagen eien ID größer z.B. 10000 nimmt um Überschneidungen auszuschließen?

Gruß

Daniel


----------



## wotan2005 (18. Juni 2015)

schau dir mal die API von ISPConfig an, damit würde sich das sehr gut machen lassen.


----------



## Daniel26 (18. Juni 2015)

Was ngenau würde sich damit machen lassen? Das Importieren?


----------



## wotan2005 (18. Juni 2015)

das richtige angelegen der Mail-Account unter den richtigen IDs. Damit musst dann nicht umbiegen.


----------



## Daniel26 (18. Juni 2015)

Und wie und wo? Gibts da eine Doku dazu?

Btw: Ich bin Sysadmin, kein Programmierer


----------



## florian030 (18. Juni 2015)

Ich würde die Daten nicht direkt in mysql importieren, sondern dafür auch die API nehmen. Schau mal im Archiv ins Verzeichnis remoting_client


----------



## Daniel26 (18. Juni 2015)

Hmm, hab mir mal das Mail_user_add.php angeschaut..geht schon in die richtige Richtigung. Wenn ich das richtig verstehe müsste ich einfach für jeden Eintrag die PHP-Datei mit den Optionen rufen, richtig? GEht das nur über den Browser oder auch von der Shell?

Parameter sind u.a. client_id und session_id...wo krieg ich die her?

Danke schonmal

Gruß

Daniel


----------



## florian030 (18. Juni 2015)

Die remoteAPI geht über die Shell. Die Client-ID findest Du in der Datenbank zu dem jeweiligen Kunden. Eine Session-ID brauchst Du nicht. Im Prinzip musst Du aus dem Beispiel nur $params anpassen.


----------



## Daniel26 (18. Juni 2015)

Kunden habe ich keinen Angelegt. Ich habe jetzt nur mal einen "Entfernetn Benutzer" angelegt, Dessen ID ist dann die Client_id? In welchem Format müssen die Parameter angegeben werden?


----------



## florian030 (18. Juni 2015)

Nein, der ist der Nutzer, mit dem Du dich über die API anmelden kannst. Wenn die Emails unter admin läufen sollen, dann die client_id 0.


----------



## Daniel26 (19. Juni 2015)

Danke, importuieren kann ich nun über die Api. Aber wie soll das Updaten ablaufen? mail_user_update will die mailuser_id, die weiß ich nicht. Eine Möglichkeit die mailuser_id über einen Login o.ä. über die API rauszukriegen gibts nicht?

Gruß

Daniel


----------



## Till (19. Juni 2015)

Zitat von Daniel26:


> Eine Möglichkeit die mailuser_id über einen Login o.ä. über die API rauszukriegen gibts nicht?


Doch, das geht. über die *_get funktionen, denn Du kannst an die Funktionen als ID auch ein array übergeben mit dem wert, nach dem gesucht werden soll, also z.B.

array ('email' => 'ich@domain.tld')


----------



## Daniel26 (22. Juni 2015)

KAnnich beim Update nur Werte angeben die sich unterscheiden oder auch welche, die sich eigentlich nicht geändert haben?
SOnst muss ich beim Ubergeben der Daten an die Api zuerst selbst nachschauen obs sich was geändert hat und nur die Daten der Api übergeben, sonst hätte ich einfach den ganzen Datensatz wie beim Import angegeben.


----------



## Till (22. Juni 2015)

Zitat von Daniel26:


> KAnnich beim Update nur Werte angeben die sich unterscheiden oder auch welche, die sich eigentlich nicht geändert haben?


Du kannst alle werte angeben, also nicht nur die geänderten.


----------



## Daniel26 (22. Juni 2015)

```
<?php

require 'soap_config.php';


$client = new SoapClient(null, array('location' => $soap_location,
                'uri'      => $soap_uri,
                'trace' => 1,
                'exceptions' => 1));



        try {
                if($session_id = $client->login($username, $password)) {
                        echo 'Logged successfull. Session ID:'.$session_id.'<br />';
                }
                //* Set the function parameters.
                $client_id = 0;
                $mailuser_id = 1;
                $params = array(
                        'server_id' => 1,
                       'email' => 'xxx@xxx',          
                        'name' => 'hurz-test'
               );

                $affected_rows = $client->mail_user_update($session_id, $client_id, $mailuser_id, $params);

               

                 //if($client->logout($session_id)) {
                  //echo 'Logged out.<br />';
                //}
        } catch (SoapFault $e) {
        echo $client->__getLastResponse();
        die('SOAP Error: '.$e->getMessage());
        }


?>
```

Eigentlich müsste ja obiges Konstrukt funktionieren, oder? Ich kriege aber nur als faultcode "data_processing_error" und als faultstring "login_error_regex"
Die soap_config.php tut aber beim importieren, nur beim Updaten nicht.

Gruß

Daniel


----------



## Till (22. Juni 2015)

Hast Du bei Dir in ISPConfig die optionalen login usernamen für mailuser aktiviert?


----------



## Daniel26 (22. Juni 2015)

Nicht das ich wüsste....


----------



## Daniel26 (23. Juni 2015)

Neuer Versuch, das ganze etwas abgewandelt:


```
<?php

require 'soap_config.php';


$client = new SoapClient(null, array('location' => $soap_location,
                'uri'      => $soap_uri,
                'trace' => 1,
                'exceptions' => 1));

        try {
                if($session_id = $client->login($username, $password)) {
                        echo 'Logged successfull. Session ID:'.$session_id.'<br />';
                }
                $username = 'yy@xxx';
                $mailrecord_old = $client->mail_user_get($session_id, array('email' => $username));
                $primary_id = $mailrecord_old[0]['mailuser_id'];
                $sys_userid = $mailrecord_old[0]['sys_userid'];
                $client_id = $client->client_get_id($session_id, $sys_userid);
                echo "\nmailuser_id wurde ermittelt: ".$primary_id." !!!!\n";
                echo "\nsys_userid wurde ermittelt: ".$sys_userid." !!!!\n";
                echo "\nclient_id wurde ermittelt: ".$client_id." !!!!\n";
                echo "\n alle Parameter: !!!!\n";
                print_r(array_values($mailrecord_old));
                $mailrecord_new = $mailrecord_old;
                $mailrecord_new[0]['name'] = 'hurz-test';

                $client->mail_user_update($session_id, $client_id, $primary_id, $mailrecord_new[0]);

                print_r(array_values($mailrecord_new));
        } catch (SoapFault $e) {
        echo $client->__getLastResponse();
        echo "\n\n\n";
        //die('SOAP Error: '.$e->getMessage());
        }

?>
```
Nach dem Ausführen krieg ich das:


```
Logged successfull. Session ID:09b58be01cb93ecf6e61005e4098cac5<br />
mailuser_id wurde ermittelt: 1 !!!!

sys_userid wurde ermittelt: 1 !!!!

client_id wurde ermittelt: 0 !!!!

alle Parameter: !!!!
Array
(
    [0] => Array
        (
            [mailuser_id] => 1
            [sys_userid] => 1
            [sys_groupid] => 0
            [sys_perm_user] => riud
            [sys_perm_group] => riud
            [sys_perm_other] =>
            [server_id] => 1
            [email] => yy@xxx
            [login] => yy@xxx
            [password] => $1$+IepnJYl$p2dsffwewet/Ms0G1
            [name] => Spanni
            [uid] => 5000
            [gid] => 5000
            [maildir] => /var/vmail/xxx/yy
            [quota] => 0
            [cc] =>
            [homedir] => /var/vmail
            [autoresponder] => n
            [autoresponder_start_date] => 0000-00-00 00:00:00
            [autoresponder_end_date] => 0000-00-00 00:00:00
            [autoresponder_subject] => Out of office reply
            [autoresponder_text] =>
            [move_junk] => n
            [custom_mailfilter] =>
            [postfix] => y
            [access] => y
            [disableimap] => n
            [disablepop3] => n
            [disabledeliver] => n
            [disablesmtp] => n
            [disablesieve] => n
            [disablesieve-filter] => n
            [disablelda] => n
            [disablelmtp] => n
            [disabledoveadm] => n
            [last_quota_notification] =>
            [backup_interval] => none
            [backup_copies] => 1
        )

)
#0  db->query(UPDATE `mail_user` SET `server_id` = '1', `email` = 'yy@xxx, `login` = 'yy@xxx', `password` = '$1$RM+VcYul$DSZQ5qU3mqsdafsdafsdafLnxa4W1', `name` = 'hurz-test', `quota` = '0', `cc` = '', `maildir` = '/var/vmail/xxx/yy', `homedir` = '/var/vmail', `uid` = '5000', `gid` = '5000', `postfix` = 'y', `disablesmtp` = 'n', `disableimap` = 'n', `disablepop3` = 'n', `autoresponder_subject` = 'Out of office reply', `autoresponder_text` = '', `autoresponder` = 'n', `autoresponder_start_date` = '', `autoresponder_end_date` = '', `move_junk` = 'n', `custom_mailfilter` = '' WHERE mailuser_id = 1) called at [/usr/local/ispconfig/interface/lib/classes/remoting.inc.php:3368]
#1  remoting->updateQueryExecute(UPDATE `mail_user` SET `server_id` = '1', `email` = 'yy@xxx', `login` = 'yy@xxx', `password` = '$1$RM+VcYul$DSZQ5qU3mq6yb5aLnxa4W1', `name` = 'hurz-test', `quota` = '0', `cc` = '', `maildir` = '/var

SOAP Error: looks like we got no XML document
```
Mach ich denn da irgendwas falsch? Verstehe ich die DOku nicht richtig?

Gruß

Spanni


Edit: Es kommt am Schluss noch die Meldung "SOAP Error: looks like we got no XML document"
LEider nix im Apache-Log


----------



## Daniel26 (1. Juli 2015)

Keiner ne Idee wie ich das Debuggen könnte?


----------



## Till (1. Juli 2015)

Welchen Fehler erhältst Du denn wenn du folgende sql query mit phpmadmin ausführst:

UPDATE `mail_user` SET `server_id` = '1', `email` = 'yy@xxx, `login` = 'yy@xxx', `password` = '$1$RM+VcYul$DSZQ5qU3mqsdafsdafsdafLnxa4W1', `name` = 'hurz-test', `quota` = '0', `cc` = '', `maildir` = '/var/vmail/xxx/yy', `homedir` = '/var/vmail', `uid` = '5000', `gid` = '5000', `postfix` = 'y', `disablesmtp` = 'n', `disableimap` = 'n', `disablepop3` = 'n', `autoresponder_subject` = 'Out of office reply', `autoresponder_text` = '', `autoresponder` = 'n', `autoresponder_start_date` = '', `autoresponder_end_date` = '', `move_junk` = 'n', `custom_mailfilter` = '' WHERE mailuser_id = 1


----------



## Daniel26 (1. Juli 2015)

#1292 - Incorrect datetime value: '' for column 'autoresponder_start_date' at row 1 

Hab jetzt auch versuchtd as ganze vor dem Import nochmal zu setzen:

```
$mailrecord_new[0]['autoresponder_start_date'] = '2015-06-20 00:00:00';

  $mailrecord_new[0]['autoresponder_end_date'] = '2015-06-22 00:00:00';

  $client->mail_user_update($session_id, $client_id, $primary_id, $mailrecord_new[0]);
```
Will aber auch nicht....


----------



## Daniel26 (1. Juli 2015)

Es lag wirklich an den Zeiten für den Autoresponder. Ich kann den aber nicht als String übergeben sondern muss ein Array draus bauen....
Wenn ich den nicht ändern will? Muss ich zuerst mit mail_user_get zuerst die Werte auslesen, dann in ein Array zerlegen und wieder per mail_user_update updaten? Sehe ich das richtig?

DAnke schonmal für den Tipp.


----------



## Till (1. Juli 2015)

versuch mal die autoresponder daten aus dem array mittels unset() zu löschen.


----------



## Daniel26 (2. Juli 2015)

Habs mit unset geleert....dann krieg ich wieder den Fehler.
Gruß

Daniel


----------



## Daniel26 (3. Juli 2015)

Ich krieg auch nen sql-Fehler wenn ich den Autoresponder über das ISP-Config selbst setzen will..... Bug?


```
#0 db->query(UPDATE `mail_user` SET `autoresponder_subject` = 'Out of office reply', `autoresponder_text` = '', `autoresponder` = 'n', `autoresponder_start_date` = '', `autoresponder_end_date` = '' WHERE 1 AND mailuser_id = 1) called at [/usr/local/ispconfig/interface/lib/classes/tform_actions.inc.php:177] #1 tform_actions->onUpdateSave(UPDATE `mail_user` SET `autoresponder_subject` = 'Out of office reply', `autoresponder_text` = '', `autoresponder` = 'n', `autoresponder_start_date` = '', `autoresponder_end_date` = '' WHERE 1 AND mailuser_id = 1) called at [/usr/local/ispconfig/interface/lib/classes/tform_actions.inc.php:117] #2 tform_actions->onUpdate() called at [/usr/local/ispconfig/interface/lib/classes/tform_actions.inc.php:94] #3 tform_actions->onSubmit() called at [/usr/local/ispconfig/interface/web/mail/mail_user_edit.php:230] #4 page_action->onSubmit() called at [/usr/local/ispconfig/interface/lib/classes/tform_actions.inc.php:68] #5 tform_actions->onLoad() called at [/usr/local/ispconfig/interface/web/mail/mail_user_edit.php:328] Incorrect datetime value: '' for column 'autoresponder_start_date' at row 1
```


----------



## Till (3. Juli 2015)

Das ist kein Bug sondern ein Installationsfehler Deines Servers. Du verwendest Mariadb oder MySQL 5.6 und hast vergessen den korrekten SQL Mode einzustellen. In der MySQL my.cnf datei muss drin stehen:

sql_mode=NO_ENGINE_SUBSTITUTION

wie in der perfect Server Tutorials die MariaDB verwenden beschrieben ist.


----------



## Daniel26 (3. Juli 2015)

Fu......
In /etc/my.cnf hab ichs gemacht, in /usr/my.cnf war ganz unten noch ne Zeile, die nicht geändert war (wobei ich mir auch da sicher bin die Datei nach der Zeile dursucht zu haben.......)
Das ist dann wohl auch die Ursache für den Soap-Fehler.


jup...Soap-Fehler auch weg. 
Vielen Dank für die Geduld


----------



## Daniel26 (6. Juli 2015)

Hallo,

stolpere gerade über ein weiteres Problem: 
Ich habe jetzt eine Datei mit allen Usern die ich importieren will. Ein Mailuser wird importiert,
bei den anderen kriege ich einen Server-Fehler, das Log sagt:

[Mon Jul 06 15:00:22.965915 2015] [fcgid:warn] [pid 21289] (104)Connection reset by peer: [client 80.146.255.42:34218] mod_fcgid: error reading data from FastCGI server
[Mon Jul 06 15:00:22.966013 2015] [core:error] [pid 21289] [client 80.146.255.42:34218] End of script output before headers: index.php

Momentan keine Idee woher es kommt....

Gruß

Daniel


----------



## nowayback (6. Juli 2015)

stell mal deinen editor auf utf8 codierung um, entferne leerzeilen vor <? und nach ?>


----------



## Daniel26 (7. Juli 2015)

gemacht, keine Besserung. Glaube auch nicht an einen Fehler im php-script, beim zweiten Anlauf gehts ja....


----------

