feat(webstatement): tingkatkan proses pengiriman email dengan PHPMailer
- **Migrasi ke PHPMailer:** - Mengganti penggunaan `Illuminate\Support\Facades\Mail` ke PHPMailer untuk pengiriman email. - Menambahkan service baru `PHPMailerService` dengan dukungan autentikasi NTLM/GSSAPI. - Mengintegrasikan logika pengiriman email ke dalam `StatementEmail` menggunakan PHPMailer. - Memindahkan logika attachment dan body email ke helper method pada kelas `StatementEmail`. - **Perbaikan Logging dan Penanganan Error:** - Menambah logging lebih mendetail pada proses pengiriman email, termasuk informasi seperti penerima, subjek, dan status pengiriman. - Menambahkan fallback untuk pembuatan konten HTML jika terjadi kegagalan rendering pada template Blade. - Menambahkan pengecekan dan logging untuk kegagalan pengiriman email dengan mekanisme exception handling. - **Peningkatan Template Email:** - Memperbaiki elemen ulasan pada template email untuk mendukung tampilan yang lebih bersih menggunakan `list-style-type: none`. - Memodifikasi markup footer untuk memberikan batas terformat lebih baik. - **Optimasi Proses Backend:** - Menambahkan delay antar pengiriman email untuk menghindari rate limiting pada koneksi NTLM/GSSAPI. - Menyediakan format nama attachment dinamis berdasarkan rekening dan periode laporan. - Memanfaatkan konfigurasi enkripsi dinamis, dengan fallback untuk pengujian/development. Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
@@ -9,7 +9,6 @@ use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Webstatement\Models\Account;
|
||||
use Modules\Webstatement\Models\PrintStatementLog;
|
||||
@@ -19,6 +18,7 @@ use Modules\Basicdata\Models\Branch;
|
||||
/**
|
||||
* Job untuk mengirim email PDF statement ke nasabah
|
||||
* Mendukung pengiriman per rekening, per cabang, atau seluruh cabang
|
||||
* Menggunakan PHPMailer dengan dukungan NTLM/GSSAPI
|
||||
*/
|
||||
class SendStatementEmailJob implements ShouldQueue
|
||||
{
|
||||
@@ -47,7 +47,7 @@ class SendStatementEmailJob implements ShouldQueue
|
||||
$this->batchId = $batchId ?? uniqid('batch_');
|
||||
$this->logId = $logId;
|
||||
|
||||
Log::info('SendStatementEmailJob created', [
|
||||
Log::info('SendStatementEmailJob created with PHPMailer', [
|
||||
'period' => $this->period,
|
||||
'request_type' => $this->requestType,
|
||||
'target_value' => $this->targetValue,
|
||||
@@ -320,12 +320,15 @@ class SendStatementEmailJob implements ShouldQueue
|
||||
// Dapatkan path absolut file
|
||||
$absolutePdfPath = Storage::path($pdfPath);
|
||||
|
||||
// Kirim email
|
||||
// Add delay between email sends to prevent rate limiting
|
||||
sleep(1); // 2 second delay
|
||||
Mail::to($emailAddress)->send(
|
||||
new StatementEmail($statementLog, $absolutePdfPath, false)
|
||||
);
|
||||
// Buat instance StatementEmail dengan PHPMailer
|
||||
$statementEmail = new StatementEmail($statementLog, $absolutePdfPath, false);
|
||||
|
||||
// Kirim email menggunakan PHPMailer
|
||||
$emailSent = $statementEmail->send($emailAddress);
|
||||
|
||||
if (!$emailSent) {
|
||||
throw new \Exception("Failed to send email to {$emailAddress} for account {$account->account_number}");
|
||||
}
|
||||
|
||||
// Update status log dengan email yang digunakan
|
||||
$statementLog->update([
|
||||
@@ -334,7 +337,7 @@ class SendStatementEmailJob implements ShouldQueue
|
||||
'email_address' => $emailAddress // Simpan email yang digunakan untuk tracking
|
||||
]);
|
||||
|
||||
Log::info('Email sent for account', [
|
||||
Log::info('Email sent via PHPMailer for account', [
|
||||
'account_number' => $account->account_number,
|
||||
'branch_code' => $account->branch_code,
|
||||
'email' => $emailAddress,
|
||||
@@ -342,6 +345,9 @@ class SendStatementEmailJob implements ShouldQueue
|
||||
'pdf_path' => $pdfPath,
|
||||
'batch_id' => $this->batchId
|
||||
]);
|
||||
|
||||
// Add delay between email sends to prevent rate limiting
|
||||
sleep(2); // 2 second delay for NTLM/GSSAPI connections
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user