Mail-User importieren?

Daniel26

New Member
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
 

florian030

Well-Known Member
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

New Member
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

Well-Known Member
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

New Member
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

Well-Known Member
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

New Member
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
 

Daniel26

New Member
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.
 

Daniel26

New Member
PHP:
<?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
 

Daniel26

New Member
Neuer Versuch, das ganze etwas abgewandelt:

PHP:
<?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:

Code:
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
 
Zuletzt bearbeitet:

Till

Administrator
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
 

Werbung

Top