13

Laravel 4 で新しいメール クラスを使用していますが、メールが送信されたかどうかを確認する方法を知っている人はいますか? 少なくとも、メールが MTA に正常に引き渡されたことは...

4

3 に答える 3

11

もしあなたがそうするなら

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

いつ送信されたかどうかがわかりますが、SwiftMailer は失敗した受信者を認識しているため、より良い可能性がありますが、Laravel はその情報を取得するのに役立つ関連パラメーターを公開していません。

/**
 * 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;
}

しかし、Laravel の Mailer を拡張して、その機能 ($failedRecipients) を新しいクラスのメソッド send に追加することができます。

編集

4.1 では、失敗した受信者にアクセスできるようになりました。

Mail::failures();
于 2013-06-11T02:57:26.133 に答える
1
if(count(Mail::failures()) > 0){
                //$errors = 'Failed to send password reset email, please try again.';
                $message = "Email not send";
            }
return $message;
于 2015-11-29T10:38:58.237 に答える
1

Antonio は、どれが失敗したか分からないことについて良い点を述べています。

しかし、本当の問題は成功です。ANY が失敗したかのように、どれが失敗したかは気にしません。失敗したかどうかを確認する例を次に示します。

$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('me@example.com', '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.');
}
于 2014-03-03T01:21:21.733 に答える