Foros del Web » Programando para Internet » PHP »

[APORTE] Crear cuentas de emails con la "API de PLESK"

Estas en el tema de [APORTE] Crear cuentas de emails con la "API de PLESK" en el foro de PHP en Foros del Web. Hola amigos, ya que yo no encontre la solucion y tuve que pagar por dicho servicio, expongo aqui el codigo que hace que puedas crear ...
  #1 (permalink)  
Antiguo 18/03/2010, 05:45
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
[APORTE] Crear cuentas de emails con la "API de PLESK"

Hola amigos, ya que yo no encontre la solucion y tuve que pagar por dicho servicio, expongo aqui el codigo que hace que puedas crear cuentas de emails directamente desde una web sin necesidad de tener que entrar a plesk.

¿Para que te puede servir este codigo? Pues para lo que tu desees, yo por ejemplo lo uso para dar opcion a cada usuario de mi web a poder crearse una cuenta de email con mi dominio tipo: [email protected] y asi es un servicio mas que podemos ofrecer a nuestros usuarios ;).

Bueno aqui pongo el codigo:

Son dos archivos:

1º - client.php:

Código PHP:
<table>
     <?php
if ($_SERVER['REQUEST_METHOD']=="POST")
{
    include_once 
'class.plesk.php';
    
$plesk=new Plesk("https://tudominio.es:8443/enterprise/control/agent.php","usuario de plesk","contraseña"); /* Aqui tienes que indicar el dominio en el que se crearan las cuentas de email, tambien teneis que indicar el usuario de plesk y la contraseña*/
    
$result=$plesk->add_email(2,$_POST['username'],$_POST['password']);
    echo 
"<tr><td colspan=\"2\" align=\"center\">".$result['message']."</td></tr><tr><td>&nbsp;</td></tr>"/*Esta linea es la que muestra el resultado de la operacion*/
}
?>

<form method="POST">
<tr>
    <td width="195" align="right">Email:</td>
    <td width="321"><input type="text" name="username">
      <strong>@tudominio.es</strong></td>
</tr>
<tr>
    <td align="right">Contraseña:</td><td><input type="password" name="password"></td>
</tr>
<tr>
    <td colspan="2" align="center"><input type="submit" value="Crear Email"></td>
</tr>
</form>
</table>
2º - Es la clase: class.plesk.php:

Código PHP:
<?php
error_reporting 
E_ALL );
ini_set 'display_errors');
ini_set 'max_execution_time'300 );
class 
Plesk {
    public 
$hostname;
    public 
$username;
    public 
$password;
    public 
$port;
    public function 
__construct($hostname ''$username ''$password '') {
        
$this->hostname $hostname;
        
$this->username $username;
        
$this->password $password;
    }
    public function 
add_email($domain_id$username$password,$quota=500) {
        
$quota=$quota*1024*1024;
        
$packet "<packet version='1.4.2.0'>
            <mail>
            <create>
               <filter>
                  <domain_id>{$domain_id}</domain_id>
                  <mailname>
                      <name>{$username}</name>
                      <mailbox>
                          <enabled>true</enabled>
                          <quota>{$quota}</quota>
                      </mailbox>
                      <password>{$password}</password>
                      <password_type>plain</password_type>
                      <permissions>
                          <cp_access>true</cp_access>
                      </permissions>
                  </mailname>
               </filter>
            </create>
            </mail>
            </packet>"
;
        
$result=$this->send $packet );
        
//print_r($result);
        
$result1=@$result[0]['elements'][0]['elements'];
        if(@
$result1[0]['text']=="error")
        {
            return array(
"status"=>"error","error_code"=>$result1[1]['text'],"message"=>$result1[2]['text']);
        }
        elseif (@
$result[0]['elements'][0]['elements'][0]['elements'][0]['elements'][0]['text']=="error")
        {
            return array(
"status"=>"error",'error_code'=>$result[0]['elements'][0]['elements'][0]['elements'][0]['elements'][1]['text'],'message'=>$result[0]['elements'][0]['elements'][0]['elements'][0]['elements'][2]['text']);
        }
        else
        {
            return array(
"status"=>"ok","message"=>"created");
        }
    }
    public function 
send($packet '') {
        
$headers = array ('HTTP_AUTH_LOGIN: ' $this->username'HTTP_AUTH_PASSWD: ' $this->password'Content-Type: text/xml' );
        
$ch curl_init ();
        
curl_setopt $chCURLOPT_SSL_VERIFYHOST);
        
curl_setopt $chCURLOPT_SSL_VERIFYPEERfalse );
        
curl_setopt $chCURLOPT_HTTPHEADER$headers );
        
curl_setopt $chCURLOPT_URL$this->hostname );
        
curl_setopt $chCURLOPT_RETURNTRANSFERtrue );
        
curl_setopt $chCURLOPT_POSTFIELDS$packet );
        
$retval curl_exec $ch );
        
curl_close $ch );
        return 
$this->xml2array($retval);
    }
    public function 
xml2array($xml) {
        
$xmlary = array ();
        
$reels '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
        
$reattrs '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';
        
preg_match_all $reels$xml$elements );
        
        foreach ( 
$elements [1] as $ie => $xx ) {
            
$xmlary [$ie] ["name"] = $elements [1] [$ie];
            
            if (
$attributes trim $elements [2] [$ie] )) {
                
preg_match_all $reattrs$attributes$att );
                foreach ( 
$att [1] as $ia => $xx )
                    
$xmlary [$ie] ["attributes"] [$att [1] [$ia]] = $att [2] [$ia];
            }
            
            
$cdend strpos $elements [3] [$ie], "<" );
            if (
$cdend 0) {
                
$xmlary [$ie] ["text"] = substr $elements [3] [$ie], 0$cdend );
            }
            
            if (
preg_match $reels$elements [3] [$ie] ))
                
$xmlary [$ie] ["elements"] = $this->xml2array $elements [3] [$ie] );
            else if (
$elements [3] [$ie]) {
                
$xmlary [$ie] ["text"] = $elements [3] [$ie];
            }
        }
        return 
$xmlary;
    }
}
?>
Espero le pueda servir a alguien y si no pues hay esta para lo que querais :P jajaja.
  #2 (permalink)  
Antiguo 18/03/2010, 08:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 23
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

lo probrare :) aver si tienes un para cpanel :P
  #3 (permalink)  
Antiguo 18/03/2010, 09:14
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 11 meses
Puntos: 89
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

Probablemente no me servirá, pero quiero agradecerte el que expongas el código aunque hayas pagado por el. Se agradece bastante ;D.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #4 (permalink)  
Antiguo 18/03/2010, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

Gracias por tu aporte, solo como observación, tendrías mejor rendimiento si en tu función xml2array usas SimpleXML o DomXML, ya que para eso se crearon esas clases.

Saludos.
  #5 (permalink)  
Antiguo 18/03/2010, 09:56
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

gatorv no tengo ni idea de eso por eso lo encargue el script jeje si me especificas lo que quieres decir lo modifico para que el que lo use le vaya mejor :D
  #6 (permalink)  
Antiguo 16/09/2011, 15:01
 
Fecha de Ingreso: septiembre-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

Saludos porque sale "Permission denied.", que me falta? cuales son las variables modificables?.. gracias,
  #7 (permalink)  
Antiguo 17/09/2011, 07:13
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

hola ernesto_bur, no se mucho del tema ajja por eso mismo lo pague :P pero revisa haber puesto tu dominio aqui: $plesk=new Plesk("https://tudominio.es:8443/enterprise/control/agent.php","usuario de plesk","contraseña"); /* Aqui tienes que indicar el dominio en el que se crearan las cuentas de email, tambien teneis que indicar el usuario de plesk y la contraseña*/
  #8 (permalink)  
Antiguo 19/09/2011, 12:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

Gracias Rompehuesos: Encontre la solucion y la expongo a continuacion:

Cuando ejecuto la aplicacion me sale error 1006 y veo que el hosting tiene deshabilitado el permiso "Ability to use remote XML interface" en Permissions;

Solucion:

You need the admin of the server to grant your plesk reseller account permission to use the API - specifically this permission "Ability to use remote XML interface" and that should resolve it.

Resumen:
Pedir el cambio al proveedor de hosting la opcion "Ability to use remote xml interface"


Ahora tengo otro error: error 1023 Unable to check domain. voy a pedir soporte al proveedor de nuevo porque estoy 99% seguro que el codigo esta bien.
  #9 (permalink)  
Antiguo 29/02/2012, 11:34
Avatar de offenSuse  
Fecha de Ingreso: junio-2010
Ubicación: Sevilla
Mensajes: 6
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: [APORTE] Crear cuentas de emails con la "API de PLESK"

He de darte las gracias, las infinitas gracias porque me ha sido de una valiosa ayuda tu aportación.

Añado solo una cosa:

Código PHP:
$result=$plesk->add_email(2,$_POST['username'],$_POST['password']); 
En esa línea precisamente en el add_email pones un 2 en el primer parámetro. Ese es el identificador de tu dominio en plesk. A mi no me funcionaba, me devolvía error 1015 si no recuerdo mal y es porque no encontraba dicho dominio.

Yo tengo un VPS con pleno acceso a BD y a todo y he podido buscar en la base de datos "psa" que es la de plesk y encontrar el id de mi dominio que es diferente a 2.

Para todos aquellos que tengan un VPS o un servidor dedicado y puedan comprobarlo ellos mismos tendran que mirar el campo "id" de la tabla "domains" en la base de datos "psa".

Quizás otras personas que usen esto deban reparar en que ese identificador pueda ser distinto.

Un saludo y de nuevo: ¡GRACIAS!

Etiquetas: cuentas, email, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 12:41.