Alles geordnet in einer Email versenden?

2 Antworten

Ich nutze kein php, aber in anderen Programmiersprachen würde ich vermutlich eine .map Methode des Arrays nutzen um alle Termine umzuwandeln, eventuell mit einem Template oder objektorientiert jedem Termin eine Methode zu geben um eine String representation zu erzeugen die sich auch eignet. In php gibt es Array_map oder so was. In js danach zb .reduce nutzen. In php gibt’s ja implode, weis aber nicht ob die auch so viel kann. So würde ich das funktional ohne Schleife lösen. Mit Schleife halt einfach string concatenation, bin nicht sicher ob es in php so was wie einen String builder gibt. Wenn ja dann das nutzen.

In guten templating Libs kann man sogar in templates schleifen nutzen, vielleicht bietet sich ja eine templating Lösung an wenn du oft Mails und so was versendest. Dann einfach ein Template anlegen für die Mail was alle Daten bekommt und diese zu einem String umwandelt.

Und klar, am Ende sendest du halt den Mail mit dem Text.

HDMikel 
Fragesteller
 12.03.2024, 15:35

Lieben Dank für Deine Anregungen, ich würde das gerne mit PHP umsetzen. In einem Array müsste das doch möchlich sein. Also jeden Datensatz einlesen und jeden Termin mit einem Absatz (<br> oder <p> trennen.

0
BeamerBen  12.03.2024, 18:01
@HDMikel

Klar geht das, eben mit den oben beschriebenen Methoden. Das ist halt ein genereller Ansatz, ob php oder eine andere moderne Sprache, es ändert sich ja nur ein bisschen was für Methoden es gibt und wie sie heißen.

in php array_map und implode.

Ich habe über ChatGPT Beispiel Code generiert um das zu veranschaulichen:

<?php

// Define a class for our calendar event objects
class CalendarEvent {
    public $title;
    public $date; // Assume date is a string for simplicity
    
    public function __construct($title, $date) {
        $this->title = $title;
        $this->date = $date;
    }
}

// Create an array of calendar event objects
$events = [
    new CalendarEvent('Meeting with team', '2024-03-12'),
    new CalendarEvent('Project deadline', '2024-03-15'),
    new CalendarEvent('Doctor Appointment', '2024-03-20'),
];

// Map calendar event objects to HTML list items, considering HTML encoding
$eventListItems = array_map(function($event) {
    $title = htmlspecialchars($event->title, ENT_QUOTES, 'UTF-8');
    $date = htmlspecialchars($event->date, ENT_QUOTES, 'UTF-8');
    return "<li>{$title} on {$date}</li>";
}, $events);

// Combine the list items into a single HTML list
$htmlList = "<ul>" . implode("\n", $eventListItems) . "</ul>";

echo $htmlList;
?>

Was hier wichtig ist:

  • Über array_map wird die Liste an Kalender Einträgen zu einer Liste a Strings - also eine Zeichenkette - umgewandelt.
  • in dem Fall wird aus jedem Eintrag ein <li /> Tag generiert, html special chars is dafür da falls ein Kalender Titel HTMl Tags beinhaltet. Damit wird dann der html Code nicht ausgeführt sondern ganz normal als Text dargestellt, also ein sicherheits Feature
  • danach wird über ganz normale String concatenation ein Listen Start Tag hinzugefügt, über implode die Liste an Strings die wir eben erstellt haben zusammengesetzt und ein Listen Ende Tag angehangen

Den erstellten String kannst du dann über email senden so wie du das bisher gemacht hast.

0
HDMikel 
Fragesteller
 14.03.2024, 15:49
@BeamerBen

Vielen Dank für diesen Code. ich werds probieren sobald ich wieder am PC sitze. Ich sag dann Bescheid obs keplappt hat.

0

Du nimmst deine existente Methode und statt senden, machst du ein anfügen, wo du dann die Daten aneinander fügst. Bei einer Text-Email wäre \n neue Zeile und bei einer HTML-Email wäre es <br>. Nach der schleife kannst du dann den erstellten Inhalt als Body anfügen und senden und sendest somit nur eine