[FEAT] 實作公共事業費逾期提醒、租戶自訂通知設定及發送測試信功能
All checks were successful
ERP-Deploy-Demo / deploy-demo (push) Successful in 56s
All checks were successful
ERP-Deploy-Demo / deploy-demo (push) Successful in 56s
This commit is contained in:
@@ -43,4 +43,55 @@ class SystemSettingController extends Controller
|
||||
|
||||
return redirect()->back()->with('success', '系統設定已更新');
|
||||
}
|
||||
|
||||
/**
|
||||
* 測試發送通知信
|
||||
*/
|
||||
public function testNotification(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'settings' => 'required|array',
|
||||
'settings.*.key' => 'required|string',
|
||||
'settings.*.value' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$settings = collect($validated['settings'])->pluck('value', 'key');
|
||||
|
||||
$senderEmail = $settings['notification.utility_fee_sender_email'] ?? null;
|
||||
$senderPassword = $settings['notification.utility_fee_sender_password'] ?? null;
|
||||
$recipientEmailsStr = $settings['notification.utility_fee_recipient_emails'] ?? null;
|
||||
|
||||
if (empty($senderEmail) || empty($senderPassword) || empty($recipientEmailsStr)) {
|
||||
return back()->with('error', '請先填寫完整發信帳號、密碼及收件者信箱。');
|
||||
}
|
||||
|
||||
// 動態覆寫應用程式名稱與 SMTP Config
|
||||
$tenantName = tenant('name') ?? config('app.name');
|
||||
config([
|
||||
'app.name' => $tenantName,
|
||||
'mail.mailers.smtp.username' => $senderEmail,
|
||||
'mail.mailers.smtp.password' => $senderPassword,
|
||||
'mail.from.address' => $senderEmail,
|
||||
'mail.from.name' => $tenantName . ' (系統通知)'
|
||||
]);
|
||||
|
||||
// 清理原先可能的 Mailer 實例,確保使用新的 Config
|
||||
\Illuminate\Support\Facades\Mail::purge();
|
||||
|
||||
// 解析收件者
|
||||
$recipients = array_map('trim', explode(',', $recipientEmailsStr));
|
||||
$validRecipients = array_filter($recipients, fn($e) => filter_var($e, FILTER_VALIDATE_EMAIL));
|
||||
|
||||
if (empty($validRecipients)) {
|
||||
return back()->with('error', '無效的收件者 Email 格式。');
|
||||
}
|
||||
|
||||
try {
|
||||
\Illuminate\Support\Facades\Mail::to($validRecipients)->send(new \App\Mail\TestNotificationMail());
|
||||
return back()->with('success', '測試信件已成功發送,請檢查收件匣。');
|
||||
} catch (\Exception $e) {
|
||||
return back()->with('error', '測試發信失敗: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user