2013-06-11 19 views
13

Tôi đang sử dụng lớp thư mới trong Laravel 4, có ai biết cách kiểm tra xem email đã được gửi chưa? Ít nhất đó qua đường bưu điện đã được trao cho thành công giao cho MTA ...Lớp thư của Laravel 4, làm cách nào để biết email đã được gửi chưa?

+0

Ừ cant bạn chỉ cần đi đến cấp ứng dụng> config-> mail và thay đổi giả vờ => đúng ?? Bằng cách đó bạn có thể xem các thông điệp trong nhật ký – KyleK

Trả lời

11

Nếu bạn làm

if (! Mail::send(array('text' => 'view'), $data, $callback)) 
{ 
    return View::make('errors.sendMail'); 
} 

Bạn sẽ biết khi nào nó được gửi hay không, nhưng nó có thể là tốt hơn, vì SwiftMailer biết để Mà người nhận nó thất bại, nhưng Laravel là không để lộ các thông số liên quan để giúp chúng tôi có được thông tin rằng:

/** 
* Send the given Message like it would be sent in a mail client. 
* 
* All recipients (with the exception of Bcc) will be able to see the other 
* recipients this message was sent to. 
* 
* Recipient/sender data will be retrieved from the Message object. 
* 
* The return value is the number of recipients who were accepted for 
* delivery. 
* 
* @param Swift_Mime_Message $message 
* @param array    $failedRecipients An array of failures by-reference 
* 
* @return integer 
*/ 
public function send(Swift_Mime_Message $message, &$failedRecipients = null) 
{ 
    $failedRecipients = (array) $failedRecipients; 

    if (!$this->_transport->isStarted()) { 
     $this->_transport->start(); 
    } 

    $sent = 0; 

    try { 
     $sent = $this->_transport->send($message, $failedRecipients); 
    } catch (Swift_RfcComplianceException $e) { 
     foreach ($message->getTo() as $address => $name) { 
      $failedRecipients[] = $address; 
     } 
    } 

    return $sent; 
} 

nhưng bạn có thể mở rộng Mailer Laravel và thêm rằng chức năng ($ failedRecipients) cho phương thức gửi của lớp mới của bạn.

EDIT

Trong 4.1 bây giờ bạn có thể truy cập đến người nhận không sử dụng

Mail::failures(); 
+0

Cảm ơn nhưng tôi chỉ cần phần đầu tiên nhưng nếu ví dụ tôi có người nhận này "ebc @ vd" Tôi vẫn nhận được số 1 và nếu tôi sử dụng 'fdfdfd' cho người nhận, nó sẽ bị treo! Tôi muốn nhận được 0 trong trường hợp nào. Tôi nghĩ rằng nó có khả năng triển khai Laravel .. – ebelendez

+0

Vâng, đó là lạ, không nên treo theo cách này, nhưng Laravel sử dụng SwiftMailer, vì vậy nó phải là một vấn đề trong đó. Về việc gửi thư, đôi khi bạn không gặp lỗi trong khi gửi thư, bởi vì máy chủ SMTP đã chấp nhận thư và nó sẽ gửi lại một e-mail thông báo rằng thư của bạn chưa được gửi. –

+2

Chỉ cần lưu ý rằng với 4.1, bây giờ chúng ta có thể lấy "failedRecipients" thông qua 'failure()' :) – seus

1

Antonio có một điểm tốt về việc không biết mà thất bại.

Câu hỏi thực sự là thành công. Bạn không quan tâm đến thất bại nhiều như thể BẤT K failed thất bại. Dưới đây là ví dụ để kiểm tra xem có bất kỳ lỗi nào không.

$count=0; 
$success_count = \Mail::send(array('email.html', 'email.text'), $data, function(\Illuminate\Mail\Message $message) use ($user,&$count) 
{ 
    $message->from($user->primary_email, $user->attributes->first.' '.$user->attributes->last); 
    // send a copy to me 
    $message->to('[email protected]', 'Example')->subject('Example Email'); 
    $count++ 
    // send a copy to sender 
    $message->cc($user->primary_email); 
    $count++ 
} 
if($success_count < $count){ 
    throw new Exception('Failed to send one or more emails.'); 
} 
1
if(count(Mail::failures()) > 0){ 
       //$errors = 'Failed to send password reset email, please try again.'; 
       $message = "Email not send"; 
      } 
return $message;