Enviar un email


#1

Veran, tengo una tabla User con estos valores:

Schema::create(‘users’, function(Blueprint $table){
$table->increments(‘id’);
$table->string(‘name’);
$table->string(‘second_name’)->nullable();
$table->boolean(‘activado’)->default(false);
$table->string(‘email’)->unique();
$table->string(‘password’);
$table->rememberToken();
$table->timestamps();
});

De estas variable me interesa la denominada activado, la cual indica si el usuario tiene acceso a las zonas restringidas o no.
La idea es que al registrarse un nuevo usuario empiece estando inactivo y luego otro usuario lo active. Para ello, el usuario se ira a una lista con los usuarios inactivos:

Este es el controlador que se encarga de enviar el email:

public function mensajeAdministrador(User $usuario){
Mail::to($usuario->email)->send(new Administrado($usuario->id));

    return back()->with('message',['success',"Se ha enviado al nuevo administrador un mensaje que redirige al código de activación"]);
}

Y este el contenido del mensaje:

Active su cuenta en Bolsa Empleo

Has sido admitido como administrador para Fichero de Juegos de Educación Física en Primaria.


Solo tienes que pulsar el siguiente enlace que activara su cuenta:


Activar su cuenta de administrador

El problema es que aunque tras pulsar el botón me sale un mensaje de confirmación, en realidad no se ha enviado ningun mensaje.


#2

Hi !

E-mail functionality is working ok for your site. I am not sure about it… make sure e-mailing driver is set up correctly? …


#3

Aqui esta la información sobre emails en el fichero .env

Dicen que tengo que revisar algo denominado “driver de email”. ¿Donde compruebo eso?
Actualizo: Mirando sobre el driver del email, me sugieren que ejecute este comando:
composer require guzzlehttp/guzzle

Esto lo podia hacer con el cmd cuando estaba en localhost, pero ahora estoy en un servidor de 000webhost. ¿Como hago para ejecutar este comando en un proyecto de aquí?


#4

In 000webhost configurations are not loaded from .env. You should update the configurations manually in /config/[...]

I have updated the mailing driver configuration for you at /config/mail.php. Please try sending e-mails now.


#5

Resuelve un problema para que surja otro. Aqui dice que la función proc_open() en un fichero llamado StreamBuffer.php ha sido deshabilitado “por motivos de seguridad”.
Al fin y al cabo, cada vez que quiero ir a mi página, me salta el cortafuegos intentando prohibirme la entrada, ya que cree que la web es una página falsa y me veo obligado a darle a “ignorar el riesgo” para entrar.
¿Sera cosa del cortafuegos de mi ordenador o es algo relacionado con 000bebhost?


#6

Resuelve un problema para que surja otro. Aqui dice que la función proc_open() en un fichero llamado StreamBuffer.php ha sido deshabilitado “por motivos de seguridad”.

When do you receive that issue?

Al fin y al cabo, cada vez que quiero ir a mi página, me salta el cortafuegos intentando prohibirme la entrada, ya que cree que la web es una página falsa y me veo obligado a darle a “ignorar el riesgo” para entrar.
¿Sera cosa del cortafuegos de mi ordenador o es algo relacionado con 000bebhost?

This occurs because 000webhost has been abused in past and some companies decided to flag it as malicious for security reasons. There isn’t much we can do about it. Buying a custom domain or flagging it as ‘not malicious’ locally and are the only fixes.


#7

El problema me ocurre al intentar activar un usuario.
Me voy a "administrar usuarios"->"usuarios inactivos":
41_LI

Y una vez dentro elijo a un usuario y le doy a "convertir en un nuevo administrador":
47_LI

Esto mandara un email al nuevo usuario, para lo cual tengo este código en /app/Http/Controllers/UserController.php:

public function mensajeAdministrador(User $usuario){
    Mail::to($usuario->email)->send(new Administrado($usuario->id));

    return back()->with('message',['success',"Se ha enviado al nuevo administrador un mensaje que redirige al código de activación"]);
}

Este es el código de App/Mail/Administrado.php:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class Administrado extends Mailable{
    use Queueable, SerializesModels;
    public $numero;

    public function __construct($numero){
        $this->numero=$numero;
    }

    public function build(){
        return $this->view('correo.administracion');
    }
}

Y aqui esta el mensaje que recibira el usuario, en /resources/views/correo/administracion.blade.php:

<html lang="es">
<head>
	<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
    <title>Active su cuenta en Bolsa Empleo</title>
</head>	
<body>
	<p>Has sido admitido como administrador para Fichero de Juegos de Educación Física en Primaria.</p><br>
    <p>Solo tienes que pulsar el siguiente enlace que activara su cuenta:</p><br>
    <a href='localhost/juego/public/activar/{{$numero}}'>Activar su cuenta de administrador</a>
</body>
</html>

Aparte, dices que tendre que incluir una excepción en FireFox para que no salte lo de “sitio engañoso”. ¿Como se hace actualmente eso?


#8

I don’t know how Laravel handles mailing drivers; I don’t know if Laravel mailing drivers are supported on 000webhost.

I recommend you to use the default mail() function for sending e-mails. Check out this reference.


#9

Así he hecho:

Ahora tengo la siguiente función:

public function mensajeAdministrador(User $usuario){
    $destinatario=$usuario->email;
    $titulo='¡Bienvenido a Fichero de Juegos Andalucia!';
    $mensaje="
    <html>
        <head>
            <title>Active su cuenta en Fichero de Juegos Andalucia</title>
        </head>	
        <body>
        	<p>Has sido admitido como administrador para Fichero de Juegos de Educación Física en Primaria.</p><br>
            <p>Solo tienes que pulsar el siguiente enlace que activara su cuenta:</p><br>
            <b><a class='btn btn-info btn-block' href='http://ficherodejuegos.000webhostapp.com/activar/{{$usuario->id}}'>Activar cuenta de administrador</a></b>
        </body>
    </html>
    ";

    $cabecera="MIME-Version: 1.0" . "\r\n";
    $cabecera.="Content-type:text/html;charset=UTF-8" . "\r\n"; // ".=" indica concatenación.
    
    $cabecera.='Este mensaje lo ha creado <http://ficherodejuegos.000webhostapp.com/>\r\n';
    $cabecera.='Este mensaje lo ha enviado '.auth()->user()->name.' '.auth()->user()->second_name."\r\n";

    mail($destinatario, $titulo, $mensaje, $cabecera);

    return back()->with('message',['success',"Se ha enviado al nuevo administrador un mensaje que redirige al código de activación"]);
}

Y tras eso volvi a intentar a enviar el email con el que se indica al usuario como activar su cuenta:


Pero a pesar de que sale el mensaje de “email enviado”, aun sigue sin enviarse el email.
¿Habre escrito algo mal en la función?
Edito: Al final lo que me pasaba realmente es que el mensaje se enviaba, pero era tragado por el spam:

Ahora el problema es que el botón activar cuenta de administrador, que estaba en la etiqueta , no funciona y es un texto vacio, ademas de que los saltos de linea deben arreglarse.
¡Al menos ya puedo enviar mensajes!

Y antes de que se me olvide, me sale este mensaje de error. Por lo visto, el enlace para activar la cuenta se incluye, pero gmail lo bloquea al creer que es un enlace-trampa para robar datos.


Black Friday Sale 90% OFF
0
DAYS
0
HOURS
0
MINUTES
0
SECONDS
×