Пользуюсь swiftmailer. Обычная отправка писем сотрудникам. Бывает почтовый сервер тупит и письмо не отправляется. На этот случай сделал сохранение объекта в базу путем сериализации и в base64. Потом кроном происходит обратное и заново попытка отправить.
Пару месяцев назад когда тестировал всё работало. Временно не стали этим пользоваться, а теперь эта конструкция при попытке отправить письмо выдает ошибку:
fwrite() expects parameter 1 to be resource, integer given
Код в модели для сохранения объекта swiftmail в бд: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;
Код: Выделить всё
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;
}