2014-08-27 75 views
1

你好,我试图从一个应用程序发送一封电子邮件,我正在用Laravel使用ajax建立一个按钮时按下。使用Laravel不能发送电子邮件

这里是我的邮件文件

<?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, 

); 

控制器功能

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> 

最后我的路线

Route::get('sendMailReject','[email protected]'); 

当我看到Chrome控制台上的日志它给了我一个内部错误控制器

回答

2

乍一看,你已经在你的控制器以下错误:

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

取出;

+0

感谢您的回答,但问题仍然存在...... – sarakinos 2014-08-27 14:24:52

3

试试这个:

你的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, 

); 

在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> 

你routes.php文件

Route::get('sendMailReject','[email protected]'); 

在您的控制器

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; 
} 
0

我有类似的问题。它可以在localhost上运行,但在godaddy共享主机上运行,​​它不起作用。 来自laracast的讨论。

从另一个网站...

GoDaddy的不会让你通过外部SMTP发送邮件上的共享的托管计划。 以下是GoDaddy自己的话: 但是,由于安全原因,我们非常感谢您的反馈并为任何不便之处表示歉意,但我们无法允许在共享主机环境中使用外部SMTP服务器。如果您需要其他SMTP中继,则需要考虑虚拟专用服务器或专用服务器。 所以..我想简短的回答是,你需要一个更好的主机。