Base de conocimientos
1 000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Usar PHPMailer en Infomaniak
Esta guía explica cómo utilizar PHPMailer con los servicios de alojamiento web de Infomaniak para enviar correos electrónicos desde un sitio web.
⚠ ATENCIÓN ⚠
Infomaniak garantiza la conformidad de sus servicios con los protocolos estándar (IMAP, S3, etc.), pero no ofrece asistencia adicional para servicios o software externos, ya que su configuración puede cambiar según el proveedor o el editor. Por lo tanto, esta guía se proporciona únicamente como referencia, y su implementación es su responsabilidad (véase: Política de soporte / Art. 11.9 de las CGU). Si es necesario, una persona cualificada puede ayudarle.
Introducción
- PHPMailer es una biblioteca PHP que permite crear y enviar correos electrónicos desde un sitio web, especialmente a través de SMTP.
- Permite, entre otras cosas, enviar mensajes en formato HTML, añadir una versión de texto alternativa, gestionar archivos adjuntos y utilizar la autenticación SMTP.
- Para el envío autenticado a través de SMTP, el entorno PHP utilizado por el sitio debe ser compatible con una conexión cifrada reciente, especialmente TLS 1.2 o superior.
- Una versión demasiado antigua de PHP o de la biblioteca OpenSSL utilizada por PHP puede provocar un error de conexión o autenticación, incluso si la dirección de correo electrónico y la contraseña son correctas.
- No utilice PHP 5.3/5.4 para este tipo de envío; utilice una versión de PHP reciente y con soporte.
- Con el envío SMTP autenticado, la dirección utilizada como remitente debe coincidir con la dirección de correo electrónico utilizada para la autenticación SMTP.
Instalar PHPMailer
Para utilizar PHPMailer, instale la biblioteca en los archivos de su sitio web.
- Descargue PHPMailer desde su repositorio oficial o instálela con Composer si su proyecto lo utiliza.
- Copie los archivos de PHPMailer en un directorio de su sitio web a través de FTP.
Cargue los archivos necesarios en su script PHP, adaptando la ruta según la ubicación elegida:
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require **DIR** . '/PHPMailer/src/Exception.php'; require **DIR** . '/PHPMailer/src/PHPMailer.php'; require **DIR** . '/PHPMailer/src/SMTP.php';
Configurar el envío SMTP con Infomaniak
Utilice los siguientes parámetros SMTP autenticados:
- Servidor SMTP:
mail.infomaniak.com - Puerto:
465 - Cifrado:
SMTPS/ SSL-TLS - Autenticación: obligatoria
- Nombre de usuario: la dirección de correo electrónico completa
- Contraseña: la contraseña de la dirección de correo electrónico utilizada
Ejemplo de configuración completa:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require **DIR** . '/PHPMailer/src/Exception.php';
require **DIR** . '/PHPMailer/src/PHPMailer.php';
require **DIR** . '/PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true);
try {
// Configuration SMTP
$mail->isSMTP();
$mail->Host = 'mail.infomaniak.com';
$mail->SMTPAuth = true;
$mail->Username = '[sender@domain.xyz](mailto:sender@domain.xyz)';
$mail->Password = 'mot_de_passe_de_l_adresse_mail';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 465;
$mail->CharSet = 'UTF-8';
```
// Expéditeur
// L'adresse doit correspondre à celle utilisée pour l'authentification SMTP.
$mail->setFrom('sender@domain.xyz', 'Nom du site');
// Destinataire
$mail->addAddress('recipient@example.com');
// Adresse de réponse facultative
$mail->addReplyTo('sender@domain.xyz', 'Nom du site');
// Contenu du message
$mail->isHTML(true);
$mail->Subject = 'Message envoyé depuis le site';
$mail->Body = '<p>Contenu HTML du message.</p>';
$mail->AltBody = 'Contenu texte du message.';
$mail->send();
echo 'Message envoyé';
```
} catch (Exception $e) {
echo 'Le message n’a pas pu être envoyé. Erreur: ' . htmlspecialchars($mail->ErrorInfo);
}Si su aplicación requiere el uso del puerto 587, utilice STARTTLS:
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
Verificar la versión de PHP y la compatibilidad TLS
El envío SMTP autenticado requiere una conexión cifrada reciente. Si el sitio utiliza una versión demasiado antigua de PHP, por ejemplo, PHP 5.3, o una biblioteca OpenSSL demasiado antigua, PHPMailer puede fallar antes o durante la autenticación. Los errores pueden ser engañosos, por ejemplo:
SMTP connect() failedCould not authenticatestream_socket_enable_crypto()- un error de autenticación, aunque la contraseña sea correcta
En este caso, compruebe los siguientes puntos:
- la versión de PHP utilizada por el sitio web;
- la versión de OpenSSL utilizada por PHP;
- la versión de PHPMailer utilizada por su proyecto;
- la correspondencia entre el puerto SMTP y el cifrado elegido.
Para una configuración fiable, utilice una versión reciente de PHP, compatible con TLS 1.2 o superior, así como una versión actual de PHPMailer. Consulte estas guías si es necesario:
- Modificar la versión de PHP de un sitio web
- Resolver un problema de PHP relacionado con una versión obsoleta
- Mostrar la información técnica del sitio
Resolver un error de "Sender mismatch"
El error Sender mismatch SMTP code: 550 Additional SMTP info: 5.7.1 puede ocurrir cuando la dirección utilizada como remitente no coincide con la dirección de correo electrónico utilizada para la autenticación SMTP. Ejemplo a evitar:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('another-address@domain.xyz', 'Nom du site');En este ejemplo, el script se autentica con sender@domain.xyz, pero intenta enviar el mensaje con otra dirección de remitente.
Utilice la misma dirección de correo electrónico para la autenticación SMTP y para el remitente:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('sender@domain.xyz', 'Nom du site');El nombre del remitente se puede personalizar, pero la dirección de correo electrónico debe seguir siendo coherente con la cuenta SMTP utilizada.
Caso de un formulario de contacto
Si un visitante introduce su dirección de correo electrónico en un formulario, no la utilice como dirección de remitente del mensaje. Utilice la dirección de correo electrónico autenticada como remitente y, a continuación, añada la dirección del visitante como dirección de respuesta.
Ejemplo:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('sender@domain.xyz', 'Formulaire du site');
$mail->addReplyTo($email_visiteur);Esta configuración permite responder al visitante desde su programa de correo electrónico sin enviar el mensaje con una dirección de remitente no autorizada.
Activar el modo de depuración temporalmente
En caso de error, active temporalmente el modo de depuración de PHPMailer para obtener más detalles sobre la conexión SMTP:
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';Desactive este modo después de realizar las pruebas para evitar mostrar información técnica a los visitantes del sitio.
Más información
Enlace a esta FAQ: https://faq.infomaniak.com/576
¿Le ha sido útil esta FAQ?