PHP - Como pasar variables de una clase a otra clase

 
Vista:

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 19/07/2019 18:05:18
Estoy aprendiendo a trabajar con las clases y estoy desarrollando esta, quiseira saber si se puede pasar datos de esta a la clase Phpmailer que estoy usando para enviar correos, la idea es incluir los servidores de correos de esta manera y asi facilitar su uso. Si alguien me orienta a ver si puedo ir afinando mis conocimientos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
 
class Correos
{
 
    public function usoHotmail() {
 
        echo 	$this->$smtp->SMTPAuth   = true; echo "</br>";
        echo 	$this->$smtp->SMTPSecure = "tls"; echo "</br>";
        echo 	$this->$smtp->Host       = "smtp.live.com"; echo "</br>";
        echo 	$this->$smtp->Username   = "miCuenta@outlook.com"; echo "</br>";
        echo 	$this->$smtp->Password   = "miPassword"; echo "</br>";
        echo 	$this->$smtp->Port       = 25; echo "</br>";
 
    }
    public function usoGmail() {
 
        echo	$this->$smtp->SMTPAuth   = true; echo "</br>";
        echo	$this->$smtp->SMTPSecure = "tls"; echo "</br>";
        echo	$this->$smtp->Host       = "smtp.gmail.com"; echo "</br>";
        echo	$this->$smtp->Username   = "miCuenta@gmail.com"; echo "</br>";
        echo	$this->$smtp->Password   = "miPassword"; echo "</br>";
        echo	$this->$smtp->Port       = 587; echo "</br>";
    }
 
    public function usoYahoo() {
 
        echo $this->$smtp->SMTPAuth   = true; echo "</br>";
        echo $this->$smtp->SMTPSecure = "ssl"; echo "</br>";
        echo $this->$smtp->Host       = "smtp.mail.yahoo.com"; echo "</br>";
        echo $this->$smtp->Username   = "miCuenta@yahoo.com"; echo "</br>";
        echo $this->$smtp->Password   = "miPassword"; echo "</br>";
        echo $this->$smtp->Port       = 465; echo "</br>";
    }
}
?>

Nota: este codigo es el que estoy utilizando para enviar el correo, esta basado en PhPmailer mi pregunta como debo llamar la variable que trae cuando el usuario selecciona un servidor de correo en negrita es donde instancio la clase pero de ahi no se como llamar la variable.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
set_time_limit(500);
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
include("gmail.php");
//error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
$de = $_POST["de_txt"];
$para = $_POST["para_txt"];//cta de correo al que va dirigido el mensaje.
$password = $_POST['passw'];
$nombres = $_POST['nombres'];
var_dump($nombres);
$asunto = $_POST["asunto_txt"];
$addcco = $_POST["cco_txt"];
$archivo = $_FILES["archivo_fls"]["tmp_name"];
$adjunto = chunk_split(base64_encode(file_get_contents($archivo)));
$destino = $_FILES["archivo_fls"]["name"];
$mensaje = $_POST["mensaje_txa"];
copy($_FILES["archivo_fls"]["tmp_name"],$_SERVER['DOCUMENT_ROOT']."/archivos/".$_FILES["archivo_fls"]["name"]);
copy($_FILES["archivo_fls"]["tmp_name"],"archivos/".$_FILES["archivo_fls"]["name"]);
$smtp=new PHPMailer();
$smtp->IsSMTP();
$smtp->CharSet="UTF-8";
 
include("enviar.php");
 
$Correo = new Correos();
 
 
 
// $smtp->SMTPAuth = true;
// $smtp->SMTPSecure = "tls";
// $smtp->SMTPDebug = 0;
// $smtp->Host = "smtp.live.com";
// $smtp->Username = $de;
// $smtp->Password = $password;
// $smtp->Port = 587;
 
 
 
$smtp->From = $de;
$smtp->FromName = $nombres;
# Indicamos la dirección donde enviar el mensaje
$para1= $para;
$nameTo=$para1;
$smtp->AddAddress($para,utf8_decode($nameTo));
$smtp->Subject = $asunto;
$smtp->Body = $mensaje;
$smtp->WordWrap = 50;
$smtp->IsHTML(true);
$smtp->MsgHTML($mensaje);//
$smtp->AddAttachment($_FILES["archivo_fls"]["tmp_name"],$_FILES["archivo_fls"]["name"]);
if (!$smtp->Send())
  {
    $respuesta ="El mensaje no se pudo enviar";
    $respuesta .="Error: " .$mail->ErrorInfo;
  }
else
  {
    $respuesta ="El mensaje ha sido enviado";
  }
header("Location:correomail.php?respuesta=$respuesta");
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.919
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Alejandro (594 intervenciones) el 19/07/2019 22:45:05
Mi duda es, ¿para que quieres enviar de diferentes servidores?

Lo que intentas es extender la clase y se llama Herencia
https://www.php.net/manual/es/language.oop5.inheritance.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 20/07/2019 15:14:31
Hola, gracias por responder. Te explico con detenimiento. Resulta que necesito crear un formulario para una empresa donde los clientes puedan interactuar con mensajes de correo. La idea es que diferentes clientes con los diferentes servidores de correo Hotmail, Gmail, yahoo, etc; puedan comunicarse con la empresa pidiendo servicios de mantenimiento de maquinarias.

Podria darse el caso de que un cliente solo tenga Gmail, pero la aplicacion esta concebida para hotmail solamente. Ese es el problema.
Entonces con esa clase se salvaria los envios de manera segura.


Estoy mirando el enlace que enviaste, ya lo habia visto.

Lo que no se es como llamar o ubicar la variable desde el formulario.
No tendrás un ejemplo en alguna aplicacion que hayas desarrollado? Una vez que capto un ejemplo se me hace mas facil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.919
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Alejandro (594 intervenciones) el 20/07/2019 16:09:42
Entiendo que...
Si el usuario tiene una cuenta de Gmail el servidor me enviara un correo de una cuenta de Gmail,
Si el usuario tiene una cuenta de Hotmail el servidor me enviara un correo de una cuenta de Hotmail.

Lo que no entiendo es ¿para que?,
Si configuro un cuenta de Gmail el servidor me envía correos a cualquier dirección existente sin importar su dominio.
Tiene aun menos sentido si la dirección destino siempre sera la misma (la empresa).

No veo necesidad de expandir la clase, básicamente por el echo de que tendrás que elegir que método utilizar.
1
2
3
4
5
6
7
8
9
switch($dominioCorreo){
   case 'gmail.com':
      $mail->usoGmail();
      break;
   case 'hotmail.com':
      $mail->usoHotmai;
      break;
   case ....
}

Una clase es el molde para un objeto, no es conveniente especificar los valores de configuración en ella.
Lo correcto seria crear los almacenes para los valores de dichas configuraciones y una vez instanciada la clase configurar esos valores.

Podrías simplemente crear una función que realice la configuración requerida y pasar por referencia el objeto $mail.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
configurarMail($dominio,&$mail){
   switch($dominioCorreo){
      case 'gmail.com':
         $mail->Host       = "smtp.gmail.com";
         ...
         break;
      case 'hotmail.com':
         $mail->Host       = "smtp.live.com";
         break;
      case ....
   }
}
...
configurarMail('gmail.com',$mail);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 20/07/2019 16:24:24
El asunto es que el codigo que desarrollé esta concebido con el servidor Hotmail, solo recibe mensajes del cliente que posea una cuenta de correo Hotmail. No recibe jamás de Gmail u otro servidor,. Te envio el codigo que procesa el mensaje:

En negrita esta donde quiero ubicar la clase Correos(); alli es donde veo que puede ubicarse y que herede de esa clase, pero es lo que no se como hacer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
set_time_limit(500);
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
include("gmail.php");
//error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
$de = $_POST["de_txt"];
$para = $_POST["para_txt"];//cta de correo al que va dirigido el mensaje.
$password = $_POST['passw'];
$nombres = $_POST['nombres'];
var_dump($nombres);
$asunto = $_POST["asunto_txt"];
$addcco = $_POST["cco_txt"];
$archivo = $_FILES["archivo_fls"]["tmp_name"];
$adjunto = chunk_split(base64_encode(file_get_contents($archivo)));
$destino = $_FILES["archivo_fls"]["name"];
$mensaje = $_POST["mensaje_txa"];
copy($_FILES["archivo_fls"]["tmp_name"],$_SERVER['DOCUMENT_ROOT']."/archivos/".$_FILES["archivo_fls"]["name"]);
copy($_FILES["archivo_fls"]["tmp_name"],"archivos/".$_FILES["archivo_fls"]["name"]);
$smtp=new PHPMailer();
$smtp->IsSMTP();
$smtp->CharSet="UTF-8";
 
include("gmail.php");
 
$Correo = new Correos();
 
 
            // $smtp->SMTPAuth = true;
            // $smtp->SMTPSecure = "tls";
            // $smtp->SMTPDebug = 0;
            // $smtp->Host = "smtp.live.com";
            // $smtp->Username = $de;
            // $smtp->Password = $password;
            // $smtp->Port = 587;
 
 
 
            $smtp->From = $de;
            $smtp->FromName = $nombres;
            # Indicamos la dirección donde enviar el mensaje
            $para1= $para;
            $nameTo=$para1;
            $smtp->AddAddress($para,utf8_decode($nameTo));
            $smtp->Subject = $asunto;
            $smtp->Body = $mensaje;
            $smtp->WordWrap = 50;
            $smtp->IsHTML(true);
            $smtp->MsgHTML($mensaje);//
            $smtp->AddAttachment($_FILES["archivo_fls"]["tmp_name"],$_FILES["archivo_fls"]["name"]);
               if (!$smtp->Send())
                  {
              	    $respuesta ="El mensaje no se pudo enviar";
            		$respuesta .="Error: " .$mail->ErrorInfo;
                  }
               else
                  {
                    $respuesta ="El mensaje ha sido enviado";
                  }
               header("Location:correomail.php?respuesta=$respuesta");
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 20/07/2019 17:57:03
La idea es que Si el usuario tiene una cuenta de Gmail el servidor me enviara un correo de una cuenta de Hotmail y viceversa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.919
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Alejandro (594 intervenciones) el 20/07/2019 19:24:44
Ya estuve analizando y creo entender lo que intentas.
Tienes un formulario donde yo, como cliente, escribo algunos datos entre ellos los mas importantes: mi dirección de correo y mi contraseña; y así enviar un correo saliente desde mi cuenta.

Para que eso funcione:
1. Mi cuenta de correo debe estar configurada para aplicaciones menos seguras.
¿Le dirás a cada cliente que configure su cuenta?
Simplemente al leer "MENOS SEGURA" no lo harán.
Es mas sencillo entrar a mi cuenta y enviar el correo, que configurar mi correo solo para que funcione en tu sitio.

2. Cualquiera con un poco de razonamiento se reusaría a escribir su contraseña de correo en un sitio ajeno a su proveedor de servicio y con mucha mas razón si ni siquiera es HTTPS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mauro
Val: 1.667
Plata
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Mauro (464 intervenciones) el 20/07/2019 22:01:34
Me parece correcto lo que comenta Alejandro... ¿por qué un cliente querría darte sus datos de acceso a su correo? ¿Qué beneficio implica enviar los correos desde tu aplicación en lugar de hacerlo desde la propia Gmail, Hotmail o lo que sea?

Respecto del código que publicas, creo que la clase Correos deberías re-pensarla... la Programación Orientada a Objetos es más que un poco de sintaxis... debes aprender a pensar en objetos (Un GRAN tema aparte).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 21/07/2019 23:18:36
Bueno te explico, la verdad estoy comenzando con la Programación Orientada a Objetos, y viendo y practicando con eso.

Ves alguna falla en la Clase Correos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.667
Plata
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Mauro (464 intervenciones) el 22/07/2019 01:39:28
Pues para empezar no me gusta el tema de hacer echo dentro de la clase... no queda muy clara la responsabilidad que tiene.

Me hace algo de ruido el nombre de la clase más que nada... me suena como un grupo de funciones (algo más de programación esructurada que POO).

Para mi, una clase que se llame "Correos" debería modelar una colección de objetos de clase "Correo" o algo así.

En todo caso, si quieres aprender más sobre POO con PHP escribí un libro que puede ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 22/07/2019 00:12:54
Bueno estoy siempre viendo este sitio web para POO: cesarcancino.com; es un chileno que explica muy bien el tema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 21/07/2019 23:16:46
Te entiendo, pero he visto formularios donde se pide la contraseña. Entiendo que seria mas seguro desde la propia Gmail, Hotmail, etc.
No seria mas rapido hacerlo a travès de la aplicacion en cuestion? Y pudiera hacerse con HTTPS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.919
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Alejandro (594 intervenciones) el 22/07/2019 16:07:57
Jamas he visto que me pidan la contraseña de mi correo en un formulario, bueno solo en los viejos exploits pero es otro tema :P, y como te dije el cliente debe configurar su cuenta para aceptar aplicaciones menos seguras.

Lo que comúnmente se hace es configurar una sola cuenta del propio dominio noreplay@midominio.com, adminitracion@midominio.com, etc. de donde se envían todos los correos, en el cuerpo del mensaje se incluye la información del cliente y se agregar la dirección del cliente en el ReplyTo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Mauro
Val: 1.667
Plata
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Como pasar variables de una clase a otra clase

Publicado por Mauro (464 intervenciones) el 23/07/2019 14:25:45
Lo que se podría hacer es pedir que el usuario se autentique vía su Gmail (eso se hace mucho) pero la autenticación la hace Google mediante OAuth2 pero eso es otro tema... mucho más complejo por otro lado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como pasar variables de una clase a otra clase

Publicado por cosmito (33 intervenciones) el 24/07/2019 00:13:25
Bueno tienes razon, y lo que me gustaria entender un poco mas, es esto que me dices:
Lo que comúnmente se hace es configurar una sola cuenta del propio dominio noreplay@midominio.com, adminitracion@midominio.com, etc. de donde se envían todos los correos, en el cuerpo del mensaje se incluye la información del cliente y se agregar la dirección del cliente en el ReplyTo..

exactamente que cuenta son noreplay@midominio.com, adminitracion@midominio.com y ReplyTo? es para yo poder emparejar con las cuentas de correo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar