2014-08-27 82 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中繼,則需要考慮虛擬專用服務器或專用服務器。 所以..我想簡短的回答是,你需要一個更好的主機。