Ошибка повторной отправки почты

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Ошибка повторной отправки почты

Сообщение Diplodok »

Помогите разобраться.
Пользуюсь swiftmailer. Обычная отправка писем сотрудникам. Бывает почтовый сервер тупит и письмо не отправляется. На этот случай сделал сохранение объекта в базу путем сериализации и в base64. Потом кроном происходит обратное и заново попытка отправить.
Пару месяцев назад когда тестировал всё работало. Временно не стали этим пользоваться, а теперь эта конструкция при попытке отправить письмо выдает ошибку:
fwrite() expects parameter 1 to be resource, integer given
in /home/store/web-test/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php at line 231
/** Write this bytes to the stream */
protected function _commit($bytes)
{
if (isset($this->_in)) {
$bytesToWrite = strlen($bytes);
$totalBytesWritten = 0;

while ($totalBytesWritten < $bytesToWrite) {
$bytesWritten = fwrite($this->_in, substr($bytes, $totalBytesWritten)); // Ошибка вылезает здесь
if (false === $bytesWritten || 0 === $bytesWritten) {
break;
}

$totalBytesWritten += $bytesWritten;
}

if ($totalBytesWritten > 0) {
return ++$this->_sequence;
Код в модели для сохранения объекта swiftmail в бд:

Код: Выделить всё

    public function addObjMail($obj, $priority = 0) 
    {
        $this->objmail = base64_encode(serialize($obj));
        $this->employee_id = Yii::$app->user->id;
        $this->send_count = 0;
        $this->priority = $priority;
        $this->save();
    }
Код получения обратно объекта:

Код: Выделить всё

    public function getObjMail() 
    {
        return unserialize(base64_decode($this->objmail));
    }
Повторная отправка в контроллере:

Код: Выделить всё

        $mdlMailStorage = MailStorage::find()
                ->orderBy([
                    'priority' => SORT_DESC,
                    'created' => SORT_ASC
                ])
                ->limit(20)
                ->all();
        foreach ($mdlMailStorage as $Mail) {
            $result = 0;
            $obj = $Mail->objMail;
            try {
                $result = $obj->send();
            } catch (\Swift_TransportException $exc) {
                // отправка письма не удалась
            }
            if($result) {
                $Mail->delete();
                continue;
            }
            $Mail->send_count++;
            $Mail->save;
        }
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Ошибка повторной отправки почты

Сообщение SiZE »

Вопрос в чем?
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Re: Ошибка повторной отправки почты

Сообщение Diplodok »

Вопрос в том как избавиться от ошибки.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Ошибка повторной отправки почты

Сообщение SiZE »

Что в тексте ошибке не понятно?
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Re: Ошибка повторной отправки почты

Сообщение Diplodok »

Текст как раз понятен, а вот какого лешего это вылезает не понятно.
Методом научного тыка выяснил, что такая ошибка вылетает после неудачной отправки почты. Видимо где-то сохраняется неудачная попытка.
Теперь вопрос немного другой: как откатить неудачную попытку? Может свойство какое есть в майлере?
Закрыто