Slik sender du e-post ved hjelp av CodeTenner

⚡ Smart oppsummering

CodeIgniter Sending Email er avhengig av rammeverkets innebygde e-postbibliotek for å levere meldinger via SMTP eller den lokale e-postserveren. Dette eksemplet oppretter en e-postkonfigurasjonsfil, en kontaktskjemavisning og en kontroller som leser skjemainndata og sender meldingen.

  • 📧 Innebygd bibliotek: E-postbiblioteket sender e-post med minimal kode og støtter SMTP-, Sendmail- og PHP-e-posttransport.
  • ⚙️ Sentral konfigurasjon: En tilpasset email.php-konfigurasjonsfil lagrer protokoll, vert, port, bruker og passord, slik at innstillingene forblir på ett sted.
  • 🔓 SMTP-legitimasjon: Gyldige verdier for smtp_host, smtp_user og smtp_pass er påkrevd; dummy-parametere vil aldri levere en ekte e-post.
  • 📝 Skjema til kontrollør: En kontaktvisning samler inn mottaker, emne og melding, som kontrolleren leser sammen med inputbiblioteket.
  • 📤 Send flyt: Kontrolleren setter from, to, subject og message, kaller deretter send() og skriver ut en feilsøkingsrapport ved feil.
  • 📎 HTML og filer: Ved å bytte mailtype til html og kalle attach() kan du sende formaterte meldinger med filvedlegg.
  • 🤖 AI Assist: AI-verktøy kan generere e-postkontrolleren, validere skjemainndata og diagnostisere SMTP-tilkoblingsfeil fra feilsøkingsutdataene.

CodeIgniter sender e-post

E-post er svært viktig i webapplikasjoner. Når en bruker registrerer seg, kan det være lurt å sende dem en e-post for å bekrefte e-postadressen deres og la brukeren bekrefte abonnementet. Vi bruker også e-post til å tilbakestille glemte passord og sende fakturaer og kvitteringer til kunder. CodeIgniter gjør det superenkelt for oss å sende e-poster fra applikasjonen vår ved hjelp av en rekke alternativer.

CodeIgniter har et innebygd e-postbibliotek som vi kan jobbe med når vi sender e-poster.

CodeIgniter e-postkonfigurasjon

Vi trenger et sentralt sted hvor vi kan administrere e-postinnstillingene. CodeIgniter leveres ikke med en konfigurasjonsfil for e-poster, så vi må lage en selv.

Opprett en fil email.php i katalogapplikasjonen/config

Legg til følgende kode i 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
);

HER,

  • 'protocol' => 'smtp', angir protokollen du vil bruke når du sender e-post. Dette kan være Gmail SMTP-innstillinger eller SMTP-innstillinger fra verten din
  • 'smtp_host' => 'smtp.example.com', angir SMTP-verten. Hvis du for eksempel vil bruke Gmail da ville du ha noe sånt som smtp.gmail.com
  • 'smtp_port' => 465, en åpen port på den angitte SMTP-verten som er konfigurert for SMTP-e-post
  • 'smtp_user' => 'no-reply@example.com', e-postadressen som vil bli brukt som avsender når du sender e-post. Dette bør være en gyldig e-postadresse som finnes på serveren
  • 'smtp_pass' => '12345!', passordet til den angitte SMTP-brukerens e-postadresse
  • 'smtp_crypto' => 'ssl', spesifiserer krypteringsmetoden som skal brukes, f.eks. ssl, tls osv.
  • 'mailtype' => 'tekst', angir e-posttypen som skal brukes. Dette kan enten være ren tekst eller HTML, avhengig av dine behov.
  • 'smtp_timeout' => '4', spesifiserer tiden i sekunder som skal gå når du prøver å koble til verten før et timeout-unntak blir kastet.
  • 'charset' => 'iso-8859-1', definerer tegnsettet som skal brukes ved sending av e-post.
  • 'wordwrap' => TRUE, hvis satt til TRUE er ordbryting aktivert. Hvis satt til FALSE er ikke ordbryting aktivert

Merknader: for å sende e-poster på jobb, bør du oppgi gyldige konfigurasjonsparametere. Dummy-parametere vil ikke kunne sende e-poster.

CodeIgniter Email View

I denne delen vil vi lage visningen som sender e-posten til mottakeren.

Opprett en ny katalog-e-post i applikasjon/visninger

Opprett en ny fil `contact.php` i `application/views/email`

Legg til følgende kode i 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>

HER,

  • Vi har et grunnleggende HTML-skjema som godtar e-post, emne og melding, og deretter sender parameterne til e-postruten.

CodeIgniter e-postkontroller

La oss nå opprette kontrolleren som skal håndtere sending av e-post.

Opprett en ny fil EmailController.php i application/controllers/EmailController.php

Legg til følgende kode til 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());
}
}
}

HER,

  • klasse EmailController extends CI_Controller {…} definerer e-postkontrolleren vår som utvider den overordnede CodeTennregulator.
  • offentlig funksjon __construct() {...} definerer den underordnede konstruktøren som kaller den overordnede konstruktørmetoden.
  • public function index() {...} definerer indeksmetoden som viser kontaktskjemaet
  • function send() {...} definerer metoden som sender e-posten
    • $this->load->config('e-post'); laster e-postkonfigurasjonsinnstillingene
    • $this->load->library('e-post'); laster e-postbiblioteket
    • $from = $this->config->item('smtp_user'); henter avsender-ID fra e-postkonfigurasjonsfilen som vi definerte.
    • $to = $this->input->post('to'); får verdien fra det innsendte skjemaet
    • $emne = $this->input->post('emne'); angir emnet for e-posten fra skjemaet
    • $message = $this->input->post('melding'); setter e-postmeldingen fra skjemaet
    • $this->email->set_newline(“\r\n”); definerer de nye linjetegnene for e-poster
    • $this->e-post->fra($fra); angir avsenderens e-postadresse
    • $this->email->to($to); angir mottakerens e-postadresse
    • $this->email->subject($subject); angir e-postemnet
    • $this->email->message($message); angir e-postmeldingen
    • hvis ($this->email->send()) {…} prøver å sende e-posten. Hvis e-posten sendes, vises meldingen «E-posten din er sendt», ellers skrives det ut feilsøkingsinformasjon om hva som kan ha gått galt.

La oss nå definere e-postrutene.

E-postruter

Legg til følgende ruter til application/config/routes.php

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

Vi kan nå laste inn kontaktskjemaet i nettleseren.

La oss starte den innebygde PHP-serveren.

Åpne terminalen eller kommandolinjen og bla til rotmappen til applikasjonen din. I mitt tilfelle ligger rotmappen på stasjon C:\Sites\ci-app

cd C:\Sites\ci-app

Start serveren ved å bruke følgende kommando

php -S localhost:3000

Last inn følgende URL i nettleseren din: http://localhost:3000/send-email

Du skal kunne se følgende skjema

E-postruter

Skriv inn mottakerens e-postadresse, emne og e-postmelding, og klikk deretter på Send e-post. Hvis e-postkonfigurasjonen din er riktig angitt, skal du kunne se meldingen om at søknaden var vellykket.

Slik sender du HTML-e-poster og vedlegg i CodeTenner

Det samme e-postbiblioteket kan sende meldinger og filer i rikt format. To små endringer gjør om eksemplet med ren tekst ovenfor til en HTML-e-post med et vedlegg.

$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'): forteller biblioteket at brødteksten inneholder HTML, slik at tagger som overskrifter og lenker gjengis i mottakerens innboks.
  • feste(): legger til en fil fra en serversti i meldingen; kall den én gang for hver fil før send().

Husk at HTML-e-poster fortsatt bør inneholde et alternativ i ren tekst, og store vedlegg kan bli avvist av strenge e-postservere.

Spørsmål og svar

Localhost har vanligvis ingen e-postserver, så e-postprotokollen feiler stille. Bytt protokollen til smtp og oppgi en ekte SMTP-vert, bruker og passord, eller bruk en tjeneste som Mailfelle for lokal testing.

Sett smtp_host til smtp.gmail.com, smtp_port til 465 med ssl, og smtp_user til din Gmail adresse. Bruk en Google App-passord i stedet for ditt vanlige passord, siden Gmail blokkerer grunnleggende passordpålogginger.

E-postprotokollen bruker PHPs mail()-funksjon, sendmail kaller serverens lokale binærfil, og smtp kobler seg til en ekstern e-postserver med påloggingsinformasjon. SMTP er den mest pålitelige for levering og autentisering.

Ja. AI kan bygge kontrolleren, legge til skjemavalidering for mottaker og emne, og inkludere håndtering av suksess og feil. RevSe SMTP-innstillingene og legg til hastighetsbegrensning før du bruker den i produksjon.

Ja. Lim inn resultatet fra print_debugger(), så kan AI tolke SMTP-håndtrykkfeil, autentiseringsfeil eller portproblemer, og deretter anbefale de korrigerte verts-, port- eller krypteringsverdiene som skal prøves.

Oppsummer dette innlegget med: