So senden Sie E-Mails mit CodeZünder

⚡ Intelligente Zusammenfassung

CodeIgniter Sending Email nutzt die integrierte E-Mail-Bibliothek des Frameworks, um Nachrichten per SMTP oder über den lokalen Mailserver zuzustellen. Dieses Beispiel erstellt eine E-Mail-Konfigurationsdatei, eine Kontaktformularansicht und einen Controller, der die Formulareingaben liest und die Nachricht versendet.

  • 📧 Eingebaute Bibliothek: Die Email-Bibliothek versendet E-Mails mit minimalem Code und unterstützt SMTP, Sendmail und PHP-Mail-Transporte.
  • ⚙️ Zentrale Konfiguration: Eine benutzerdefinierte email.php-Konfigurationsdatei speichert Protokoll, Host, Port, Benutzername und Passwort, sodass die Einstellungen an einem Ort bleiben.
  • 🔓 SMTP-Zugangsdaten: Gültige Werte für smtp_host, smtp_user und smtp_pass sind erforderlich; Dummy-Parameter führen niemals zur Zustellung einer echten E-Mail.
  • 📝 Formular an Controller: Eine Kontaktansicht erfasst Empfänger, Betreff und Nachricht, die der Controller mithilfe der Eingabebibliothek einliest.
  • 📤 Send Flow: Der Controller legt Absender, Empfänger, Betreff und Nachricht fest, ruft dann send() auf und gibt im Fehlerfall einen Debugger-Bericht aus.
  • 📎 HTML und Dateien: Durch Umschalten des Mailtyps auf HTML und Aufruf von attach() können Sie formatierte Nachrichten mit Dateianhängen versenden.
  • 🤖 KI-Assistent: KI-Tools können den E-Mail-Controller generieren, Formulareingaben validieren und SMTP-Verbindungsfehler anhand der Debugger-Ausgabe diagnostizieren.

CodeIgniter sendet E-Mail

E-Mail spielt in Webanwendungen eine wichtige Rolle. Bei der Registrierung senden wir Nutzern beispielsweise eine E-Mail zur Bestätigung ihrer E-Mail-Adresse und zur Anmeldung. Wir nutzen E-Mail auch, um vergessene Passwörter zurückzusetzen und Rechnungen sowie Quittungen an Kunden zu versenden. CodeMit Igniter ist es für uns kinderleicht, E-Mails aus unserer Anwendung heraus über verschiedene Optionen zu versenden.

CodeIgniter verfügt über eine integrierte E-Mail-Bibliothek, die wir beim Versenden von E-Mails nutzen können.

CodeIgniter-E-Mail-Konfiguration

Wir benötigen einen zentralen Ort, an dem wir die E-Mail-Einstellungen verwalten können. CodeIgniter wird ohne Konfigurationsdatei für E-Mails ausgeliefert, daher müssen wir selbst eine erstellen.

Erstellen Sie eine Datei email.php im Verzeichnis application/config

Fügen Sie den folgenden Code zu email.php hinzu

<?php defined('BASEPATH') OR exit('No direct script access allowed');
 
$config = array(
'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
'smtp_host' => 'smtp.example.com',
'smtp_port' => 465,
'smtp_user' => 'no-reply@example.com',
'smtp_pass' => '12345!',
'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
'mailtype' => 'text', //plaintext 'text' mails or 'html'
'smtp_timeout' => '4', //in seconds
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
);

HIER,

  • 'protocol' => 'smtp' gibt das Protokoll an, das beim Senden von E-Mails verwendet werden soll. Dies könnte beispielsweise sein: Gmail SMTP-Einstellungen oder SMTP-Einstellungen von Ihrem Host
  • 'smtp_host' => 'smtp.example.com' gibt den SMTP-Host an. Wenn Sie beispielsweise Folgendes verwenden möchten: Gmail Dann hätte man so etwas wie smtp.gmail.com
  • 'smtp_port' => 465, ein offener Port auf dem angegebenen SMTP-Host, der für SMTP-E-Mails konfiguriert wurde.
  • 'smtp_user' => 'no-reply@example.com', die E-Mail-Adresse, die beim Senden von E-Mails als Absender verwendet wird. Dies sollte eine gültige E-Mail-Adresse sein, die auf dem Server vorhanden ist
  • 'smtp_pass' => '12345!', das Passwort für die angegebene SMTP-Benutzer-E-Mail-Adresse
  • 'smtp_crypto' => 'ssl', gibt die zu verwendende Verschlüsselungsmethode an, z. B. ssl, tls usw.
  • Mit dem Parameter 'mailtype' => 'text' wird der E-Mail-Typ festgelegt. Dies kann je nach Bedarf entweder reiner Text oder HTML sein.
  • 'smtp_timeout' => '4', gibt die Zeit in Sekunden an, die beim Versuch, eine Verbindung zum Host herzustellen, vergehen soll, bevor eine Timeout-Ausnahme ausgelöst wird.
  • 'charset' => 'iso-8859-1', definiert den beim Senden von E-Mails zu verwendenden Zeichensatz.
  • 'wordwrap' => TRUE, wenn auf TRUE gesetzt, ist der Zeilenumbruch aktiviert. Wenn auf FALSE gesetzt, ist der Zeilenumbruch deaktiviert.

Hinweis: Damit das Senden von E-Mails funktioniert, sollten Sie gültige Konfigurationsparameter angeben. Mit Dummy-Parametern können keine E-Mails gesendet werden.

CodeIgniter-E-Mail-Ansicht

In diesem Abschnitt erstellen wir die Ansicht, die die E-Mail an den Empfänger sendet.

Erstellen Sie eine neue Verzeichnis-E-Mail in Anwendung/Ansichten

Erstellen Sie eine neue Datei contact.php im Verzeichnis application/views/email.

Fügen Sie den folgenden Code zu application/views/email/contact.php hinzu

<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter Send Email</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<h3>Use the form below to send email</h3>
<form method="post" action="<?=base_url(0)?>" enctype="multipart/form-data">
<input type="email" id="to" name="to" placeholder="Receiver Email">
<br><br>
<input type="text" id="subject" name="subject" placeholder="Subject">
<br><br>
<textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
<br><br>
<input type="submit" value="Send Email" />
</form>
</div>
</body>
</html>

HIER,

  • Wir haben ein einfaches HTML-Formular, das E-Mail-Adresse, Betreff und Nachricht entgegennimmt und die Parameter dann an die E-Mail-Route weiterleitet.

CodeIgniter E-Mail-Controller

Nun erstellen wir den Controller, der für den E-Mail-Versand zuständig sein wird.

Erstellen Sie eine neue Datei EmailController.php in application/controllers/EmailController.php

Fügen Sie den folgenden Code zu EmailController.php hinzu

<?php
 
defined('BASEPATH') OR exit('No direct script access allowed');
 
class EmailController extends CI_Controller {
 
public function __construct() {
parent:: __construct();
 
$this->load->helper('url');
}
 
public function index() {
$this->load->view('email/contact');
}
 
function send() {
$this->load->config('email');
$this->load->library('email');
 
$from = $this->config->item('smtp_user');
$to = $this->input->post('to');
$subject = $this->input->post('subject');
$message = $this->input->post('message');
 
$this->email->set_newline("\r\n");
$this->email->from($from);
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($message);
 
if ($this->email->send()) {
echo 'Your Email has successfully been sent.';
} else {
show_error($this->email->print_debugger());
}
}
}

HIER,

  • Die Klasse `EmailController` erweitert `CI_Controller` {…} und definiert unseren E-Mail-Controller, der von der übergeordneten Klasse erbt. CodeZündsteuergerät.
  • Die öffentliche Funktion __construct() {…} definiert den untergeordneten Konstruktor, der die übergeordnete Konstruktormethode aufruft.
  • Die öffentliche Funktion index() {…} definiert die Indexmethode, die das Kontaktformular anzeigt
  • function send() {…} definiert die Methode, die die E-Mail sendet
    • $this->load->config('email'); lädt die E-Mail-Konfigurationseinstellungen
    • $this->load->library('email'); lädt die E-Mail-Bibliothek
    • $from = $this->config->item('smtp_user'); ruft die Absender-ID aus der von uns definierten E-Mail-Konfigurationsdatei ab.
    • $to = $this->input->post('to'); Ruft den to-Wert aus dem übermittelten Formular ab
    • $subject = $this->input->post('subject'); legt den E-Mail-Betreff aus dem Formular fest.
    • $message = $this->input->post('message'); legt die E-Mail-Nachricht aus dem Formular fest
    • $this->email->set_newline(“\r\n”); definiert die Zeilenumbruchzeichen für E-Mails
    • $this->email->from($from); legt die E-Mail-Adresse des Absenders fest
    • $this->email->to($to); legt die E-Mail-Adresse des Empfängers fest
    • $this->email->subject($subject); legt den E-Mail-Betreff fest
    • $this->email->message($message); legt die E-Mail-Nachricht fest
    • Wenn `$this->email->send()` ausgeführt wird, wird versucht, die E-Mail zu senden. Bei erfolgreichem Versand wird die Meldung „Ihre E-Mail wurde erfolgreich gesendet“ angezeigt, andernfalls werden Debug-Informationen zu möglichen Fehlerursachen ausgegeben.

Lassen Sie uns nun die E-Mail-Routen definieren.

E-Mail-Routen

Fügen Sie die folgenden Routen zu application/config/routes.php hinzu

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Wir können das Kontaktformular nun im Webbrowser laden.

Starten wir den integrierten PHP-Server.

Öffnen Sie das Terminal oder die Befehlszeile und navigieren Sie zum Stammverzeichnis Ihrer Anwendung. In meinem Fall befindet sich das Stammverzeichnis unter C:\Sites\ci-app.

cd C:\Sites\ci-app

Starten Sie den Server mit folgendem Befehl

php -S localhost:3000

Laden Sie Folgendes: URL in Ihrem Webbrowser: http://localhost:3000/send-email

Sie sollten das folgende Formular sehen können

E-Mail-Routen

Geben Sie die E-Mail-Adresse des Empfängers, den Betreff und die E-Mail-Nachricht ein und klicken Sie anschließend auf „E-Mail senden“. Wenn Ihre E-Mail-Einstellungen korrekt sind, sollte Ihnen eine Erfolgsmeldung angezeigt werden.

Wie man HTML-E-Mails und Anhänge versendet CodeZünder

Dieselbe E-Mail-Bibliothek kann auch formatierte Nachrichten und Dateien versenden. Zwei kleine Änderungen genügen, um aus dem obigen Klartextbeispiel eine HTML-E-Mail mit Anhang zu erstellen.

$this->email->set_mailtype('html');
$this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>');
$this->email->attach('/path/to/report.pdf');
  • set_mailtype('html'): teilt der Bibliothek mit, dass der Nachrichtentext HTML enthält, sodass Tags wie Überschriften und Links im Posteingang des Empfängers angezeigt werden.
  • befestigen(): Fügt der Nachricht eine Datei von einem Serverpfad hinzu; rufen Sie die Funktion einmal für jede Datei vor send() auf.

Denken Sie daran, dass HTML-E-Mails immer auch eine Klartext-Alternative enthalten sollten und dass große Anhänge von strengen Mailservern abgelehnt werden können.

Häufig gestellte Fragen

Auf dem lokalen Rechner ist normalerweise kein Mailserver installiert, daher schlägt das Mailprotokoll ohne Fehlermeldung fehl. Stellen Sie das Protokoll auf SMTP um und geben Sie einen gültigen SMTP-Host, Benutzernamen und ein Passwort an oder verwenden Sie einen Dienst wie beispielsweise … MailFalle für lokale Tests.

Setzen Sie smtp_host auf smtp.gmail.com, smtp_port auf 465 mit SSL und smtp_user auf Ihren Benutzernamen. Gmail Adresse. Verwenden Sie eine Google App-Passwort anstelle Ihres normalen Passworts, da Gmail blockiert einfache Passwortanmeldungen.

Das E-Mail-Protokoll verwendet die PHP-Funktion `mail()`, `sendmail` ruft die lokale Binärdatei des Servers auf, und `smtp` stellt eine Verbindung zu einem externen Mailserver mit Zugangsdaten her. SMTP ist das zuverlässigste Protokoll für Zustellung und Authentifizierung.

Ja. KI kann den Controller erstellen, eine Formularvalidierung für Empfänger und Betreff hinzufügen und eine Erfolgs- und Fehlerbehandlung einbauen. RevÜberprüfen Sie die SMTP-Einstellungen und fügen Sie eine Ratenbegrenzung hinzu, bevor Sie es in der Produktion einsetzen.

Ja. Fügen Sie die Ausgabe von print_debugger() ein, und die KI kann SMTP-Handshake-Fehler, Authentifizierungsfehler oder Portprobleme interpretieren und Ihnen anschließend die korrigierten Host-, Port- oder Verschlüsselungswerte zum Ausprobieren empfehlen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: