วิธีส่งอีเมลด้วย PHP โดยใช้ Twilio SendGrid และ Mezzio

เผยแพร่แล้ว: 2021-03-24

อีเมลเป็นเครื่องมือสื่อสารที่สำคัญเช่นเคย เพื่อช่วยให้คุณใช้ประโยชน์จากอีเมลได้ดียิ่งขึ้น ฉันจะแสดงวิธีส่งอีเมลโดยใช้เฟรมเวิร์ก Mezzio ของ PHP และ API ของ Twilio SendGrid

โดยเฉพาะอย่างยิ่ง คุณจะได้เรียนรู้วิธีส่งอีเมลที่มีทั้งข้อความธรรมดาและเนื้อหา HTML รวมถึงไฟล์แนบ PDF คุณจะได้เรียนรู้วิธีใช้ฟังก์ชันเทมเพลตธุรกรรมของ Twilio SendGrid เพื่อทำให้การสร้างเนื้อหาอีเมลง่ายขึ้นทั้งโดยทีมพัฒนาและทีมอื่นๆ ในองค์กรของคุณ

ฟังดูเข้าท่า? เอาล่ะ.

ภาพรวมการสมัครด่วน

ในการทำให้บทช่วยสอนนี้มีความหมายมากขึ้น ให้แกล้งทำเป็นว่าโค้ดที่เราจะเขียนนั้นเป็นส่วนหนึ่งของร้านอีคอมเมิร์ซออนไลน์ที่สมมติขึ้นโดยสร้างด้วย Mezzio ซึ่งมีชื่อว่า The Little PHP Shop โดยเฉพาะอย่างยิ่งส่วนนั้นทันทีหลังจากที่ลูกค้าทำการซื้อ เมื่อถึงจุดนั้นในโฟลวผู้ใช้ ลูกค้าจะได้รับอีเมลขอบคุณสำหรับการซื้อ และรวมใบแจ้งหนี้ PDF สำหรับบันทึก

เราจะสร้างคลาส Handler เพื่อส่งอีเมลหลังการซื้อ ซึ่งจะได้รับรายละเอียดการซื้อจากคำสั่งซื้อที่ลูกค้าทำเสร็จ ด้วยข้อมูลการซื้อนั้น คลาส Handler จะใช้หลายคลาสใน SendGrid PHP API เพื่อสร้างและส่งอีเมลยืนยันการซื้อ

สิ่งเหล่านี้ ที่สำคัญที่สุดคือ “SendGrid\Mail\Mail” และ “\SendGrid” “SendGrid\Mail\Mail” เป็นวัตถุที่เก็บคุณสมบัติทั้งหมดสำหรับข้อความอีเมลที่เราจะส่งผ่าน Twilio SendGrid ออบเจ็กต์ "SendGrid" สร้างเลเยอร์การขนส่ง ซึ่งอำนวยความสะดวกในการส่งอีเมลผ่าน Twilio SendGrid

ข้อกำหนดเบื้องต้น

เพื่อให้บทช่วยสอนนี้สมบูรณ์ คุณจะต้องมี 4 สิ่งต่อไปนี้ในสภาพแวดล้อมการพัฒนาในพื้นที่ของคุณ:

  1. บัญชี Twilio SendGrid
  2. PHP 7.4 พร้อม ติดตั้งและเปิดใช้งานส่วนขยาย cURL , mbstring และ O pen SSL
  3. นักแต่งเพลง ติดตั้งทั่วโลก
  4. cURL

นั่งร้านแอพพลิเคชั่น Mezzio

ขั้นแรกเราต้องสร้างแอปพลิเคชันพื้นฐาน ในการทำเช่นนั้น เราจะใช้ Mezzio Skeleton ทำเพื่อเราเช่นเคย เมื่อเราติดตั้งแอปพลิเคชันพื้นฐานแล้ว เราจะสลับไปยังไดเร็กทอรีโครงการที่สร้างขึ้นใหม่ จากนั้นรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ โดยทำตามคำสั่งแรก:

ติดตั้งการพึ่งพาที่จำเป็น

ด้วยโครงงานนั่งร้าน เราจำเป็นต้องเพิ่มการขึ้นต่อกันเพิ่มเติม 3 รายการเพื่อให้โครงการเสร็จสมบูรณ์ เหล่านี้คือ:

  • ไลบรารี PHP API ของ Twilio SendGrid สำหรับการโต้ตอบกับ Twilio SendGrid API
  • ไคลเอนต์ PHP HTTP สำหรับส่งคำขอ HTTP
  • PHP Dotenv สำหรับจัดเก็บและดึงตัวแปรสภาพแวดล้อม

ในการติดตั้ง ให้รันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:

เริ่มต้น PHP Dotenv

เมื่อติดตั้งการพึ่งพา เราจะโหลด PHP Dotenv เพื่อที่มันจะอ่านตัวแปรที่ตั้งค่าใน “.env” และทำให้ PHP พร้อมใช้งานเป็นตัวแปรสภาพแวดล้อม โดยใส่รหัสต่อไปนี้ใน "public/index.php" ต่อจาก "require vendor/autoload.php"

เพิ่มรายละเอียดบัญชี Twilio SendGrid ของคุณ

ตอนนี้ คุณต้องจัดหาแอปพลิเคชันด้วยคีย์ SendGrid API ของคุณ ในการทำเช่นนั้น หลังจากลงชื่อเข้าใช้ Twilio SendGrid แล้ว ให้ไปที่ “การตั้งค่า -> คีย์ API เมื่อมี:

  1. คลิก “ สร้างคีย์ API ” เพื่อสร้างคีย์ API
  2. ตั้งชื่อคีย์ API ใหม่ ยอมรับการอนุญาตคีย์ API เริ่มต้นของ " การเข้าถึงแบบเต็ม " แล้วคลิก " สร้างและดู "

เมื่อสร้างคีย์ API แล้ว ให้คลิกและคัดลอกคีย์ จากนั้นคลิก " เสร็จ สิ้น

หลังจากนั้น เพิ่มคีย์อีก 2 คีย์ในไฟล์: “SENDGRID_DEFAULT_SENDER_ADDRESS” และ “SENDGRID_DEFAULT_SENDER_NAME” ตามชื่อที่ระบุ นี่คือที่อยู่อีเมลและชื่อที่เราจะใช้สำหรับอีเมลใดๆ ที่ส่งจากแอปพลิเคชันของเรา เว้นแต่จะมีการแทนที่

หมายเหตุ: ในการดำเนินการนี้ ใน Sender Authentication ตรวจสอบ ให้แน่ใจว่ามีข้อความว่า "Verified" ในตาราง "Single Sender Verification"

ตั้งค่ารายละเอียดการกำหนดค่าเมลแอปพลิเคชัน

นอกจากคีย์ Twilio SendGrid API แล้ว เราจะจัดเก็บการตั้งค่าการกำหนดค่าอีเมลส่วนกลางอื่นๆ อีกสองสามรายการ โดยเฉพาะอย่างยิ่ง เราจะตั้งค่าจากและตอบกลับไปยังที่อยู่อีเมลและชื่อที่เราจะใช้ในข้อความอีเมลทุกฉบับ ด้วยวิธีนี้เราไม่ต้องตั้งค่าทุกครั้ง

เรากำลังจะสร้างเทมเพลตเนื้อหาอีเมล 2 แบบ: เทมเพลตหนึ่งสำหรับอีเมลข้อความธรรมดาและอีกเทมเพลตหนึ่งสำหรับอีเมล HTML ในการทำเช่นนั้น ใน “config/autoload” ให้สร้างไฟล์ใหม่ชื่อ “mail.global.php” และในนั้น ให้เพิ่มรหัสต่อไปนี้

สร้างคลาสเพื่อสร้างอินสแตนซ์ของวัตถุเมล

ด้วยชุดรายละเอียดการกำหนดค่าแอปพลิเคชันที่สำคัญ ตอนนี้เรามาสร้างคลาสที่จะสร้างอินสแตนซ์ออบเจกต์เมลพื้นฐานด้วยชุดคุณสมบัติเริ่มต้น ในการทำเช่นนั้น ในไดเร็กทอรีใหม่ "src/App/src/Mailer" ให้สร้างไฟล์ใหม่ชื่อ "SendGridMailMessageFactory.php" และเพิ่มโค้ดด้านล่างเข้าไป

เมื่อเราเรียกใช้คลาส คลาสจะมีสิทธิ์เข้าถึงคอนเทนเนอร์การพึ่งพา (DI) ของแอปพลิเคชัน ซึ่งจะดึงรายละเอียดการกำหนดค่าที่เราจัดเก็บไว้ใน “config/autoload/mail.global.php”

หลังจากนั้น จะสร้างอินสแตนซ์ของออบเจกต์ "SendGrid\Mail\Mail" ใหม่และตั้งค่าจากและตอบกลับรายละเอียดโดยส่งรายละเอียดการกำหนดค่าตามลำดับไปยังเมธอด "Mail" "setFrom" และ "setReplyTo" ตามลำดับ หลังจากนั้น มันจะส่งคืนอ็อบเจ็กต์ “Mail” ที่สร้างอินสแตนซ์

หากต้องการใช้งาน คุณต้องลงทะเบียนกับคอนเทนเนอร์ DI ในการทำเช่นนั้น ใน “src/App/src/ConfigProvider” ให้เพิ่มรายการต่อไปนี้ในองค์ประกอบ “factories” ในอาร์เรย์ที่ส่งคืนจากเมธอด “getDependencies”

สร้างตัวจัดการเพื่อส่งอีเมล

ต่อไปเราต้องสร้างคลาส Handler สำหรับเขียนและส่งอีเมล ในการทำเช่นนั้น เราจะใช้ เครื่องมือ CLI ของ Mezzio ที่ พร้อมใช้งานผ่าน Composer โดยเรียกใช้คำสั่งด้านล่าง

การรันคำสั่งด้านบนทำสี่สิ่งให้เรา:

  1. C สร้างคลาส Handler ใหม่ “src/App/Handler/EmailSenderHandler.php”
  2. สร้างคลาสโรงงานเพื่อสร้างอินสแตนซ์คลาส Handler “src/App/Handler/EmailSenderHandlerFactory.php”
  3. สร้างไฟล์เทมเพลต (“src/App/templates/app/email-sender.html.<ext>”) ซึ่งเราไม่ ต้องการ ชื่อไฟล์ “<ext>” ถูกกำหนดโดย เครื่องมือเทมเพลต ที่คุณเลือกในระหว่างขั้นตอน “สร้างโครงการ”
  4. ลงทะเบียนคลาส Handler ใหม่เป็นบริการในคอนเทนเนอร์ DI โดยเพิ่มรายการไปที่ “config/autoload/mezzio-tooling-factories.global.php”

Refactor the Handler เพื่อส่งอีเมล

ด้วยการสร้าง “EmailSenderHandler.php” ตอนนี้เราจำเป็นต้องปรับโครงสร้างใหม่เพื่อให้สามารถส่งอีเมลได้ ในการทำเช่นนั้น ก่อนอื่นเราจะทำการ refactor “EmailSenderHandler's” คอนสตรัคเตอร์ โดยแทนที่พารามิเตอร์ “TemplateRendererInterface” ด้วยพารามิเตอร์ใหม่ 3 ตัว สิ่งเหล่านี้จะเริ่มต้นตัวแปรสมาชิกคลาสใหม่ 3 ตัว:

  • วัตถุ “\SendGrid\Mail\Mail”
  • วัตถุ “\SendGrid”
  • อาร์เรย์ที่มีรายละเอียดการกำหนดค่าที่จำเป็น

คุณสามารถดูคอนสตรัคเตอร์ที่แก้ไขในตัวอย่างด้านล่าง พร้อมกับตัวแปรสมาชิกคลาสที่เกี่ยวข้อง แทนที่ตัวแปรสมาชิกคลาสที่มีอยู่และตัวสร้างด้วยรหัสนี้

หมายเหตุ: ต่อไป เราต้องปรับโครงสร้างวิธีการ "จัดการ" ใหม่ แทนที่เนื้อหาที่มีอยู่ของเมธอด “จัดการ” “EmailSenderHandler” ด้วยโค้ดด้านล่าง จากนั้นมาดูขั้นตอนการทำงานกัน

เริ่มต้นด้วยการใช้ “$request->getParsedBody()” เพื่อดึงพารามิเตอร์ใด ๆ ที่ระบุในเนื้อหาคำขอ ซึ่งจะส่งคืนอาร์เรย์ที่เชื่อมโยง โดยเริ่มต้น “$details” ด้วยพารามิเตอร์ที่พร้อมใช้งาน จะเรียกเมธอด "SendGrid\Mail\Mail" ของออบเจ็กต์ "addTo" เพื่อตั้งค่าผู้รับอีเมล โดยส่งผ่านที่อยู่อีเมลและชื่อของผู้รับใน 2 อาร์กิวเมนต์แรกและอาร์เรย์ของการ แทนที่ ในอาร์กิวเมนต์ที่สาม

การแทนที่ทำให้คุณสามารถกำหนดข้อความอีเมลสำหรับผู้รับแต่ละคนได้ ในอีเมลข้อความธรรมดา สตริงใดๆ ที่ล้อมรอบด้วยยัติภังค์ในทันที เช่น “-first_name-” จะเป็นการแทนที่ ในอีเมล HTML จะใช้ ไวยากรณ์ของแฮนด์ บาร์ ซึ่งล้อมรอบสตริงด้วยวงเล็บคู่ เช่น “{{ first_name }}”

ต่อไป เรากำหนดหัวเรื่องของข้อความและเพิ่มข้อความธรรมดาและเนื้อหาข้อความ HTML ด้วยเหตุนี้ อีเมลของเราจึงพร้อมที่จะส่ง ดังนั้นเราจึงใช้ออบเจกต์ "SendGrid", "$this->mailer" เพื่อส่ง โดยกำหนดค่าเริ่มต้นตัวแปรใหม่ "$response" โดยมีการตอบสนองจากการพยายามส่งข้อความ สุดท้าย เราส่งคืน วัตถุ JsonResponse ที่มีรหัสสถานะและเนื้อหาจากการตอบกลับ

หมายเหตุ: Refactor EmailSenderHandlerFactory's __invoke method

ตอนนี้เราได้ปรับโครงสร้าง “EmailSenderHandler” ใหม่แล้ว เราต้องปรับโครงสร้าง “EmailSenderHandlerFactory” การดำเนินการนี้จะยกตัวอย่าง “EmailSenderHandler” อย่างถูกต้อง ในการทำเช่นนั้น ให้แทนที่คำจำกัดความที่มีอยู่ของวิธีการ “__invoke`” ด้วยรหัสต่อไปนี้

สิ่งนี้จะดึงวัตถุ “\SendGrid\Mail\Mail” จากคอนเทนเนอร์ DI กำหนดค่าเริ่มต้นกับผู้ส่งและตอบกลับรายละเอียดอีเมล และเริ่มต้นวัตถุใหม่ที่ชื่อ “$message” จากนั้นจะสร้างอินสแตนซ์ของวัตถุ "SendGrid" ใหม่ที่ชื่อ "$mailer" เพื่อส่งข้อความอีเมล สุดท้าย จะดึงการกำหนดค่าอีเมลจากการกำหนดค่าของแอปพลิเคชัน จากนั้นจะใช้สิ่งเหล่านี้เพื่อเริ่มต้นและส่งคืนออบเจ็กต์ "EmailSenderHandler"

อัพเดทตารางเส้นทาง

จากการเปลี่ยนแปลงทั้งหมดเหล่านี้ มีการเปลี่ยนแปลงครั้งสุดท้ายก่อนที่เราจะสามารถทดสอบโค้ดและส่งอีเมลได้ เราต้องอัปเดตตารางเส้นทางเพื่อให้เส้นทางเริ่มต้นใช้คลาส Handler ใหม่ของเราเป็นตัวจัดการเส้นทางแทน "HomePageHandler" ในการทำเช่นนั้น ให้แทนที่คำจำกัดความของเส้นทางเริ่มต้นใน “config/routes.php” ด้วยตัวอย่างต่อไปนี้

ส่งอีเมล์ฉบับแรก

ตอนนี้ได้เวลาส่งอีเมลฉบับแรกแล้ว ในการทำเช่นนั้น ก่อนอื่น ให้เริ่มแอปพลิเคชันโดยใช้คำสั่งด้านล่างในเทอร์มินัล

จากนั้น ใช้ cURL ส่งคำขอ GET ไปที่ “ http://localhost:8080 ” ดังตัวอย่างด้านล่าง โดยแทนที่ค่าในวงเล็บมุมด้วยรายละเอียดที่เกี่ยวข้องกับอีเมลของคุณ

คุณควรเห็นเอาต์พุต “{“status”:202,“message”:””}” ไปยังเทอร์มินัล และคุณควรได้รับอีเมลที่มีลักษณะเหมือนภาพด้านล่าง

หมายเหตุ: ใช้เทมเพลตอีเมลธุรกรรมแทนสตริงเทมเพลต

แม้ว่าเราจะสามารถส่งอีเมลที่มีทั้งข้อความธรรมดาและเนื้อหา HTML ได้ แต่วิธีที่เราทำนั้นกลับไม่เป็นไปตามอุดมคติ สำหรับอีเมลแต่ละฉบับที่เราส่ง และแอปพลิเคชันของเราอาจมีการส่งไปบ้าง เราจำเป็นต้องเพิ่มข้อความธรรมดาและเนื้อหา HTML สำหรับอีเมลเหล่านั้น

แต่การจัดเก็บคำจำกัดความของเนื้อหาอีเมลในโค้ดนั้นใช้ความพยายามส่วนใหญ่ในทีมพัฒนา อย่างไรก็ตาม อย่างน้อยจากประสบการณ์ของผม ทีมอื่นๆ มักจะทำการตลาด สร้าง และรักษาเทมเพลตอีเมล

ด้วยเหตุผลดังกล่าว และเนื่องจากจะทำให้การพัฒนาเร็วขึ้นและแบ่งปันภาระงานให้กับหลาย ๆ ทีม เราจะปรับโครงสร้างแอปพลิเคชันใหม่เพื่อใช้ เทมเพลตอีเมล ธุรกรรม คุณสามารถสร้างและดูแลสิ่งเหล่านี้ผ่าน Twilio SendGrid UI โดยสมาชิกในทีมที่อาจมีประสบการณ์ด้านเทคนิคเพียงเล็กน้อยหรือไม่มีเลย แทนที่จะใช้โค้ด

หากคุณไม่เคยได้ยิน คำศัพท์เหล่านี้ มาก่อน อภิธานศัพท์ของ Twilio SendGrid จะกำหนดไว้ ดังนี้:

เทมเพลตอีเมลธุรกรรมคือเลย์เอาต์อีเมลที่กำหนดไว้ล่วงหน้าซึ่งนักการตลาด นักออกแบบ และนักพัฒนาสามารถใช้เพื่อสร้างแคมเปญอีเมลธุรกรรมได้อย่างรวดเร็วและง่ายดาย เทมเพลตอีเมลธุรกรรมของ Twilio SendGrid ช่วยให้ผู้ที่ไม่ใช่ด้านเทคนิคและด้านเทคนิคทำการเปลี่ยนแปลงอีเมลที่ผู้รับได้รับแบบเรียลไทม์ได้

สำหรับบทความนี้ เราต้องการเพียงบทความพื้นฐานเท่านั้น โดยทำตามรายละเอียดใน เอกสารประกอบ Twilio SendGrid และสร้างรายการที่มีเฉพาะในโมดูลข้อความเดียว จากนั้นสำหรับข้อความเนื้อหา ให้ใช้ข้อความด้านล่าง

โปรดทราบว่ามีการแทนที่ 6 รายการในอีเมล:

  • “first_name”: ชื่อจริงของลูกค้า
  • “last_name”: นามสกุลของลูกค้า
  • “sender_name”: ชื่อร้านอีคอมเมิร์ซ (The Little PHP Shop)
  • “sender_state”: สถานะของร้านอีคอมเมิร์ซ
  • “sender_country”: ประเทศของร้านอีคอมเมิร์ซ
  • “support_email”: อีเมลสนับสนุนที่ลูกค้าสามารถใช้เพื่อรับการสนับสนุนหลังการขาย

เนื่องจากเราจำเป็นต้องให้ข้อมูลนั้นกับใบสมัครของเรา ชื่อและนามสกุลของลูกค้าที่เรามีอยู่แล้ว การแทนที่ที่เหลืออีก 4 รายการจะเป็นแบบสากล ดังที่เราทำก่อนหน้านี้ เราจะเพิ่มการกำหนดค่าด้านล่างใน “ config/autoload/mail.global.php ” หลังองค์ประกอบ “เทมเพลต”

ด้วยไฟล์การกำหนดค่าใหม่ที่สร้างขึ้นในเมธอด "จัดการ" "EmailSenderHandler" ให้แทนที่ 2 การเรียกไปที่ "$this->mail->addContent()" ด้วยรหัสต่อไปนี้

การเรียกเมธอด 2 รายการจะเพิ่มรายละเอียดผู้ส่งและที่อยู่อีเมลสนับสนุนเป็นการแทนที่ส่วนกลาง การแทนที่เหล่านี้มีผลกับเนื้อหาของอีเมลก่อนการแทนที่อื่นๆ แต่จะถูกแทนที่หากมีการแทนที่ด้วยคีย์เดียวกันสำหรับผู้รับอีเมล

ถัดไป คุณต้องดึง ID ของเทมเพลตอีเมลธุรกรรม คุณสามารถค้นหาได้โดยคลิกชื่อเทมเพลตใน รายการเทมเพลต ดังที่คุณเห็นในภาพหน้าจอด้านล่าง

คัดลอกและเก็บไว้ใน "config/autoload/mail.global.php" ในองค์ประกอบใหม่ที่มีคีย์ "template_id" จากนั้นลบ "ธรรมดา" และ "HTML" เมื่อเสร็จแล้ว องค์ประกอบ "เมล/เทมเพลต" ของอาร์เรย์ที่ส่งคืนจะมีลักษณะเหมือนโค้ดด้านล่าง โดยที่ "<the template's id>" จะแทนที่ ID ของเทมเพลตของคุณ

ด้วยการอัปเดตการกำหนดค่า ตอนนี้เราต้องเพิ่มการเรียกไปยังเมธอด "Mail" "setTemplateId" ในเมธอด "EmailSenderHandler" "handle" โดยส่งผ่าน ID เทมเพลตที่เราเพิ่งเพิ่มไปยัง "config/autoload/mail.global php” คุณสามารถดูตัวอย่างได้ในรหัสด้านล่าง

มาทดสอบความเปลี่ยนแปลงกัน

เช่นเคย ใช้ cURL ส่งคำขอ GET ไปที่ http://localhost:8080 ” เพื่อทดสอบว่าการเปลี่ยนแปลงทำงานตามที่คาดไว้หรือไม่ คุณควรเห็นเอาต์พุต “{“status”:202,“message”:””}” ไปยังเทอร์มินัลดังในตัวอย่างก่อนหน้า ในกล่องจดหมายอีเมลของคุณ คุณควรเห็นอีเมลที่น่ารัก โดยมีการแทนที่การแทนที่ดังในภาพหน้าจอด้านล่าง

แนบใบแจ้งหนี้ PDF

ตอนนี้เราใช้เทมเพลตแบบไดนามิกแล้ว เรามาแนบใบแจ้งหนี้ PDF ที่เราพูดถึงที่ด้านบนของบทความกัน เพื่อประหยัดเวลาและความพยายามในการค้นหาหรือสร้างด้วยตัวเอง เราได้สร้าง ตัวอย่างใบแจ้งหนี้ PDF ที่คุณสามารถใช้สำหรับบทความนี้ บันทึกไว้ใน ไดเรกทอรี "ข้อมูล " ของแอปพลิเคชัน

หมายเหตุ: ในการแนบใบแจ้งหนี้ เราจำเป็นต้องใช้วิธี "Mail" "addAttachment" ซึ่งคุณสามารถดูได้ในตัวอย่างโค้ดถัดไป วิธีการนี้ใช้ 5 ข้อโต้แย้ง แต่เราให้เพียง 4 ข้อแรกเท่านั้น เหล่านี้คือ:

  1. ออบเจ็กต์ " สิ่งที่ แนบมา" หรือ สตริง ที่ เข้ารหัส Base64 หากค่าของพารามิเตอร์นี้ไม่ได้เข้ารหัส base64 วิธีการจะทำเพื่อเรา
  2. ประเภท mime ของไฟล์แนบ (ปัจจุบันรู้จักกันในชื่อ Media type )
  3. ชื่อไฟล์ของไฟล์แนบ นี่คือชื่อที่ไฟล์จะบันทึกเป็นค่าเริ่มต้น เว้นแต่ผู้ใช้จะเปลี่ยนแปลง
  4. การ จัดการเนื้อหา ของเอกสารแนบ ถ้าคุณไม่คุ้นเคยกับการจัดการเนื้อหา การจัดการเนื้อหา แบบอินไลน์ หมายความว่าสิ่งที่แนบมาควรแสดงโดยอัตโนมัติเมื่อข้อความปรากฏขึ้น และการจัดการเนื้อหา ที่แนบ หมายความว่าสิ่งที่แนบไม่แสดงโดยอัตโนมัติและต้องมีการดำเนินการบางรูปแบบจากผู้ใช้ เปิด.

ในตัวอย่างโค้ดด้านล่าง เมธอด file_get_contents ของ PHP จะอ่านเนื้อหาของไฟล์เป็นตัวแปรใหม่ที่ชื่อ “$invoice” จากนั้น PDF จะแนบไปกับข้อความโดยเรียกเมธอด "addAttachment"

ที่นี่ เรา:

  • ส่งผ่านเนื้อหาของใบแจ้งหนี้ซึ่งจะถูกเข้ารหัส Base64
  • ตั้งค่าประเภท MIME เป็น “application/pdf” ในขณะที่เรากำลังแนบไฟล์ PDF
  • ตั้งชื่อไฟล์ของใบแจ้งหนี้เป็นชื่อสมมติที่ลูกค้าอาจคาดหวังได้อย่างสมเหตุสมผล
  • ตั้งค่าการจัดการเนื้อหาเป็น "สิ่งที่แนบมา"

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

นั่นคือวิธีส่งอีเมลด้วย PHP โดยใช้ Twilio SendGrid และ Mezzio

แม้ว่าเราจะขีดข่วนพื้นผิวของสิ่งที่เป็นไปได้เมื่อส่งอีเมลด้วย Twilio SendGrid และ Mezzio ตอนนี้ คุณสามารถส่งอีเมลด้วยข้อความธรรมดาและเนื้อหา HTML รวมถึงไฟล์แนบได้ คุณยังได้เรียนรู้วิธีใช้เทมเพลตธุรกรรมและการแทนที่ซึ่งคุณสามารถตั้งค่าได้ทั่วโลกและตามแต่ละผู้รับ

ฉันขอแนะนำอย่างยิ่งให้คุณดู เอกสารประกอบของไลบรารี PHP เพื่อดูว่ามีอะไรอีกบ้าง เช่น กำหนดเวลาส่งอีเมล การแนบไฟล์จาก Amazon S3 การเพิ่มส่วนหัว การเพิ่มส่วนและหมวดหมู่

Matthew Setter เป็นโปรแกรมแก้ไข PHP ในทีม Twilio Voices และ—โดยธรรมชาติ—เป็นผู้พัฒนา PHP เขายังเป็นผู้เขียน Mezzio Essentials อีกด้วย เมื่อเขาไม่ได้เขียนโค้ด PHP เขากำลังแก้ไขบทความ PHP ที่ยอดเยี่ยมที่ Twilio เขาสามารถติดต่อได้ทาง:

  • อีเมล์: [email protected]
  • เว็บ: http://matthewsetter.com
  • Twitter: @settermjd
  • GitHub: https://github.com/settermjd