sarakinos
sarakinos

Reputation: 686

Can't send an email using Laravel

Hello i'm trying to send an email from an app i'm building with Laravel using ajax when a button is pressed.

Here is my mail file

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
    |
    */

    'driver' => 'smtp',

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    'host' => 'smtp.gmail.com',

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */

    'port' => 465,

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => array('address' => null, 'name' => null),

    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */

    'encryption' => 'ssl',

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

    'username' => '*******@gmail.com',

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */

    'password' => '********',

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

    /*
    |--------------------------------------------------------------------------
    | Mail "Pretend"
    |--------------------------------------------------------------------------
    |
    | When this option is enabled, e-mail will not actually be sent over the
    | web and will instead be written to your application's logs files so
    | you may inspect the message. This is great for local development.
    |
    */

    'pretend' => false,

);

Controller function

public function sendMailReject(){

    $user = array(
        'email'=>'*****@gmail.com',
        'name'=>'Laravelovich'
    );

    // the data that will be passed into the mail view blade template
    $data = array(
        'detail'=>'Your awesome detail here',
        'name'  => 'nampi';
    );

    // use Mail::send function to send email passing the data and using the $user variable in the closure
    Mail::send('email.emailReject', $data, function($message) use ($user)
    {
        $message->from('*****@gmail.com', 'Site Admin');
        $message->to($user['email'], $user['name'])->subject('Welcome to My Laravel app!');
    });
}

Jquery

<script>
$(document).ready(function(){
    $("#rejMail").click(function(){
        $.ajax({
            type:"GET",
            url:"sendMailReject",
            success:function(){
                alert("ok");
            }
        });
    });
});
</script>

And finally my route

Route::get('sendMailReject','EmailController@sendMailReject');

When i see the log on the chrome console it gives me an internal error in the controller

Upvotes: 1

Views: 2460

Answers (3)

FONGOH MARTIN
FONGOH MARTIN

Reputation: 181

I had similar problem. It works on localhost but on something like godaddy shared host, it does not work. From laracast discussion.

From another site...

GoDaddy does not let you send emails via external SMTP on a shared hosting plan. Here's GoDaddy's own words: We appreciate your feedback and apologize for any inconvenience, however, due to security reasons, we are not able to allow the use of external SMTP servers in a shared hosting environment. If you need additional SMTP relays, you would need to consider a virtual dedicated or dedicated server. So.. I guess the short answer is, you need a better host.

Upvotes: 0

D&#233;basish Nayak
D&#233;basish Nayak

Reputation: 86

Try this:

Your config/mail.php:

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
    |
    */

    'driver' => 'smtp',

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    'host' => 'smtp.gmail.com',

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */

    'port' => 587,

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => array('address' = '******@gmail.com', 'name' = 'Site Admin'),

    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */

    'encryption' => 'tls',

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

    'username' => '*******@gmail.com',

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */

    'password' => '********',

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

    /*
    |--------------------------------------------------------------------------
    | Mail "Pretend"
    |--------------------------------------------------------------------------
    |
    | When this option is enabled, e-mail will not actually be sent over the
    | web and will instead be written to your application's logs files so
    | you may inspect the message. This is great for local development.
    |
    */

    'pretend' => false,

);

In jQuery

<script>
$(document).ready(function(){
    $("#rejMail").click(function(){
        $.ajax({
            type:"GET",
            url:"sendMailReject",
            success:function(){
                alert("Mail sent successfully");
            },
            error:function() {
                alert('Error in sending mail');
            }
        });
    });
});
</script>

Your routes.php

Route::get('sendMailReject','EmailController@sendMailReject');

In your controller

public function sendMailReject(){

    $user = array(
        'email'=>'*****@gmail.com',
        'name'=>'Laravelovich'
    );

    // the data that will be passed into the mail view blade template
    $data = array(
        'detail'=>'Your awesome detail here',
        'name'  => 'nampi'
    );

    // use Mail::send function to send email passing the data and using the $user variable in the closure
    Mail::send('email.emailReject', $data, function($message) use ($user)
    {
        $message->to($user['email'], $user['name'])->subject('Welcome to My Laravel app!');
    });

    echo true;
}

Upvotes: 0

The Alpha
The Alpha

Reputation: 146219

At first glance, you have following error in your controller:

$data = array(
    'detail' => 'Your awesome detail here',
    'name'   => 'nampi'; // <---
);

Remove the ;.

Upvotes: 2

Related Questions