Compare commits
No commits in common. "dbd0ab5f0e84dd829c43093665ebb0d55e639093" and "31bc4d60e40bdf6162c14b5a345b574a476b76b9" have entirely different histories.
dbd0ab5f0e
...
31bc4d60e4
|
|
@ -67,23 +67,28 @@ class PasswordReset {
|
||||||
|
|
||||||
// Send email with reset link
|
// Send email with reset link
|
||||||
$to = $user['email'];
|
$to = $user['email'];
|
||||||
// Load email helper
|
|
||||||
require_once __DIR__ . '/../helpers/email_helper.php';
|
|
||||||
|
|
||||||
$subject = "{$config['site_name']} - Password reset request";
|
$subject = "{$config['site_name']} - Password reset request";
|
||||||
|
$message = "Dear user,\n\n";
|
||||||
|
$message .= "We received a request to reset your password for your {$config['site_name']} account.\n\n";
|
||||||
|
$message .= "To set a new password, please click the link below:\n\n";
|
||||||
|
$message .= $resetLink . "\n\n";
|
||||||
|
$message .= "This link will expire in 1 hour for security reasons.\n\n";
|
||||||
|
$message .= "If you did not request this password reset, please ignore this email. Your account remains secure.\n\n";
|
||||||
|
if (!empty($config['site_name'])) {
|
||||||
|
$message .= "Best regards,\n";
|
||||||
|
$message .= "The {$config['site_name']} team\n";
|
||||||
|
if (!empty($config['site_slogan'])) {
|
||||||
|
$message .= ":: {$config['site_slogan']} ::";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$variables = [
|
$headers = [
|
||||||
'site_name' => $config['site_name'],
|
|
||||||
'reset_link' => $resetLink,
|
|
||||||
'site_slogan' => $config['site_slogan'] ?? ''
|
|
||||||
];
|
|
||||||
|
|
||||||
$additionalHeaders = [
|
|
||||||
'From' => "noreply@{$config['domain']}",
|
'From' => "noreply@{$config['domain']}",
|
||||||
'Reply-To' => "noreply@{$config['domain']}"
|
'Reply-To' => "noreply@{$config['domain']}",
|
||||||
|
'X-Mailer' => 'PHP/' . phpversion()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!sendTemplateEmail($to, $subject, 'password_reset', $variables, $config, $additionalHeaders)) {
|
if (!mail($to, $subject, $message, $headers)) {
|
||||||
return ['success' => false, 'message' => 'Failed to send reset email'];
|
return ['success' => false, 'message' => 'Failed to send reset email'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Email Template Helper
|
|
||||||
*
|
|
||||||
* Provides functions to render email templates with variable substitution
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render email template with variables
|
|
||||||
*
|
|
||||||
* @param string $templateName Template filename (without extension)
|
|
||||||
* @param array $variables Variables to substitute
|
|
||||||
* @return string Rendered template content
|
|
||||||
*/
|
|
||||||
function renderEmailTemplate($templateName, $variables = []) {
|
|
||||||
$templateFile = __DIR__ . '/../templates/' . $templateName . '.txt';
|
|
||||||
|
|
||||||
if (!file_exists($templateFile)) {
|
|
||||||
throw new RuntimeException("Email template '$templateName' not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
$content = file_get_contents($templateFile);
|
|
||||||
|
|
||||||
// Replace {{variable}} placeholders
|
|
||||||
foreach ($variables as $key => $value) {
|
|
||||||
$content = str_replace('{{' . $key . '}}', $value, $content);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send email using template
|
|
||||||
*
|
|
||||||
* @param string $to Recipient email
|
|
||||||
* @param string $subject Email subject
|
|
||||||
* @param string $templateName Template name
|
|
||||||
* @param array $variables Template variables
|
|
||||||
* @param array $config Application config
|
|
||||||
* @param array $additionalHeaders Additional email headers
|
|
||||||
* @return bool Success status
|
|
||||||
*/
|
|
||||||
function sendTemplateEmail($to, $subject, $templateName, $variables, $config, $additionalHeaders = []) {
|
|
||||||
try {
|
|
||||||
$message = renderEmailTemplate($templateName, $variables);
|
|
||||||
|
|
||||||
$fromDomain = $config['domain'] ?? ($_SERVER['HTTP_HOST'] ?? 'totalmeet.local');
|
|
||||||
$headers = array_merge([
|
|
||||||
'From: noreply@' . $fromDomain,
|
|
||||||
'X-Mailer: PHP/' . phpversion(),
|
|
||||||
'Content-Type: text/plain; charset=UTF-8'
|
|
||||||
], $additionalHeaders);
|
|
||||||
|
|
||||||
return mail($to, $subject, $message, implode("\r\n", $headers));
|
|
||||||
} catch (Exception $e) {
|
|
||||||
error_log("Failed to send template email: " . $e->getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
Dear user,
|
|
||||||
|
|
||||||
We received a request to reset your password for your {{site_name}} account.
|
|
||||||
|
|
||||||
To set a new password, please click the link below:
|
|
||||||
|
|
||||||
{{reset_link}}
|
|
||||||
|
|
||||||
This link will expire in 1 hour for security reasons.
|
|
||||||
|
|
||||||
If you did not request this password reset, please ignore this email. Your account remains secure.
|
|
||||||
|
|
||||||
Best regards,
|
|
||||||
The {{site_name}} team
|
|
||||||
{{#site_slogan}}
|
|
||||||
:: {{site_slogan}} ::
|
|
||||||
{{/site_slogan}}
|
|
||||||
Loading…
Reference in New Issue