PHP Simply.com Mail Skill
Formål
Denne skill bruges når TuxCore arbejder med PHP-mail på Simply.com, især projekter hvor PHPMailer allerede er installeret globalt og skal genbruges på tværs af flere systemer.
Den er relevant for:
- TuxiNet.dk
- DjGulvBasS.dk
- EventPortal
- RU-Teknik / Rute & Udstyr - Teknik
- Byggemøde-systemer
- Login-koder
- Invitationer
- Password reset
- Admin-beskeder
- SMTP2GO / Simply SMTP opsætning
Standardprincip
Brug ikke PHPs indbyggede mail() direkte.
Brug PHPMailer via Composer autoload, hvor Composer/PHPMailer ligger udenfor eller centralt i projektstrukturen.
Typisk struktur
/private-or-parent-folder/
├── vendor/
│ └── autoload.php
├── mail_config.php
└── public_html/
├── index.php
├── includes/
│ └── mailer.php
└── app/
Hvis projektet ligger i en undermappe, skal stien til vendor/autoload.php og mail_config.php tilpasses den faktiske serverstruktur.
Mail config
Mail config bør ligge udenfor public webroot, hvis muligt.
Eksempel:
<?php
// mail_config.php
// Ligger udenfor public_html for sikkerhed
define('MAIL_HOST', 'websmtp.simply.com');
define('MAIL_PORT', 587);
define('MAIL_USERNAME', 'noreply@example.dk');
define('MAIL_PASSWORD', 'CHANGE_ME');
define('MAIL_FROM_EMAIL', 'noreply@example.dk');
define('MAIL_FROM_NAME', 'TuxiNet');
define('MAIL_REPLY_TO', 'noreply@example.dk');
PHPMailer include
Typisk include:
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../mail_config.php';
Hvis filen ligger dybere, tilpas stien:
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../../mail_config.php';
Standard mailer funktion
Når TuxCore skal lave en mailfunktion, bør den være genbrugelig og ligne dette princip:
<?php
declare(strict_types=1);
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../mail_config.php';
function send_app_mail(string $to, string $subject, string $htmlBody, ?string $plainBody = null): array
{
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = MAIL_HOST;
$mail->SMTPAuth = true;
$mail->Username = MAIL_USERNAME;
$mail->Password = MAIL_PASSWORD;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = MAIL_PORT;
$mail->CharSet = 'UTF-8';
$mail->setFrom(MAIL_FROM_EMAIL, MAIL_FROM_NAME);
$mail->addReplyTo(MAIL_REPLY_TO, MAIL_FROM_NAME);
$mail->addAddress($to);
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $htmlBody;
$mail->AltBody = $plainBody ?: strip_tags(str_replace(['<br>', '<br/>', '<br />'], "\n", $htmlBody));
$mail->send();
return [
'ok' => true,
'error' => null,
];
} catch (Exception $e) {
return [
'ok' => false,
'error' => $mail->ErrorInfo ?: $e->getMessage(),
];
}
}
Sikkerhedsregler
- Hardcode aldrig SMTP-passwords i public filer.
- Vis aldrig SMTP-passwords i fejlbeskeder.
- Log gerne tekniske fejl server-side, men vis kun en venlig fejl til brugeren.
- Brug altid inputvalidering på email-adresser.
- Brug ikke tokens i frontend.
- Login-koder og reset tokens skal udløbe.
- Brug prepared statements ved databaseopslag.
- Brug CSRF-token på forms, hvor det giver mening.
Når TuxCore laver $mail $php
TuxCore skal som udgangspunkt levere:
- Korrekt PHPMailer include.
- Mail config placering.
- Genbrugelig mailfunktion.
- Eksempel på brug.
- Fejlhåndtering.
- Testfil, hvis det er relevant.
- Ingen hardcodede secrets.
Testfil
Når der skal testes mail, kan der laves en midlertidig testfil som fx:
<?php
require_once __DIR__ . '/includes/mailer.php';
$result = send_app_mail(
'test@example.dk',
'Testmail fra systemet',
'<p>Dette er en testmail.</p>'
);
echo '<pre>';
print_r($result);
echo '</pre>';
Testfilen bør slettes efter test.
Typiske fejl
Class PHPMailer not found
- Forkert sti til
vendor/autoload.php - Composer/PHPMailer er ikke installeret
- Projektet ligger dybere end forventet
Fix:
- Find faktisk placering af
vendor/autoload.php - Ret
require_oncestien
SMTP connect failed
- Forkert SMTP-host
- Forkert port
- Forkert kryptering
- Hosting blokerer forbindelsen
- Forkert brugernavn/password
Fix:
- Tjek SMTP-indstillinger
- Test med korrekt host/port
- Brug STARTTLS på port 587
Mail bliver ikke sendt men ingen fejl vises
- Fejl bliver ikke returneret/logget
try/catchmangler- Funktionen returnerer ikke status
Fix:
- Returnér
['ok'=>true/false, 'error'=>...] - Log fejl i serverlog
Acceptkriterier
En mailintegration er færdig når:
- Mail kan sendes fra en testfil.
- SMTP-kodeord ligger ikke public.
- PHPMailer bruges via Composer autoload.
- Fejl returneres kontrolleret.
- Brugeren får ikke vist følsomme oplysninger.
- Koden kan genbruges af login, invitationer og admin-beskeder.
Tags
php, mail, phpmailer, simply, smtp, smtp2go, tuxcore, tuxinet, eventportal