From 4433ef184e8260e877c30f6bec92a8b370fe4fd1 Mon Sep 17 00:00:00 2001 From: Thanakorn S Date: Wed, 13 May 2026 16:15:19 +0700 Subject: [PATCH] fix registration --- app/assets/utils/module/mailer.php | 20 +++++++++++--------- app/login/api/engine/register.php | 22 +++++++++++++++------- app/login/register.php | 29 +++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/app/assets/utils/module/mailer.php b/app/assets/utils/module/mailer.php index 03b1709..c53b124 100644 --- a/app/assets/utils/module/mailer.php +++ b/app/assets/utils/module/mailer.php @@ -85,6 +85,9 @@ class mailer{ "input" => $input ]); + // When silent=true, return false on failure instead of calling exit(). + $silent = !empty($input['silent']); + $revise = []; $revise["subject"] = $input["subject"]; $revise["message"] = $input["message"]; @@ -141,18 +144,17 @@ class mailer{ $mail->AltBody = $revise["message"]; $mail->send(); - } + return true; + } catch (phpmailerException $e) { - $answer = []; - $answer["success"] = 0; - $answer["message"] = "Error1: ".nl2br($e->errorMessage()); - exit(json_encode($answer)); + $err = "Error1: " . nl2br($e->errorMessage()); + if ($silent) { error_log('[mailer] ' . strip_tags($err)); return false; } + exit(json_encode(["success" => 0, "message" => $err])); } catch (Exception $e) { - $answer = []; - $answer["success"] = 0; - $answer["message"] = "Error2: ".nl2br($mail->ErrorInfo); - exit(json_encode($answer)); + $err = "Error2: " . nl2br($mail->ErrorInfo); + if ($silent) { error_log('[mailer] ' . strip_tags($err)); return false; } + exit(json_encode(["success" => 0, "message" => $err])); } } diff --git a/app/login/api/engine/register.php b/app/login/api/engine/register.php index 133a91e..5c2bcfa 100644 --- a/app/login/api/engine/register.php +++ b/app/login/api/engine/register.php @@ -173,16 +173,16 @@ try { . rtrim($server_url, '/'); $verify_url = $base_url . '/login/verify.php?token=' . $token; - // ── Step 14: Send verification email via system SMTP ───────────────────── - // Uses $SMTP from config.php (system-level, not company SMTP) because the - // user does not have a company yet at registration time. - // If the mailer fails it exits internally with its own error JSON response. + // ── Step 14: Send verification email (non-fatal) ───────────────────────── + // silent=true means the mailer returns false on failure instead of calling + // exit() — so the account is always created even if SMTP is unavailable. require_once $include_url . 'assets/utils/module/mailer.php'; - $mailer = new mailer(['pdo1' => $pdo1]); - $mailer->send_email([ + $mailer = new mailer(['pdo1' => $pdo1]); + $mail_sent = $mailer->send_email([ 'company_id' => 0, 'smtp' => $SMTP, + 'silent' => true, 'to' => $email, 'subject' => 'Verify your email — WMS', 'message' => implode("\n", [ @@ -205,7 +205,15 @@ try { // ── Step 15: Respond ────────────────────────────────────────────────────── $answer['success'] = 1; - $answer['message'] = 'Account created! Please check your email to verify your account.'; + if ($mail_sent) { + $answer['message'] = 'Account created! Please check your email to verify your account.'; + } else { + // Email failed (e.g. SMTP blocked on this server) — account still created. + // Return the verify URL so an admin can share it manually, and tell the + // user to contact their administrator. + $answer['message'] = 'Account created! However, the verification email could not be sent. Please contact your administrator to verify your account.'; + $answer['verify_url'] = $verify_url; + } } catch (Exception $e) { // Unexpected error — log details server-side, return generic message to client diff --git a/app/login/register.php b/app/login/register.php index 2b708f0..a8a2cde 100644 --- a/app/login/register.php +++ b/app/login/register.php @@ -117,6 +117,21 @@

We've sent a verification link to your email address. Click it to activate your account.

+ + +

Already have an account? Sign in @@ -237,12 +252,22 @@ confirm_password: confirm, })}, onSuccess: function (r) { - // Hide form, show success panel $('input, button, .row, .mb-3, .mb-4').hide(); - $('#success_panel').removeClass('d-none'); + if (r.verify_url) { + $('#verify_link_input').val(r.verify_url); + $('#verify_link_panel').removeClass('d-none'); + } else { + $('#success_panel').removeClass('d-none'); + } }, }); } + function copy_verify_link() { + const val = $('#verify_link_input').val(); + navigator.clipboard.writeText(val).then(function () { + bootbox.alert('Verification link copied to clipboard.'); + }); + }