Hoe e-mails te verzenden met Codeontsteker

⚡ Slimme samenvatting

CodeIgniter Sending Email maakt gebruik van de ingebouwde e-mailbibliotheek van het framework om berichten te verzenden via SMTP of de lokale mailserver. Dit voorbeeld maakt een e-mailconfiguratiebestand, een contactformulierweergave en een controller die de formulierinvoer leest en het bericht verzendt.

  • ???? Ingebouwde bibliotheek: De e-mailbibliotheek verzendt e-mails met minimale code en ondersteunt SMTP, Sendmail en PHP als e-mailprotocollen.
  • ⚙️ Centrale configuratie: Een aangepast email.php-configuratiebestand slaat het protocol, de host, de poort, de gebruiker en het wachtwoord op, zodat de instellingen op één plek blijven.
  • 🔓 SMTP-gegevens: Geldige waarden voor smtp_host, smtp_user en smtp_pass zijn vereist; dummy-parameters zullen nooit een echte e-mail bezorgen.
  • 📝 Formulier voor controller: Een contactweergave verzamelt de ontvanger, het onderwerp en het bericht, die de controller vervolgens uitleest met behulp van de invoerbibliotheek.
  • 📤 Verzendstroom: De controller stelt de afzender, ontvanger, onderwerp en bericht in, roept vervolgens send() aan en print een debugrapport bij een fout.
  • 📎 HTML en bestanden: Door het mailtype te wijzigen naar html en attach() aan te roepen, kunt u opgemaakte berichten met bestandsbijlagen verzenden.
  • 🤖 AI-assistentie: AI-tools kunnen de e-mailcontroller genereren, formulierinvoer valideren en SMTP-verbindingsfouten diagnosticeren op basis van de uitvoer van de debugger.

CodeIgniter verzendt e-mail

E-mail is erg belangrijk in webapplicaties. Wanneer een gebruiker zich aanmeldt, willen we hem of haar mogelijk een e-mail sturen om het e-mailadres te verifiëren en de gebruiker de mogelijkheid te geven het abonnement te bevestigen. We gebruiken e-mail ook om vergeten wachtwoorden te resetten en facturen en ontvangstbewijzen naar klanten te versturen. CodeIgniter maakt het voor ons supergemakkelijk om vanuit onze applicatie e-mails te versturen met behulp van verschillende opties.

CodeIgniter heeft een ingebouwde e-mailbibliotheek waarmee we e-mails kunnen versturen.

CodeIgniter e-mailconfiguratie

We hebben een centrale plek nodig waar we de e-mailinstellingen kunnen beheren. CodeIgniter wordt niet geleverd met een configuratiebestand voor e-mails, dus we zullen er zelf een moeten maken.

Maak een bestand email.php in de map application/config

Voeg de volgende code toe aan email.php

<?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', specificeert het protocol dat u wilt gebruiken bij het verzenden van e-mail. Dit kan zijn Gmail SMTP-instellingen of SMTP-instellingen van uw host
  • 'smtp_host' => 'smtp.example.com' specificeert de SMTP-host. Bijvoorbeeld, als u wilt gebruiken Gmail Dan zou je zoiets hebben als smtp.gmail.com.
  • 'smtp_port' => 465, een open poort op de opgegeven SMTP-host die is geconfigureerd voor SMTP-mail.
  • 'smtp_user' => 'no-reply@example.com', het e-mailadres dat als afzender wordt gebruikt bij het verzenden van e-mails. Dit moet een geldig e-mailadres zijn dat op de server bestaat
  • 'smtp_pass' => '12345!', het wachtwoord voor het opgegeven SMTP-gebruikers-e-mailadres
  • 'smtp_crypto' => 'ssl', specificeert de te gebruiken versleutelingsmethode, bijvoorbeeld ssl, tls, enz.
  • 'mailtype' => 'text', hiermee wordt het te gebruiken e-mailtype ingesteld. Dit kan platte tekst of HTML zijn, afhankelijk van uw behoeften.
  • 'smtp_timeout' => '4', specificeert de tijd in seconden die moet verstrijken wanneer wordt geprobeerd verbinding te maken met de host voordat er een time-outuitzondering wordt gegenereerd.
  • 'charset' => 'iso-8859-1', definieert de tekenset die moet worden gebruikt bij het verzenden van e-mails.
  • 'wordwrap' => TRUE. Als deze waarde op TRUE staat, is woordterugloop ingeschakeld. Als deze waarde op FALSE staat, is woordterugloop niet ingeschakeld.

Note: om e-mails te kunnen verzenden, moet u geldige configuratieparameters opgeven. Dummy-parameters kunnen geen e-mails verzenden.

CodeIgniter-e-mailweergave

In dit gedeelte maken we de weergave waarmee de e-mail naar de ontvanger wordt verzonden.

Maak een nieuw directory-e-mailadres in de toepassing/weergaven

Maak een nieuw bestand contact.php aan in de map application/views/email.

Voeg de volgende code toe aan application/views/email/contact.php

<!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,

  • We hebben een eenvoudig HTML-formulier dat het e-mailadres, het onderwerp en het bericht accepteert en de parameters vervolgens doorgeeft aan de e-mailroute.

CodeIgniter e-mailcontroller

Laten we nu de controller maken die het verzenden van e-mails zal afhandelen.

Maak een nieuw bestand EmailController.php in application/controllers/EmailController.php

Voeg de volgende code toe aan EmailController.php

<?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,

  • class EmailController extends CI_Controller {…} definieert onze e-mailcontroller die de parent uitbreidt. CodeOntstekingsregelaar.
  • public function __construct() {…} definieert de onderliggende constructor die de ouderconstructormethode aanroept.
  • public function index() {…} definieert de indexmethode die het contactformulier weergeeft
  • functie send() {…} definieert de methode die de e-mail verzendt
    • $this->load->config('email'); laadt de e-mailconfiguratie-instellingen
    • $this->load->library('email'); laadt de e-mailbibliotheek
    • $from = $this->config->item('smtp_user'); haalt de afzender-id op uit het e-mailconfiguratiebestand dat we hebben gedefinieerd.
    • $to = $dit->invoer->post('naar'); haalt de to-waarde uit het ingediende formulier
    • $subject = $this->input->post('subject'); stelt het onderwerp van de e-mail in op basis van het formulier.
    • $message = $this->input->post('message'); stelt het e-mailbericht in van het formulier
    • $this->email->set_newline(“\r\n”); definieert de nieuwe regeltekens voor e-mails
    • $this->email->from($from); stelt het e-mailadres van de afzender in
    • $this->email->to($to); stelt het e-mailadres van de ontvanger in
    • $this->email->subject($subject); stelt het e-mailonderwerp in
    • $this->email->message($message); stelt het e-mailbericht in
    • Als ($this->email->send()) {…} probeert de e-mail te verzenden. Als de e-mail succesvol is verzonden, wordt het bericht "Uw e-mail is succesvol verzonden" weergegeven; anders wordt debuginformatie afgedrukt over wat er mogelijk mis is gegaan.

Laten we nu de e-mailroutes definiëren.

E-mailroutes

Voeg de volgende routes toe aan application/config/routes.php

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

We kunnen het contactformulier nu in de webbrowser laden.

Laten we de ingebouwde PHP-server starten.

Open de terminal of opdrachtregel en navigeer naar de hoofdmap van uw applicatie. In mijn geval bevindt de hoofdmap zich op schijf C:\Sites\ci-app

cd C:\Sites\ci-app

Start de server met het volgende commando.

php -S localhost:3000

Laad het volgende URL in uw webbrowser: http://localhost:3000/send-email

U zou het volgende formulier moeten kunnen zien

E-mailroutes

Voer het e-mailadres van de ontvanger, het onderwerp en de e-mailtekst in en klik vervolgens op 'E-mail verzenden'. Als uw e-mailinstellingen correct zijn, zou u een bevestigingsbericht moeten zien.

Hoe verstuur je HTML-e-mails met bijlagen? Codeontsteker

Dezelfde e-mailbibliotheek kan berichten en bestanden met rijke opmaak verzenden. Met twee kleine aanpassingen wordt het bovenstaande voorbeeld in platte tekst omgezet in een HTML-e-mail met een bijlage.

$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'): Dit geeft de bibliotheek aan dat de body HTML bevat, zodat tags zoals koppen en links correct worden weergegeven in de inbox van de ontvanger.
  • bijvoegen(): Voegt een bestand van een serverpad toe aan het bericht; roep deze functie één keer aan voor elk bestand voordat je het bericht verzendt (send()).

Houd er rekening mee dat HTML-e-mails altijd een alternatief in platte tekst moeten bevatten, en dat grote bijlagen door strenge mailservers kunnen worden geweigerd.

Veelgestelde vragen

Localhost heeft meestal geen mailserver, waardoor het mailprotocol stilzwijgend faalt. Schakel over naar SMTP en geef een echte SMTP-host, gebruikersnaam en wachtwoord op, of gebruik een service zoals... Mailval voor lokale tests.

Stel smtp_host in op smtp.gmail.com, smtp_port op 465 met ssl en smtp_user op uw gebruikersnaam. Gmail adres. Gebruik een Google Gebruik het app-wachtwoord in plaats van je normale wachtwoord, omdat Gmail Blokkeert aanmeldingen met een standaardwachtwoord.

Het mailprotocol maakt gebruik van de `mail()`-functie van PHP, `sendmail` roept het lokale uitvoerbare bestand van de server aan en `smtp` maakt verbinding met een externe mailserver met inloggegevens. SMTP is het meest betrouwbaar voor bezorging en authenticatie.

Ja. AI kan de controller bouwen, formuliervalidatie toevoegen voor de ontvanger en het onderwerp, en succes- en foutafhandeling implementeren. RevBekijk de SMTP-instellingen en voeg snelheidsbeperking toe voordat u het in productie gebruikt.

Ja. Plak de uitvoer van print_debugger() hier, en AI kan SMTP-handshakefouten, authenticatiefouten of poortproblemen interpreteren en vervolgens de gecorrigeerde host-, poort- of versleutelingswaarden aanbevelen om te proberen.

Vat dit bericht samen met: