PHP ส่งเมล html การส่งอีเมลโดยใช้ PHP

ตลอดหกเดือนที่ผ่านมา ฉันตั้งใจเรียน PHP อย่างจริงจัง นานมาแล้วฉันดาวน์โหลดหนังสือสำหรับตัวเองและอ่านในเวลาว่าง ฉันได้รับความรู้เป็นศูนย์อย่างแน่นอนจากหนังสือเล่มนี้ ตอนนี้เป็นเวลาหกเดือนแล้วที่ฉันสร้างเว็บไซต์สำหรับโฆษณารถยนต์ โดยใช้ PHP ล้วนๆ

วันนี้ฉันตัดสินใจเขียนสคริปต์ที่รับผิดชอบในการส่งข้อความอีเมลจากเว็บไซต์ ปรากฎว่าใน PHP สิ่งนี้ทำได้ง่ายมาก

อีเมลถูกส่งผ่าน PHP อย่างไร

ก่อนอื่น ฉันขอชี้แจงว่า PHP ไม่สามารถส่งจดหมายได้ด้วยตัวเอง PHP มีฟังก์ชันที่ทำงานร่วมกับเมลเซิร์ฟเวอร์

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

หากมีเพียงผู้ให้บริการโฮสติ้งเท่านั้นที่จะโปรโมทเว็บไซต์ได้ฟรี มันคงจะสวยงามมาก

รหัส PHP สำหรับการส่งอีเมล

มีฟังก์ชัน mail() เพียงฟังก์ชันเดียวเท่านั้นที่รับผิดชอบในการส่งอีเมลใน PHP; ซึ่งมีรูปแบบดังนี้:

จดหมาย (ที่จะส่ง, หัวเรื่องข้อความ, ข้อความ, ข้อมูลเพิ่มเติม);

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

$อีเมล์ = " [ป้องกันอีเมล]"; $subject = "หัวเรื่องของจดหมาย"; $message = "ขอแสดงความยินดี คุณเพิ่งได้รับจดหมาย\n จดหมายนี้ถูกส่งโดยใช้ PHP"; $headers = "จาก: adminwa.ru \r\n เนื้อหา- ประเภท: ข้อความ/ ธรรมดา; charset=utf-8\r\n"; mail($อีเมล์, $subject, $message, $headers);

และตอนนี้มีความคิดเห็นเล็กน้อยเกี่ยวกับโค้ดที่กำหนด

ใน $email คุณต้องระบุที่อยู่ของผู้รับข้อความของคุณ หากมีหลายที่อยู่ ให้คั่นด้วยเครื่องหมายจุลภาค เพียงจำไว้ว่าทุกคนที่ได้รับจดหมายของคุณจะเห็นผู้รับทั้งหมด

$subject ต้องมีอักขระไม่เกิน 255 ตัว นี่ไม่ใช่ข้อจำกัดของ PHP แต่เป็นมาตรฐานอีเมล

การขึ้นบรรทัดใหม่ใน $subject และ $message ดำเนินการโดยใช้อักขระพิเศษ (นิพจน์) – \n

พารามิเตอร์เพิ่มเติมสามารถอธิบายได้ใน $headers จาก- อีเมลนี้มาจากใคร? ประเภทเนื้อหา– รูปแบบตัวอักษร (ระบุได้ ข้อความ/ธรรมดา– ข้อความธรรมดาหรือ ข้อความ/html– มาร์กอัป html), ชุดอักขระ – การเข้ารหัสตัวอักษร และอื่น ๆ อีกมากมาย

ทุกบรรทัดใน $headers ต้องคั่นด้วย \r\n

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

ฉันมักจะเขียนคำนำว่าทำไมหัวข้อนี้จึงสำคัญที่ต้องเรียนรู้ แต่ไม่ใช่ครั้งนี้ เพราะที่นี่ ฉันแน่ใจว่าจะไม่มีใครมีคำถาม: “ทำไมต้องส่งอีเมลด้วย PHP?” ดังนั้นฉันจึงเสนอให้ลงมือทำธุรกิจทันทีและเรียนรู้เกี่ยวกับสิ่งนี้โดยละเอียด โดยเฉพาะอย่างยิ่งเนื่องจากการดำเนินการส่งอีเมลผ่าน PHP นั้นไม่ง่ายกว่านี้อีกแล้ว ดังนั้นแม้แต่ผู้ที่ไม่คุ้นเคยกับ PHP เลยก็จะเข้าใจ

ก่อนอื่นเรามาพูดถึงทฤษฎีกันก่อน มันน่าเบื่อ แต่เชื่อฉันเถอะว่ามันสำคัญ จำเป็นต้องมีเซิร์ฟเวอร์ SMTP เพื่อส่งอีเมล บริการโฮสติ้งแบบชำระเงินส่วนใหญ่จะต้องมีสิ่งนี้ อย่างไรก็ตาม หากเป็นไปไม่ได้ (เช่น โฮสติ้งฟรีหรือราคาถูกมาก) คุณสามารถใช้เซิร์ฟเวอร์ SMTP บุคคลที่สาม (เช่น mail.ru) นั่นคือสิ่งสำคัญ: ต้องใช้เซิร์ฟเวอร์ SMTP ในการส่ง

ประการที่สอง หากต้องการรับอีเมล คุณต้องมีเซิร์ฟเวอร์ POP ทำไมฉันถึงพูดทั้งหมดนี้? และจากความจริงที่ว่าผู้คนมักถามในฟอรัม: “ทำไมการส่งอีเมลใน PHP ถึงไม่ทำงานสำหรับฉัน” และในขณะเดียวกัน ผู้คนก็พยายามส่งจดหมายจากเซิร์ฟเวอร์ที่ไม่มี SMTP เลย สำคัญมาก: PHP ไม่ส่งอีเมล! แอปพลิเคชัน sendmail จะส่งอีเมลซึ่งมีอยู่ในระบบปฏิบัติการ Unix ซึ่งเซิร์ฟเวอร์ส่วนใหญ่ติดตั้งอยู่ และ PHP ก็ส่งคำสั่งไปยังแอปพลิเคชันนี้ ฉันหวังว่าฉันจะอธิบายได้ชัดเจน ดังนั้นสิ่งแรกที่คุณต้องทำคือรับแอปพลิเคชัน sendmail แต่ฉันจะทำให้ผู้ที่ใช้แพ็คเกจ Denwer พอใจเพราะพวกเขามีแอปพลิเคชันนี้ในตัวอยู่แล้ว จริงด้วยลักษณะเฉพาะประการหนึ่ง ไม่มีการส่งจดหมายจริงๆ - ทั้งหมดจะถูกเก็บไว้ในไดเร็กทอรี "tmp/!sendmail" แต่ถ้าปรากฏว่าจดหมายที่คุณส่งถึง PHP อยู่ที่นั่น คุณก็สามารถมั่นใจได้ว่า 99% ของเวลาทุกอย่างจะทำงานได้บนโฮสติ้งจริง แม้ว่าหากคุณต้องการส่งอีเมลจริงๆ คุณสามารถดาวน์โหลด sendmail กำหนดค่าบนเซิร์ฟเวอร์ SMTP บางตัว เช่น mail.ru จากนั้นเปลี่ยนเส้นทางเป็น sendmail ใน php.ini (การตั้งค่า PHP) และดำเนินการต่อ สนุกกับชีวิต

ตอนนี้เรามาดู PHP กันดีกว่า ในการส่งอีเมล จะใช้เพียงฟังก์ชันเดียวเท่านั้น - mail() ฟังก์ชันนี้รับพารามิเตอร์สี่ตัว โดยต้องมีสามพารามิเตอร์:

อย่างที่คุณเห็น ทุกอย่างเป็นไปตามสัญชาตญาณ: ใครจะส่ง หัวข้อคืออะไร และตัวข้อความเอง หากคุณใช้แพ็คเกจ Denwer หลังจากรันสคริปต์แล้ว คุณจะพบไฟล์ในไดเร็กทอรี "tmp/!sendmail" ซึ่งมีข้อมูลจดหมายของคุณ คุณสามารถเปิดไฟล์เหล่านี้ได้ในแผ่นจดบันทึก แต่ควรเปิดในโปรแกรมอีเมลบางโปรแกรมจะดีกว่า (เช่น The Bat หรือ Microsoft Outlook)

ไม่ใช่เพื่ออะไรที่ฉันเขียนข้อความภาษารัสเซียและภาษาอังกฤษผสมกันเพื่อตรวจสอบการเข้ารหัส บ่อยครั้งที่ระบบจดจำสิ่งนี้อย่างไม่ถูกต้อง และเป็นผลให้ผู้ใช้เห็น " อับราคาดาบรา" เพื่อหลีกเลี่ยงปัญหานี้ คุณต้องตั้งค่าการเข้ารหัส และสำหรับการเข้ารหัสตลอดจนพารามิเตอร์พิเศษอื่น ๆ เท่านั้น จะมีอาร์กิวเมนต์ที่สี่สำหรับฟังก์ชัน mail():

ตอนนี้ให้ฉันถอดรหัสสิ่งที่เขียนที่นี่ ในตัวแปรส่วนหัวเราตั้งค่าพารามิเตอร์ต่อไปนี้: ในช่อง "จะมาจากใคร" [ป้องกันอีเมล]"(นั่นคือ ข้อความไม่สามารถส่งได้ในนามของคุณเอง) ข้อความนี้ยังเป็นข้อความปกติ (ข้อความ/ธรรมดา) ในการเข้ารหัสซีริลลิก (windows-1251) นั่นคือในการเข้ารหัสดั้งเดิมของเรา ซึ่งรวมถึงภาษารัสเซียและภาษาอังกฤษ และอีกอย่าง "\n" เป็นการเปลี่ยนไปขึ้นบรรทัดใหม่ (คล้ายกับ
ในรูปแบบ HTML)

ข้อความสามารถส่งในรูปแบบ HTML ได้เช่นกัน ในการดำเนินการนี้ เพียงแทนที่ "text/plain" ด้วย "text/html" และคุณจะสามารถใช้แท็ก HTML ในข้อความของคุณได้ อย่าลืมว่าแท็กทุกประเภท เช่น “”, “” และอื่นๆ จะถูกกรองโดยระบบเมลที่เคารพตนเอง อย่างไรก็ตาม ให้ใช้แท็กการออกแบบ ("", " ", "
" และอื่น ๆ ) คุณทำได้ และสุดท้ายมาส่งอีเมลโดยใช้แท็ก HTML:

แค่นั้นแหละ. อย่างที่คุณเห็น หัวข้อนี้ง่ายมาก และสิ่งสำคัญมากคือต้องรู้วิธีส่งอีเมลใน PHP

ประกอบด้วยข้อความเท่านั้น (น้ำหนักข้อความต่ำ)

2. การส่งจดหมาย อีเมล ประเภท php text/html อาจมีองค์ประกอบกราฟิก html ลิงก์ ฯลฯ
โอนข้อมูลเพิ่มเติมแล้ว

3. จะใช้ CSS ในการเขียนได้อย่างไร? ที่นี่ฉันต้องการทำให้คุณเสียใจเล็กน้อยทันที - ไม่ควรใช้ CSS ในรูปแบบปกติ Mail, Yandex, Google, Outlook - พวกเขาโยนสไตล์ออกจากตัวอักษร อย่างไรก็ตาม ยังมีทางออกอยู่

มาปฏิบัติตามเงื่อนไขหลายประการ:
1) ฉันหวังว่าจะไม่จำเป็นต้องอธิบายสิ่งที่เราใช้ ประเภทเนื้อหา: text/html

2) จำไว้ว่ามันคืออะไร โต๊ะในทางกลับกัน ตอนนี้เราใส่สไตล์ทั้งหมดลงไปแล้วเท่านั้น คุณยังสามารถจำได้ ศูนย์, แบบอักษร.




จาก: อีวานอฟ อีวาน อิวาโนวิช
ที่อยู่: [ป้องกันอีเมล]
ข้อความ: เรามองและชื่นชมยินดี

กับ กองเหมือนกัน

ข้อความที่คุณต้องการ
3) ในตัวอย่างข้างต้นเมื่อส่งจดหมายจะได้รับบรรทัดนี้ ดังนั้นอย่าลืมเธอ

$headers = "เวอร์ชัน MIME: 1.0" "\r\n";

4) การใช้งาน HTML3.2- เราแทรกมันไว้ที่จุดเริ่มต้นของตัวอักษร html


5) คุณสามารถใช้สีเป็นพื้นหลังได้ หากคุณต้องการภาพพื้นหลัง ให้สร้างข้อความและพื้นหลังทั้งหมดให้เป็นรูปภาพ หรือคุณสามารถระบุภาพพื้นหลังสำหรับเนื้อหาได้

6) รูปภาพเดียวในเซลล์ใน Gmail มีระยะขอบ 3px ที่ด้านล่าง เราระบุเพื่อหลีกเลี่ยงปัญหานี้

หนึ่งในฟังก์ชันที่ได้รับความนิยมมากที่สุดบนไซต์คือแบบฟอร์มใบสมัครหรือคำสั่งซื้อ ซึ่งข้อมูลจะถูกส่งทางอีเมลไปยังเจ้าของไซต์ ตามกฎแล้วแบบฟอร์มดังกล่าวนั้นเรียบง่ายและประกอบด้วยสองหรือสามฟิลด์สำหรับการป้อนข้อมูล จะสร้างแบบฟอร์มคำสั่งซื้อได้อย่างไร? สิ่งนี้ต้องใช้ภาษามาร์กอัป HTML และภาษาการเขียนโปรแกรม PHP

ภาษามาร์กอัป HTML นั้นเรียบง่าย คุณเพียงแค่ต้องหาวิธีและตำแหน่งที่จะวางแท็ก ด้วยภาษาการเขียนโปรแกรม PHP สิ่งต่างๆ จะซับซ้อนขึ้นเล็กน้อย

สำหรับโปรแกรมเมอร์ การสร้างแบบฟอร์มดังกล่าวไม่ใช่เรื่องยาก แต่สำหรับนักออกแบบเลย์เอาต์ HTML การดำเนินการบางอย่างอาจดูยาก

สร้างแบบฟอร์มการส่งข้อมูลในรูปแบบ html

บรรทัดแรกจะเป็นดังนี้

นี่เป็นองค์ประกอบที่สำคัญมากของแบบฟอร์ม ในนั้นเราจะระบุว่าข้อมูลจะถูกถ่ายโอนอย่างไรและไฟล์ใด ในกรณีนี้ ทุกอย่างจะถูกถ่ายโอนโดยใช้วิธี POST ไปยังไฟล์ send.php โปรแกรมในไฟล์นี้จะต้องได้รับข้อมูลตามนั้น โดยจะอยู่ในอาร์เรย์โพสต์ และส่งไปยังที่อยู่อีเมลที่ระบุ

กลับมาคืนฟอร์มกันเถอะ บรรทัดที่สองจะมีช่องสำหรับป้อนชื่อเต็มของคุณ มีรหัสดังต่อไปนี้:

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

บรรทัดถัดไป:

ที่นี่เกือบทุกอย่างเหมือนกัน แต่ชื่อของฟิลด์คืออีเมล และคำอธิบายก็คือผู้ใช้ป้อนที่อยู่อีเมลของเขาในแบบฟอร์มนี้

บรรทัดถัดไปจะเป็นปุ่ม "ส่ง":

และบรรทัดสุดท้ายในแบบฟอร์มจะเป็นแท็ก

ตอนนี้เรามารวบรวมทุกอย่างเข้าด้วยกัน





ตอนนี้เรามาทำให้ฟิลด์ในแบบฟอร์มบังคับ เรามีรหัสดังต่อไปนี้:





สร้างไฟล์ที่รับข้อมูลจากแบบฟอร์ม HTML

นี่จะเป็นไฟล์ชื่อ send.php

ในไฟล์ในขั้นตอนแรก คุณต้องยอมรับข้อมูลจากอาร์เรย์โพสต์ เมื่อต้องการทำเช่นนี้ เราสร้างตัวแปรสองตัว:

$fio = $_POST["fio"];
$อีเมล = $_POST["อีเมล"];

ชื่อตัวแปรใน PHP นำหน้าด้วยเครื่องหมาย $ และมีเครื่องหมายอัฒภาควางไว้ที่ท้ายแต่ละบรรทัด $_POST คืออาร์เรย์ที่ใช้ส่งข้อมูลจากแบบฟอร์มไป ในรูปแบบ html วิธีการส่งจะถูกระบุเป็น method="post" ดังนั้นจึงยอมรับตัวแปรสองตัวจากรูปแบบ html เพื่อปกป้องไซต์ของคุณ คุณต้องส่งตัวแปรเหล่านี้ผ่านตัวกรองหลายตัว - ฟังก์ชัน php

ฟังก์ชันแรกจะแปลงอักขระทั้งหมดที่ผู้ใช้จะพยายามเพิ่มลงในแบบฟอร์ม:

ในกรณีนี้ จะไม่สร้างตัวแปรใหม่ใน php แต่จะใช้ตัวแปรที่มีอยู่ สิ่งที่ตัวกรองจะทำคือแปลงร่างตัวละคร”