Muy buenas estimados.
Les planteo la siguiente situación:
Cada usuario que registro en la base mysql, le creo una casilla email en el servidor, y dejo los parámetros guardados en una tabla.
Cuando el usuario ingresar, realiza las gestiones sobre un formulario, y dispone de un botón para enviar un correo a un cliente.
Lo que deseo, es que cada usuario, al enviar el correo, lo haga usando su propia casilla STMP que le cree en el servidor, de modo que, pueda desde outlook o desde webmail, ver las respuestas que el cliente le responda.
No deseo usar la función phpmailer() que usa una casilla genérica (a menos, que exista algun truco para hacer lo que deseo)
Espero haber sido claro con mi explicación de la necesidad.
Si alguien tiene alguna idea, o como podría enfrentar este dilema.
Agradeciendo de antemano, las posibles respuesta que pueda tener, y por el tiempo dedicado a ello, les saluda cordialmente
Hola,
Para esto necesitas configurar el objeto de envío de correo en tiempo de ejecución, con los datos SMTP del usuario que ha iniciado sesión, en vez de tener una configuración única fija para toda la aplicación. Con PHPMailer (la librería estándar para esto en PHP) queda bastante directo:
require 'vendor/autoload.php';
use PHPMailerPHPMailerPHPMailer;
// $usuario contiene los datos SMTP guardados en tu tabla para el usuario logueado
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = $usuario['smtp_host'];
$mail->SMTPAuth = true;
$mail->Username = $usuario['smtp_user'];
$mail->Password = $usuario['smtp_pass'];
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = $usuario['smtp_port'];
$mail->setFrom($usuario['smtp_user'], $usuario['nombre']);
$mail->addAddress($destinatario);
$mail->Subject = $asunto;
$mail->Body = $cuerpo;
$mail->send();
La clave es que $usuario['smtp_host'], smtp_user, etc. salen de la fila del usuario logueado en tu base de datos (la tabla donde guardas los parámetros que mencionas), no de una constante fija en el código. Cada usuario que envía un correo dispara el envío con su propia cuenta, sin tocar el resto del código.
Un aviso importante de seguridad: no guardes la contraseña SMTP en texto plano en la base de datos. Guarda una versión cifrada (por ejemplo con openssl_encrypt y una clave que viva fuera de la base de datos, en una variable de entorno) y descífrala solo en el momento de construir $mail, justo antes de enviar. Así si alguna vez alguien accede a la base de datos, no se lleva las contraseñas SMTP de todos tus usuarios en claro.
Elena