TuxCore Skillset

PHP Simply.com Mail Skill

skill php-mail Guld

skills/php-simply-mail/SKILL.md

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:

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

Når TuxCore laver $mail $php

TuxCore skal som udgangspunkt levere:

  1. Korrekt PHPMailer include.
  2. Mail config placering.
  3. Genbrugelig mailfunktion.
  4. Eksempel på brug.
  5. Fejlhåndtering.
  6. Testfil, hvis det er relevant.
  7. 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

Fix:

SMTP connect failed

Fix:

Mail bliver ikke sendt men ingen fejl vises

Fix:

Acceptkriterier

En mailintegration er færdig når:

Tags

php, mail, phpmailer, simply, smtp, smtp2go, tuxcore, tuxinet, eventportal
php mail phpmailer simply smtp