Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    101

    Problema invio mail con Laravel.

    Ciao a tutti, sto realizzando il classico form di richiesta informazioni nel mio sito, dove l'utente inserisce il proprio nome, cognome, mail, oggetto, messaggio.
    Per fare ciò ho utilizzato il comando Laravel: php artisan make:mail Contact, quindi ho il controller MailController in http/controllers, mentre in app ho la cartella mail con la classe Contact.php.

    Il problema sorge che una volta compilato il form e cliccato sul pulsante submit del form, non mi viene inviata la mail.

    Vi posto ora il codice:
    Vista: index.blade.php
    codice:
    //codice del form contattami
    <div class="col-md-6">
                                <div class="contact_from_area wow fadeInUp animated">
                                    <div class="contact_title">
                                        <h3>Contattami:</h3>
                                    </div>
                                    <div class="row">
                                        <form action="{{url('contact-me')}}" method="post" id="contactForm">
                                            {{csrf_field()}}
                                            <div class="form-group col-md-12">
                                                <input type="text" class="form-control" name="name" id="name" placeholder="Nome*" required>
                                            </div>
                                            <div class="form-group col-md-12">
                                                <input type="text" class="form-control" name="last" id="last" placeholder="Cognome*" required>
                                            </div>
                                            <div class="form-group col-md-12">
                                                <input type="email" class="form-control" name="email" id="email" placeholder="La tua email*" required>
                                            </div>
                                            <div class="form-group col-md-12">
                                                <input type="text" class="form-control" name="subject" id="subject" placeholder="Oggetto">
                                            </div>
                                            <div class="form-group col-md-12">
                                                <textarea class="form-control" rows="1" id="message" name="message" placeholder="Scrivi qui il tuo messaggio....." required></textarea>
                                            </div>
                                            <div class="form-group col-md-12">
                                                <button class="btn btn-default contact_btn" type="submit"><span>Invia messaggio</span></button>
                                            </div>
                                        </form>
                                       <div id="success">
                                            <p>Il messaggio è stato inviato correttamente!</p>
                                        </div>
                                        <div id="error">
                                            <p>Ci dispiace! Il tuo messaggio non è stato inviato, qualcosa è andato storto!!</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
    questo è il controller MailController:
    codice:
    namespace mysite\Http\Controllers;
    use Illuminate\Http\Request;
    use App\Http\Requests;
    use Mail;
    use Collection;
    use App\Mail\Contact;
    /**
     * Description of MailController
     *
     * @author Ezio
     */
    class MailController 
    {
        public function contact(Request $request)
        {
            // validation and other stuff...
          //  [...]
            
            // sender
            $sender = [ 'name' => $request->name, 'last' =>$request->last  , 'mail' => $request->email ];
            // recipients
            $recipients = new Collection;
            $recipients->push(['name' => 'Tirimacco Ezio', 'mail' => 'tirimaxx@gmail.com']);
            
            // attributes
            $attributes = [
                'name' => $request->name,
                'message' => $request->message
            ];
            Mail::send(new Contact($sender, $recipients, 'mail.contact', $attributes));
            // return result
           // [...]
        }
    }
    questo è Contact.php:
    codice:
    namespace mysite\Mail;
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Contracts\Queue\ShouldQueue;
    class Contact extends Mailable
    {
        use Queueable, SerializesModels;
        private $sender, $recipients, $template, $attributes;
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct($sender, $recipients, $template, $attributes)
        {
            $this->sender = $sender;
            $this->email = $recipients;
            $this->template = $template;
            $this->attributes = $attributes;
        }
    
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            // Senders addresses
            $this->from($this->sender['name'], $this->sender['last'] , $this->sender['mail']);
            
            // Recipients addresses
            foreach($recipients as $recipient) {
                $this->to($recipient['name'], $recipient['mail']);
            }
            
            // Subject
            $this->subject($this->sender['subject']);
                            
            // Return view
            return $this->view($this->template);
        }
    }

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,731
    In Controller.php dichiari

    private $sender, $recipients, $template, $attributes;

    ma nel costruttore assegni
    Codice PHP:
    // i parametri passati al costruttore non sono quelli che hai definito sopra nel private...
    // se questi li chiami $s, $r, $t, $a continua tutto normalmente
    // quelli nel private sono interni a questa classe, quelli nel costruttore sono parametri che arrivano dalla chiamata nel controller
    public function __construct($sender$recipients$template$attributes) {
       ...
       
    // non dichiari nessuna variabile $email nella classe, nella dichiarazione delle variabili usi $recipients
       
    $this->email$recipients;
       ... 
    Non so se sia solo questo il problema, ma verifica anche di aver correttamente impostato il metodo ed i parametri di invio nel file .env (username, password, ssl o tls...)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    101
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    In Controller.php dichiari

    private $sender, $recipients, $template, $attributes;

    ma nel costruttore assegni
    Codice PHP:
    // i parametri passati al costruttore non sono quelli che hai definito sopra nel private...
    // se questi li chiami $s, $r, $t, $a continua tutto normalmente
    // quelli nel private sono interni a questa classe, quelli nel costruttore sono parametri che arrivano dalla chiamata nel controller
    public function __construct($sender$recipients$template$attributes) {
       ...
       
    // non dichiari nessuna variabile $email nella classe, nella dichiarazione delle variabili usi $recipients
       
    $this->email$recipients;
       ... 
    Non so se sia solo questo il problema, ma verifica anche di aver correttamente impostato il metodo ed i parametri di invio nel file .env (username, password, ssl o tls...)
    Ciao Alhazred, ho fatto in questo modo perché questo codice l'ho trovato su internet e diceva che funzionasse, quindi ho compito solo i passi che erano descritti.
    nel mio file .env ho impostato correttamente metodo e parametri di invio:
    codice:
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.gmail.com
    MAIL_PORT=465
    MAIL_USERNAME=lamiamail@gmail.com
    MAIL_PASSWORD=lamiapassword
    MAIL_ENCRYPTION=ssl
    Per ciò che mentre mi hai detto non funziona nel mio codice, demo modificare private $recipients?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,731
    Per il codice di cui parlavo sopra, ti basta usare all'interno del costruttore
    $this->recipients = $recipients;

    invece di
    $this->email = $recipients

    Per la configurazione nel .env
    dato che usi Gmail come provider devi assicurarti che l'account Google sia configurato per accettare richieste dalle "App meno sicure", altrimenti le richieste verranno rifiutate.
    https://support.google.com/accounts/.../6010255?hl=it

    Se su quell'account hai attivato l'autenticazione a 2 fattori non avrai l'opzione per abilitare le app meno sicure, ma dovrai andare nella gestione delle app, aggiungerne una e generare una password specifica da usare poi nel .env

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    101
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Per il codice di cui parlavo sopra, ti basta usare all'interno del costruttore
    $this->recipients = $recipients;

    invece di
    $this->email = $recipients

    Per la configurazione nel .env
    dato che usi Gmail come provider devi assicurarti che l'account Google sia configurato per accettare richieste dalle "App meno sicure", altrimenti le richieste verranno rifiutate.
    https://support.google.com/accounts/.../6010255?hl=it

    Se su quell'account hai attivato l'autenticazione a 2 fattori non avrai l'opzione per abilitare le app meno sicure, ma dovrai andare nella gestione delle app, aggiungerne una e generare una password specifica da usare poi nel .env
    Ho fatto la modifica al codice che mi avevi indicato, però comunque sia le email non mi arrivano, sul mio account gmail ho consentito l'accesso alle app meno sicure e non ho autenticazione a 2 fattori.
    il problema potrebbe essere che in MailController ho questa riga di codice?
    codice:
    $recipients->push(['name' => 'Tirimacco Ezio', 'mail' => 'tirimaxx@gmail.com']);
    e che 'mail' => 'tirimaxx@gmail.com' è lo stesso indirizzo mail utilizzato nella configurazione del file .env?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    101
    Quote Originariamente inviata da EziT90 Visualizza il messaggio
    Ho fatto la modifica al codice che mi avevi indicato, però comunque sia le email non mi arrivano, sul mio account gmail ho consentito l'accesso alle app meno sicure e non ho autenticazione a 2 fattori.
    il problema potrebbe essere che in MailController ho questa riga di codice?
    codice:
    $recipients->push(['name' => 'Tirimacco Ezio', 'mail' => 'tirimaxx@gmail.com']);
    e che 'mail' => 'tirimaxx@gmail.com' è lo stesso indirizzo mail utilizzato nella configurazione del file .env?
    -----AGGIORNAMENTO DEL PROBLEMA----

    Ho cambiato il codice e adesso le mail arrivano correttamente alla mia casella di posta gmail, ma nel campo in cui deve essere l'indirizzo mittente della mail, mi da che la mail è inviata dal mio stesso indirizzo gmail.
    Quindi sia mittente che destinatario sono: lamiamail@gmail.com....cosa sbaglio? vi posto il codice che sto utlizzando ora:

    file web.php:
    codice:
    <?php
    use Illuminate\Http\Request;
    use mysite\Mail\ContactMail;
    use Illuminate\Support\Facades\Mail;
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
    //Route::get('/', 'IndexController@getindex')->name('home');
    Route::get('/home', 'IndexController@getindex')->name('home');
    //rotta per l'invio della mail di contatto dal form nella homepage
    Route::post('/home', function(Request $request){
        Mail::send(new ContactMail($request));
        return redirect('/home');
    });
    Auth::routes();
    file ContactMail:
    codice:
    <?php
    namespace mysite\Mail;
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Http\Request;
    class ContactMail extends Mailable
    {
        use Queueable, SerializesModels;
        public $email;
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct(Request $request)
        {
           $this->email=$request;
        }
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->subject($this->email['subject'])
                    ->from($this->email['mail'])
                    ->to('Tirimaxx@gmail.com')
                    ->view('Index.contactmail');
        }
    }
    mentre il form è rimasto lo stesso del primo messaggio.
    Grazie per l'aiuto

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.