gpt4 book ai didi

php - 调用发送函数后如何获取 Laravel 邮件响应?

转载 作者:行者123 更新时间:2023-12-03 23:03:41 24 4
gpt4 key购买 nike

是否可以在 Mail:to 调用方法之后在 Laravel 中获得邮件响应?最好的地方在哪里?

Mail::to($order->email)
->send(new ThankYouMail($order->fresh()));
我正在使用 Sendgrid 作为 Laravel 邮件驱动程序,并希望获取 messageID 以便用于以后的 Sendgrid Hook (获取电子邮件传递状态等)。
public function build()
{
$from = 'info@domain.com';
$subject = 'Thank You for Ordering';
$name = 'Name XYZ';

$order_id = (string)$this->order->id;
$headerData = [
'category' => 'Order',
'unique_args' => [
'OrderID' => $order_id
]
];

$header = $this->asString($headerData);

$this->withSwiftMessage(function ($message) use ($header) {
$message->getHeaders()
->addTextHeader('X-SMTPAPI', $header);
});

return $this->view('mails.thank-you')
->from($from, $name)
->replyTo($from, $name)
->subject($subject);
}
更新:2019/06/25
如果有人想要获取和存储邮件状态,那么使用 Sendgrid Event Webhook 是最好的解决方案。
  • 在电子邮件发送过程中,您可能会(在电子邮件中)附加一个独特的参数,如 OrderID(检查 Sendgrid API 或我上面的示例)。
  • 之后,您必须创建 API POST 路由以接收/存储 Webhook 电子邮件数据,您可以在其中过滤/瞄准和连接状态数据。

  • 更新 #2:2021/01/21
    为了从 Sendgrid 接收数据,需要创建一些逻辑:
    路线:
    Route::post('sendgrid/events','SendgridOrderEventController@store');
    Controller :
    /**
    * Store a sendgrid event in database.
    * @param App\Http\Requests\API\CreateSendgridOrderEventRequest $request
    * @return Response
    */
    public function store(CreateSendgridOrderEventRequest $request)
    {
    $sendgrid_request = $request->all()[0];

    if($sendgrid_request['OrderID']) {

    $sendgrid_request['order_id'] = $sendgrid_request['OrderID'];
    $sendgrid_request['sendgrid_timestamp'] = $sendgrid_request['timestamp'];
    $sendgrid_request['sendgrid_message_id'] = $sendgrid_request['sg_message_id'];

    $sendgridOrderEvent = SendgridOrderEvent::create($sendgrid_request);
    }

    return $this->sendResponse($sendgridOrderEvent, 'SendGrid Order Event created successfully');
    }
    在 Sendgrid 仪表板中,找到 webhook 设置并放置您的 API POST 端点: api.yourdomain.com/sendgrid/events所以在那之后,Sendgrid 将能够生成事件并向您的 API 端点发送 POST 请求,您的逻辑可以在该端点接收和处理传入数据。
    更多详情: https://sendgrid.com/docs/for-developers/tracking-events/event/

    最佳答案

    一个 Illuminate\Mail\Events\MessageSent 邮件发送后发送[1]

    此事件与 swift 消息实例的实例一起分派(dispatch)。 [2]

    您可以监听此事件并获取消息 ID。

    这个事件可以通过在 EventServiceProvider 的 boot 方法中注册来订阅。一个事件监听器。 [3]

    protected $listen = [
    'Illuminate\Mail\Events\MessageSent' => [
    'App\Handlers\Events\MessageIdTranscript',
    ],
    ];
    MessageIdTranscript是一个带有 handle 的普通 PHP 类与事件一起调用的方法。 Swift_Message 的实例通过名为 getId 的公共(public) getter 方法公开消息 ID .

    namespace App\Handlers\Events;

    use Illuminate\Mail\Events\MessageSent;

    class MessageIdTranscript {

    /**
    * Handle the event.
    *
    * @param MessageSent $event
    * @return void
    */
    public function handle(MessageSent $event)
    {
    $messageId = $event->message->getId();
    // continue handling...
    }

    }

    关于php - 调用发送函数后如何获取 Laravel 邮件响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55574008/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com