[Implenta] métodos para envío de mensajes de correo electrónico

This commit is contained in:
Ricardo García Jiménez 2021-10-06 15:02:50 -05:00
parent fc65a6b0e0
commit 9ff946c4a9
3 changed files with 73 additions and 2 deletions

View file

@ -19,6 +19,21 @@ Estructura del archivo de configuración:
}
```
## Archivo de configuración del cliente de correo electrónico
Por defecto, `Nabu` escanea el archivo `email-config.json` dentro de la carpeta raíz del proyecto.
Estructura del archivo de configuración:
```json
{
"smtp": "smtp.google.com",
"port": 587,
"address": "foo@gmail.com",
"password": "xxxxx"
}
```
## Licencia
```text

View file

@ -43,7 +43,7 @@ class usersController {
$users = $usersModel -> find($data['username'], $data['email']);
$msg = 'Existe una cuenta registrada con el mismo apodo o dirección de correo electrónico, por favor intételo de nuevo';
$msg = 'Existe una cuenta registrada con el mismo apodo o dirección de correo electrónico, por favor inténtelo de nuevo';
// Valida si la cuenta es única y elimina cuentas expiradas.
foreach ($users as $user) {
@ -72,6 +72,10 @@ class usersController {
// Hash de verificación de e-mail.
$hash = hash_hmac(self::hash, $data['email'], $key);
require_once 'libs/emails.php';
$emails = new emails();
// Cifra la contraseña.
$data['password'] = password_hash($data['password'], PASSWORD_DEFAULT, self::cost);

View file

@ -2,6 +2,58 @@
defined('NABU') || exit();
class emails {
require_once 'libs/php-smtp-2.0.4/Email.php';
use Snipworks\Smtp\Email;
// Envía mesajes de e-mail en formato HTML.
class emails {
private $mail;
private function errors(string $error) {
messages::errors($error, 400);
}
public function __construct() {
if (!file_exists(NABU_DIRECTORY['email'])) {
$this -> errors('Create a e-mail config file');
}
// Carga el archivo de configuración del cliente de e-mail.
$config = file_get_contents(NABU_DIRECTORY['email']);
if ($config === false) {
$this -> errors('The e-mail config file is invalid');
}
$config = json_decode($config, true);
exit(var_dump($config));
$keys = array('smtp', 'port', 'address', 'password');
foreach ($keys as $key) {
if (empty($config[$key])) {
$this -> errors('Set "' . $key . '" in e-mail config file');
}
}
// Configura el cliente del e-mail.
$this -> mail = new Email($config['smtp'], $config['port']);
$this -> mail -> setProtocol(Email::TLS);
$this -> mail -> setLogin($config['address'], $config['password']);
$this -> mail -> setFrom($config['address'], NABU_DEFAULT['website-name']);
}
// Define el destinatario del mensaje.
public function prepare(string $destinatary, string $name) {
$this -> mail -> addTo($destinatary, $name);
}
// Envía un mensaje de e-mail HTML.
public function send(string $subject, string $body) {
$this -> mail -> setSubject($subject);
$this -> mail -> setHtmlMessage($body);
return $this -> mail -> send();
}
}