Yii2 使用try catch重新发送电子邮件是否超出内存限制?

Yii2 使用try catch重新发送电子邮件是否超出内存限制?,yii2,Yii2,我的服务器连接看起来不稳定,有时它成功发送电子邮件,有时它失败 错误是 Swift_TransportException Connection to ssl://in-v3.mailjet.com:465 Timed Out 在上述情况下,如果捕获到异常,我会尝试更改代码以重新发送电子邮件 这是我在控制器中的代码 //this line after import class ini_set('memory_limit', '256M'); public function resend_on

我的服务器连接看起来不稳定,有时它成功发送电子邮件,有时它失败

错误是

Swift_TransportException

Connection to ssl://in-v3.mailjet.com:465 Timed Out
在上述情况下,如果捕获到异常,我会尝试更改代码以重新发送电子邮件

这是我在控制器中的代码

//this line after import class
ini_set('memory_limit', '256M');

public function resend_on_error($tried)
{
  try{
    $message = Yii::$app->mail->compose();
    if (Yii::$app->user->isGuest) {
      $message->setFrom('from@domain.com');
    } else {
      $message->setFrom(Yii::$app->user->identity->email);
    }
    $message->setTo(Yii::$app->params['adminEmail'])
    ->setFrom(Yii::$app->params['adminEmail'])
    ->setTo("mymail@gmail.com")
    ->setSubject('Reset Password '.$tried)
    ->setHtmlBody($this->renderAjax('//email/_konten',['content'=>'goes here']))
    ->send();
     return 1;

  }catch(\Swift_TransportException $e){
    $this->resend_on_error($tried++);
  }
}

public function actionEmail()
{
  $tried = 1;
  if($this->resend_on_error($tried) == 1){
      return "send success";
  }
}
但我有这个

Allowed memory size of 268435456 bytes exhausted (tried to allocate 4096 bytes)
请告诉我我做错了什么


提前谢谢。

这不是很明显吗?您正在捕获SSL超时异常,但立即再次运行相同的函数,并引发相同的异常,此循环会一直发生,直到内存耗尽


您可以递增
$trued
,但不检查其值。我认为你应该试着发送邮件5次,如果它仍然不起作用的话。有些东西肯定坏得很厉害,需要技术上的注意。在这种情况下,捕获SwiftTransport异常并向最终用户抛出另一个异常。

你的php内存不足。检查php配置中的内存限制,并将其临时设置为更高。问题是,为什么你的服务器会消耗这么多内存?@R13e因为用我上面的代码重新发送电子邮件,对吗?可能,但我不认为这是原因。如果我理解正确,重发过程将只尝试分配20480字节。这一点也不多。@R13e增加内存限制并不能使它工作。有什么建议吗?我想你的代码会产生一个循环,因此你的内存会用完。