亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如果控制器沒有返回 $this->render() 響應,則不發送

如果控制器沒有返回 $this->render() 響應,則不發送

PHP
慕斯709654 2022-10-14 14:47:15
我有一個 Symfony 項目(非常簡化),如下所示:控制器/MyToolController.phpnamespace App\Controller;use App\Services\ToolsService;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;class MyToolController extends AbstractController{    private $toolsService;    /**     * @param ToolsService|null $toolsService     */    public function __construct(ToolsService $toolsService = null) {        $this->toolsService = $toolsService;    }    public function run() {        // some more code here...        $mailContent = $this->render('site/mail.html.twig', $data)->getContent();        $this->toolsService->sendMail($from, $to, $bcc, $mailContent, $subject);        // if I remove the following line, no emails are sent out!        return $this->render('site/thankyou.html.twig', $data);    }}服務/MyToolService.phpnamespace App\Services;class ToolsService{    /** @var \Swift_Mailer */    private $mailer;    /**     * @param \Swift_Mailer $mailer     */    public function __construct(\Swift_Mailer $mailer)    {        $this->mailer = $mailer;    }    public function sendMail($from, $to, $bcc, $body, $subject) {        $mail = ( new \Swift_Message() )            ->setSubject($subject)            ->setFrom($from)            ->setTo($to)            ->setBcc($bcc)            ->addPart($body, 'text/html');        $res = $this->mailer->send($mail);        $this->logger->info('Email sent');        return $res;    }}如果您看一下,MyToolController.php您會看到我調用了發送電子郵件的服務。如果我在我的函數中返回一個Response對象run(),一切都會順利 - 但如果我省略它,則不會發送任何內容。如果我在一個循環中發送多封電子郵件并且遇到超時也是如此。無論如何都會調用Strangely $mailer->send()- 它返回 1 - 我在sendmail()函數中寫入的日志中看到一個條目。但是沒有電子郵件離開服務器。這是我的 SwiftMailer 配置:swiftmailer:    url: '%env(MAILER_URL)%'    spool: { type: 'memory' }
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您的郵件正在內存中假脫機,這意味著

當您使用假脫機將電子郵件存儲到內存時,它們將在內核終止之前立即發送。這意味著只有在整個請求被執行且沒有任何未處理的異?;蛉魏五e誤的情況下才會發送電子郵件。

如果您不Response從控制器返回對象,則會出現未處理的異常,整個請求將不會被執行,并且永遠不會發送郵件。

控制器需要返回 aSymfony\Component\HttpFoundation\Response以便可以正常處理請求。如果您想返回一個空響應,您可以簡單地執行以下操作:

return new Response();


查看完整回答
反對 回復 2022-10-14
  • 1 回答
  • 0 關注
  • 86 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號