baserproject / basercms

baserCMS : Based Website Development Project
http://basercms.net
Other
173 stars 131 forks source link

【メール】送信情報をデータベースに保存しない場合にファイルを添付すると送信に失敗する #4036

Open seto1 opened 1 week ago

seto1 commented 1 week ago

baserCMS version : 4.8.2

[SocketException] ファイルが見つかりません。: "/var/www/html/_baser/seto1/app/webroot/files/mail/limited/1/messages/Array"
seto1 commented 1 week ago

関連: https://github.com/baserproject/basercms/issues/1839

seto1 commented 1 week ago

このコミットで追加されたこの判定を外すと送信できるようになる

https://github.com/baserproject/basercms/commit/851d75b52481f65815f1a5f40c57f1fe84b9b308#diff-98e69007c6e93decfe08678a50483282edb69da15fa79303e030bd74765f260eR136

if(!$this->useApprover) continue;
seto1 commented 1 week ago

この対応だけだとアップロードしたファイルのリネーム前のファイルが削除されずに残ってしまう https://github.com/baserproject/basercms/issues/4036#issuecomment-2490106093 例えばブログ記事のアイキャッチの場合、 00000006_eye_catch.jpg のようなファイル名になるのが正しいが、元のファイル名のファイルも重複して存在する状態になる

seto1 commented 1 week ago

応急処置感がすごいけど一時的な対応案

public function mailMailMessagebeforeValidate($event) {
    $Model = $event->subject();
    if (empty($Model->mailContent['MailContent']['save_info'])) {
        $Model->Behaviors->BcUpload->useApprover = true;
    }
}

これだとファイルが残るので、「送信情報をデータベースに保存する」に設定した上で送信後に削除する案

public function mailMailAfterSendEmail($event) {
    $Controller = $event->subject();
    // 必要に応じて条件追加
    $Controller->MailMessage->delete($event->data['data']['MailMessage']['id']);
}
ryuring commented 1 week ago

@seto1 こちらも応急処置感すごいけど、そして、元のファイルも存在しちゃうけど、候補という事で、、、

$this->useApprover = (CakePlugin::loaded('CuApprover') && in_array($Model->alias, ['Content', 'BlogPost', 'MailMessage']));