วิธีการส่งอีเมลโดยใช้ Codeเครื่องทำให้ลุกไหม้

⚡ สรุปอย่างชาญฉลาด

Codeการส่งอีเมลด้วย Igniter อาศัยไลบรารีอีเมลในตัวของเฟรมเวิร์กเพื่อส่งข้อความผ่าน SMTP หรือเซิร์ฟเวอร์อีเมลในเครื่อง ตัวอย่างนี้สร้างไฟล์การกำหนดค่าอีเมล มุมมองแบบฟอร์มติดต่อ และคอนโทรลเลอร์ที่อ่านข้อมูลจากแบบฟอร์มและส่งข้อความออกไป

  • 📧 ห้องสมุดในตัว: ไลบรารีอีเมลนี้ส่งอีเมลได้ด้วยโค้ดเพียงเล็กน้อย และรองรับการส่งอีเมลผ่าน SMTP, Sendmail และ PHP
  • ⚙️ การตั้งค่าส่วนกลาง: ไฟล์การตั้งค่า email.php แบบกำหนดเองจะจัดเก็บโปรโตคอล โฮสต์ พอร์ต ผู้ใช้ และรหัสผ่าน เพื่อให้การตั้งค่าทั้งหมดอยู่ในที่เดียวกัน
  • 🔓 ข้อมูลรับรอง SMTP: จำเป็นต้องระบุค่า smtp_host, smtp_user และ smtp_pass ที่ถูกต้อง พารามิเตอร์ที่ไม่ถูกต้องจะไม่สามารถส่งอีเมลได้จริง
  • 📝 แบบฟอร์มถึงผู้ควบคุม: มุมมองข้อมูลผู้ติดต่อจะรวบรวมข้อมูลผู้รับ หัวข้อ และข้อความ ซึ่งตัวควบคุมจะอ่านข้อมูลเหล่านี้โดยใช้ไลบรารีข้อมูลนำเข้า
  • 📤 ส่งโฟลว์: ตัวควบคุมจะกำหนดค่าจาก, ถึง, หัวเรื่อง และข้อความ จากนั้นเรียกฟังก์ชัน send() และพิมพ์รายงานดีบักเกอร์หากเกิดข้อผิดพลาด
  • 📎 HTML และไฟล์: การเปลี่ยนประเภทอีเมลเป็น html และเรียกใช้ attach() จะช่วยให้คุณสามารถส่งข้อความที่มีการจัดรูปแบบพร้อมไฟล์แนบได้
  • 🤖 AI ช่วยเหลือ: เครื่องมือ AI สามารถสร้างตัวควบคุมอีเมล ตรวจสอบความถูกต้องของข้อมูลที่ป้อนในแบบฟอร์ม และวินิจฉัยข้อผิดพลาดในการเชื่อมต่อ SMTP จากผลลัพธ์ของดีบักเกอร์ได้

Codeการส่งอีเมลด้วย Igniter

อีเมลมีความสำคัญมากในแอปพลิเคชันบนเว็บ เมื่อผู้ใช้ลงทะเบียน เราอาจต้องการส่งอีเมลไปเพื่อยืนยันที่อยู่อีเมลและอนุญาตให้ผู้ใช้ยืนยันการสมัครสมาชิก นอกจากนี้เรายังใช้อีเมลในการรีเซ็ตรหัสผ่านที่ลืม และส่งใบแจ้งหนี้และใบเสร็จรับเงินให้กับลูกค้า CodeIgniter ช่วยให้เราส่งอีเมลจากแอปพลิเคชันของเราได้อย่างง่ายดาย โดยใช้ตัวเลือกที่หลากหลาย

CodeIgniter มีคลังอีเมลในตัวที่เราสามารถนำมาใช้ในการส่งอีเมลได้

Codeการกำหนดค่าอีเมล Igniter

เราจำเป็นต้องมีศูนย์กลางในการจัดการการตั้งค่าอีเมล 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ตัวควบคุมอีเมล Igniter

ต่อไปเราจะสร้างคอนโทรลเลอร์ที่จะทำหน้าที่ส่งอีเมล

สร้างไฟล์ใหม่ 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());
}
}
}

ที่นี่

  • คลาส EmailController extends CI_Controller {…} กำหนดตัวควบคุมอีเมลของเราซึ่งสืบทอดมาจากคลาสแม่ Codeตัวควบคุมการจุดระเบิด
  • ฟังก์ชั่นสาธารณะ __construct() {…} กำหนดตัวสร้างลูกที่เรียกเมธอดตัวสร้างพาเรนต์
  • ฟังก์ชั่นสาธารณะ index() {…} กำหนดวิธีการทำดัชนีที่แสดงแบบฟอร์มการติดต่อ
  • ฟังก์ชัน send() {…} กำหนดวิธีการที่ส่งอีเมล
    • $this->load->config('email'); โหลดการตั้งค่าคอนฟิกูเรชันอีเมล
    • $this->load->library('email'); โหลดไลบรารีอีเมล
    • $from = $this->config->item('smtp_user'); รับ ID ผู้ส่งจากไฟล์กำหนดค่าอีเมลที่เราได้กำหนดไว้
    • $to = $this->input->post('to'); รับค่า 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); ตั้งค่าข้อความอีเมล์
    • หาก ($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 ใช้ฟังก์ชัน mail() ของ PHP, sendmail เรียกใช้ไบนารีภายในเครื่องของเซิร์ฟเวอร์ และ smtp เชื่อมต่อกับเซิร์ฟเวอร์อีเมลภายนอกโดยใช้ข้อมูลรับรอง SMTP เป็นโปรโตคอลที่น่าเชื่อถือที่สุดสำหรับการส่งและตรวจสอบความถูกต้องของอีเมล

ใช่แล้ว AI สามารถสร้างตัวควบคุม เพิ่มการตรวจสอบความถูกต้องของแบบฟอร์มสำหรับผู้รับและหัวเรื่อง และรวมถึงการจัดการความสำเร็จและข้อผิดพลาดได้ Revตรวจสอบการตั้งค่า SMTP และเพิ่มการจำกัดอัตราการส่งก่อนใช้งานจริง

ใช่แล้ว วางผลลัพธ์จาก print_debugger() ลงไป แล้ว AI จะสามารถตีความความล้มเหลวในการเชื่อมต่อ SMTP ข้อผิดพลาดในการตรวจสอบสิทธิ์ หรือปัญหาเกี่ยวกับพอร์ต จากนั้นจะแนะนำค่าโฮสต์ พอร์ต หรือการเข้ารหัสที่ถูกต้องให้ลองใช้

สรุปโพสต์นี้ด้วย: