Как да изпратите имейл с помощта на Codeподпалвач

⚡ Умно обобщение

CodeИзпращането на имейл от Igniter разчита на вградената библиотека за имейл на платформата, за да доставя съобщения чрез SMTP или локалния пощенски сървър. Този пример създава конфигурационен файл за имейл, изглед на формуляр за контакт и контролер, който чете входните данни от формуляра и изпраща съобщението.

  • 📧 Вградена библиотека: Библиотеката за имейл изпраща имейли с минимален код и поддържа SMTP, Sendmail и PHP пощенски транспорти.
  • Централна конфигурация: Персонализиран конфигурационен файл email.php съхранява протокола, хоста, порта, потребителя и паролата, така че настройките да останат на едно място.
  • 🔓 SMTP идентификационни данни: Изискват се валидни стойности за smtp_host, smtp_user и smtp_pass; фиктивните параметри никога няма да доставят истински имейл.
  • 📝 Формуляр до контролера: Изгледът за контакт събира получателя, темата и съобщението, които контролерът чете с входната библиотека.
  • 📤 Изпращане на поток: Контролерът задава от, до, тема и съобщение, след което извиква send() и отпечатва отчет за дебъгер при неуспех.
  • 📎 HTML и файлове: Превключването на mailtype към html и извикването на attach() ви позволява да изпращате форматирани съобщения с прикачени файлове.
  • 🤖 AI Assist: Инструментите с изкуствен интелект могат да генерират контролера за имейл, да валидират въведените данни от формуляра и да диагностицират грешки в SMTP връзката от изхода на дебъгера.

CodeИзпращане на имейл от запалител

Имейлът е много важен в уеб приложенията. Когато потребител се регистрира, може да поискаме да му изпратим имейл, за да потвърдим имейл адреса му и да му позволим да потвърди абонамента. Също така използваме имейл, за да възстановим забравени пароли и да изпращаме фактури и касови бележки на клиентите. CodeIgniter ни улеснява изключително много да изпращаме имейли от нашето приложение, използвайки различни опции.

CodeIgniter има вградена имейл библиотека, с която можем да работим, когато изпращаме имейли.

CodeКонфигурация на имейла на запалителя

Трябва да имаме централизирано място, където да можем да управляваме настройките на имейла. CodeIgniter не се предлага с конфигурационен файл за имейли, така че ще трябва да създадем сами такъв.

Създайте файл email.php в директорията application/config

Добавете следния код към 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
);

ТУК,

  • „protocol“ => „smtp“ указва протокола, който искате да използвате при изпращане на имейл. Това може да бъде Gmail SMTP настройки или SMTP настройки от вашия хост
  • „smtp_host“ => „smtp.example.com“ указва SMTP хоста. Например, ако искате да използвате Gmail тогава ще имате нещо подобно на smtp.gmail.com
  • 'smtp_port' => 465, отворен порт на посочения SMTP хост, който е конфигуриран за SMTP поща
  • 'smtp_user' => 'no-reply@example.com', имейл адресът, който ще се използва като подател при изпращане на имейли. Това трябва да е валиден имейл адрес, който съществува на сървъра
  • 'smtp_pass' => '12345!', паролата за посочения имейл адрес на SMTP потребител
  • „smtp_crypto“ => „ssl“, указва метода за криптиране, който ще се използва, например ssl, tls и др.
  • „mailtype“ => „text“ задава типа на имейла, който ще се използва. Това може да бъде обикновен текст или HTML, в зависимост от вашите нужди.
  • 'smtp_timeout' => '4', указва времето в секунди, което трябва да изтече при опит за свързване с хоста, преди да бъде хвърлено изключение за изчакване.
  • 'charset' => 'iso-8859-1', дефинира набора от знаци, който да се използва при изпращане на имейли.
  • „wordwrap“ => TRUE, ако е зададено на TRUE, пренасянето на думи е активирано. Ако е зададено на FALSE, пренасянето на думи не е активирано

Забележка: за да изпращате имейли за работа, трябва да предоставите валидни конфигурационни параметри. Фиктивните параметри няма да могат да изпращат имейли.

CodeПреглед на имейла на Igniter

В този раздел ще създадем изгледа, който ще изпрати имейла до получателя.

Създайте нов имейл указател в приложение/изгледи

Създайте нов файл contact.php в application/views/email

Добавете следния код към 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>

ТУК,

  • Имаме основна HTML форма, която приема имейла, темата и съобщението, след което предава параметрите към имейл маршрута.

CodeКонтролер за имейл на запалител

Нека сега създадем контролера, който ще обработва изпращането на имейли.

Създайте нов файл EmailController.php в application/controllers/EmailController.php

Добавете следния код към 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());
}
}
}

ТУК,

  • class EmailController extends CI_Controller {…} дефинира нашия имейл контролер, който разширява родителския клас CodeКонтролер на запалката.
  • публична функция __construct() {…} дефинира дъщерния конструктор, който извиква метода на родителския конструктор.
  • публична функция index() {…} дефинира индексния метод, който показва формата за контакт
  • функция send() {…} дефинира метода, който изпраща имейла
    • $this->load->config('email'); зарежда настройките за конфигурация на имейл
    • $this->load->library('имейл'); зарежда имейл библиотеката
    • $from = $this->config->item('smtp_user'); получава идентификатора на изпращача от имейл конфигурационния файл, който сме дефинирали.
    • $to = $this->input->post('to'); получава стойността на to от изпратения формуляр
    • $subject = $this->input->post('subject'); задава темата на имейла от формата
    • $message = $this->input->post('message'); задава имейл съобщението от формата
    • $this->email->set_newline(“\r\n”); дефинира символите на новия ред за имейли
    • $това->имейл->от($от); задава имейл адреса на изпращача
    • $това->имейл->до($до); задава имейл адреса на получателя
    • $това->имейл->тема($тема); задава темата на имейла
    • $this->email->message($message); настройва имейл съобщението
    • ако ($this->email->send()) {…} се опита да изпрати имейла. Ако имейлът е изпратен успешно, се показва съобщението „Вашият имейл е изпратен успешно“, в противен случай се отпечатва информация за отстраняване на грешки за евентуална грешка.

Нека сега дефинираме имейл маршрутите.

Имейл маршрути

Добавете следните маршрути към application/config/routes.php

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

Вече можем да заредим формата за контакт в уеб браузъра.

Нека стартираме вградения PHP сървър.

Отворете терминала или командния ред и отидете до коренната директория на вашето приложение. В моя случай, коренната директория се намира на диск C:\Sites\ci-app

cd C:\Sites\ci-app

Стартирайте сървъра, използвайки следната команда

php -S localhost:3000

Заредете следното URL във вашия уеб браузър: http://localhost:3000/send-email

Трябва да можете да видите следния формуляр

Имейл маршрути

Въведете имейл адреса на получателя, темата и имейл съобщението, след което кликнете върху „Изпращане на имейл“. Ако конфигурацията на имейла ви е зададена правилно, тогава би трябвало да можете да видите съобщението за успех.

Как да изпращате HTML имейли и прикачени файлове в Codeподпалвач

Същата библиотека за имейли може да изпраща богато форматирани съобщения и файлове. Две малки промени превръщат примера с обикновен текст по-горе в HTML имейл с прикачен файл.

$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'): казва на библиотеката, че тялото съдържа HTML, така че тагове като заглавия и връзки се показват във входящата поща на получателя.
  • прикачи(): добавя файл от пътя на сървъра към съобщението; извикайте го веднъж за всеки файл преди send().

Не забравяйте, че HTML имейлите все пак трябва да включват алтернатива с обикновен текст, а големите прикачени файлове може да бъдат отхвърлени от строгите пощенски сървъри.

Въпроси и Отговори

Localhost обикновено няма пощенски сървър, така че пощенският протокол се проваля безшумно. Превключете протокола на smtp и предоставете истински SMTP хост, потребител и парола или използвайте услуга като Mailкапан за локално тестване.

Задайте smtp_host на smtp.gmail.com, smtp_port на 465 с ssl и smtp_user на вашия Gmail адрес. Използвайте Google Парола за приложение, а не обичайната ви парола, тъй като Gmail блокира основни входове с парола.

Протоколът за поща използва функцията mail() на PHP, sendmail извиква локалния двоичен файл на сървъра, а smtp се свързва с външен пощенски сървър с идентификационни данни. SMTP е най-надеждният протокол за доставка и удостоверяване.

Да. Изкуственият интелект може да изгради контролера, да добави валидиране на формуляри за получателя и темата и да включи обработка на успех и грешки. RevПрегледайте настройките на SMTP и добавете ограничаване на скоростта, преди да го използвате в продукция.

Да. Поставете резултата от print_debugger() и изкуственият интелект може да интерпретира неуспешни SMTP ръкостискания, грешки в удостоверяването или проблеми с порта, след което да препоръча коригираните стойности за хост, порт или криптиране, които да опитате.

Обобщете тази публикация с: