第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在php中發(fā)送郵件之前向用戶發(fā)送響應

如何在php中發(fā)送郵件之前向用戶發(fā)送響應

Go
開滿天機 2021-09-18 21:30:36
我正在開發(fā)一個項目,有兩個過程。發(fā)送郵件。將響應發(fā)送回用戶。我需要做這一切,但這需要很多時間。所以現(xiàn)在我正在考慮使用多線程。任何人都可以幫助如何在 php 中實現(xiàn)這一目標嗎?我只需要盡快發(fā)送回復。這是我的代碼,我創(chuàng)建了一個發(fā)送郵件的功能,成功完成郵件發(fā)送后,我將使用 JSON 編碼向用戶發(fā)送響應。/刪除預訂功能/public function deleteBooking($id){     $where = array('id'=>$id);      $bookingData = $this->Cnc_model->getData('bookings', array('*'), array('id'=>$id));      if(!empty($bookingData)){        if(!empty($bookingData[0]['estimator_id']) && $bookingData[0]['estimator_id'] != 0){                    $name = $this->Cnc_model->getData('users',array('username', 'email'), array('user_id'=> $bookingData[0]['estimator_id']));                       $estimator_name = $name[0]['username'];                    $estimator_mail = $name[0]['email'];                     }                if($bookingData[0]['customer_id'] != 0){                    $cname = $this->Cnc_model->getData('customers',array('name', 'office_contact_email'), array('id'=> $bookingData[0]['customer_id']));                       $customer_name = $cname[0]['name'];                    $customer_mail = $cname[0]['office_contact_email'];                }                $mailHeading = 'Booking Deleted';                $smallHeading = 'Your Booking with '.$customer_name.' on '.$bookingData[0]['booking_date'].' has been deleted by admin.';                $subject = 'Booking Deleted';                $smallHeadingcustomer = 'Your Booking with '.$estimator_name.' on '.$bookingData[0]['booking_date'].' has been deleted by admin.';                $status = 5;/*這里我調(diào)用發(fā)送電子郵件功能*/                $result = $this->emailSent($id, $mailHeading, $smallHeading, $subject, $smallHeadingcustomer,$status);
查看完整描述

2 回答

?
阿波羅的戰(zhàn)車

TA貢獻1862條經(jīng)驗 獲得超6個贊

您可以使用 ignore_user_abort(true); 設置客戶端斷開連接是否應導致腳本中止。這將斷開與您的當前連接,然后將響應發(fā)送到前端,但仍會執(zhí)行其余代碼。


 ignore_user_abort(true);


    ob_start();

    echo "success";


    $serverProtocole = filter_input(INPUT_SERVER, 'SERVER_PROTOCOL', FILTER_SANITIZE_STRING);

    header($serverProtocole.' 200 OK');

    header('Content-Encoding: none');

    header('Content-Length: '.ob_get_length());

    header('Connection: close');


    ob_end_flush();

    ob_flush();

    flush();

最初對您的 API 使用后端驗證,然后使用上面的代碼發(fā)送響應,然后您可以編寫代碼給您的用戶發(fā)送電子郵件,這樣前端將獲得響應并執(zhí)行腳本,直到遇到返回或死亡;這種方法的問題是,如果發(fā)送電子郵件時出現(xiàn)錯誤,您無法向前端發(fā)送響應。


否則,您可以在代碼中使用郵件隊列稍后完成這項工作


查看完整回答
反對 回復 2021-09-18
?
BIG陽

TA貢獻1859條經(jīng)驗 獲得超6個贊

這取決于你想走多深。理想的方法是運行 RabbitMQ 或 Gearman 服務器并設置“發(fā)送郵件”作業(yè)供它們處理。提交作業(yè)非???,并且允許腳本完成并將響應發(fā)送回用戶,但當然這將涉及設置更多基礎設施、編寫/維護更多代碼來處理作業(yè)和處理重試/錯誤狀態(tài)。

可能問題最少的方法是運行將中繼郵件的本地郵件服務器。傳遞應該非常快,會給出更好的“有效”響應(至少用戶會知道郵件已傳遞到本地郵件服務器)并允許腳本繼續(xù)。如果電子郵件失敗,則本地郵件服務器會將其作為退回給管理員或“發(fā)件人”用戶進行處理。

概述一種方式在這里將意味著發(fā)送響應第一個,然后處理郵件-這意味著它不可能報告故障給用戶。不理想,但這取決于您的情況 - 也許管理員處理失敗的消息并可以重新發(fā)送?



查看完整回答
反對 回復 2021-09-18
  • 2 回答
  • 0 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號