ใช้ PHP imap ฟังก์ชัน imap mail ของ PHP โฟลเดอร์อีเมล
หนึ่งในฟังก์ชัน zastosuvan imap ที่เป็นไปได้คือการสร้าง mail daemon ซึ่งเป็น keruvate ของการสมัครสมาชิกและการสมัครรับข้อมูลกับผู้ให้บริการอีเมล สำหรับการดำเนินงานนี้ ทางสำนักงานสาขามี 2 วิธี คือ เบี้ยเลี้ยงแรกที่ koristuvach มีความผิดในการไปด้านข้างและยืนยันการกระทำของเขาอีกคนหนึ่งคือการเสริมความแข็งแกร่งของแผ่นงาน อีกวิธีหนึ่งคือทำให้แน่ใจว่าสคริปต์การจัดเตรียมรันโดย cron daemon-om เป็นประจำ ผ่านโซ่ไม่นิยมเท่าวิธีแรก
แต่อย่างที่คุณจำได้ วิธีที่รุนแรงที่สุดในการใช้ผู้พิชิตคืออีกวิธีหนึ่ง สำหรับคนที่คุณสามารถใช้ cron ได้รีบไปกับเขา
มันไม่ง่ายเลยที่จะเข้าใจฟังก์ชัน ความยากลำบากสามารถเอาชนะได้ด้วยการแยกวิเคราะห์ส่วนหัวของรายการ เพื่อให้สามารถประมวลผลสคริปต์ได้
อัลกอริทึมของหุ่นยนต์ของสคริปต์ vigadamy นั้นเงอะงะ daemon จะติดตั้งข้อมูลจากเซิร์ฟเวอร์เมลและตรวจสอบการมีอยู่ในรายการใหม่ เนื่องจากไม่มีใบไม้ หุ่นยนต์สคริปต์จึงถูกแนบ เป็นชีตจำเป็นต้องวิเคราะห์ส่วนหัวของชีตแรก ช่องต้นทางและหัวเรื่องสามารถมองเห็นได้ หากฟิลด์หัวเรื่องมีตัวเลือกส่วนหัวที่ถูกต้องหนึ่งในสองตัวเลือก (การสมัครรับข้อมูลหรือการสมัครรับข้อมูล) บันทึกที่ตรวจสอบความถูกต้องของค่าของฟิลด์จากหรือเปิดใช้งาน (ยืนยันแล้ว) หรือมองเห็นได้จากตาราง ในทั้งสองกรณี โปรดระบุข้อมูลเพิ่มเติมเกี่ยวกับสคริปต์ตามที่อยู่ที่ระบุไว้ในช่อง แผ่นงานถัดไปจะถูกระบุโดยแผ่นถัดไป หากหัวข้อไม่ล้างแค้นในหัวข้อที่ยอมรับได้ จะมีการบังคับใช้คำเตือนเกี่ยวกับการอภัยโทษ และแผ่นงานก็ถูกกำหนดให้นำออกด้วย สคริปต์ Potim เพื่อไปยังแผ่นงานถัดไป หลังจากวิเคราะห์ใบทั้งหมดเสร็จแล้ว ก็เคลียร์กล่องไวน์
สำหรับการแสดงภาพหน้าจอ ใช้ฟังก์ชัน imap_open ชาร์ด PHP รองรับหุ่นยนต์ด้วยโปรโตคอลจำนวนหนึ่ง ป๊อปอัปของเรามีป๊อปอัปที่พอร์ต 110 (มาตรฐาน) มาเพิ่มผลลัพธ์ของการพิมพ์สคริปต์การเปลี่ยนแปลง $my_box
$my_box = imap_open("(you.pop.host/pop3:110)", "เข้าสู่ระบบ", "รหัสผ่าน");
ไปข้างหน้า ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงนี้จะใช้ได้กับฟังก์ชัน imap ทั้งหมด เราให้กล่องเพื่อตรวจสอบการปรากฏตัวของใบไม้ ฟังก์ชัน imap_num_msg ทำการตรวจสอบซ้ำ
$n = imap_num_msg($my_box);
ส่งผลให้จำนวนใบไม้ในกล่องเปลี่ยนไป ตัวเลขอาจมากกว่าศูนย์หรือแพงกว่าสำหรับคุณ (เช่น ช่องว่าง) หากมีใบอยู่ วงจร while จะตรวจดูใบไม้ จะเพิ่มจำนวนแผ่นทีละแผ่นตามลำดับ เคารพว่าชีตแรกในกล่องจะเป็นแม่หมายเลข 0 เป็นองค์ประกอบแรกของอาร์เรย์ ในการเพิ่มจำนวนชีต ให้เปลี่ยนค่า $m เป็น 0 จากนั้นในความคิดของวงจร ให้เพิ่มมูลค่าของ її หนึ่ง $m++
หากต้องการแยกวิเคราะห์ส่วนหัวที่จะคลิกเรา สองฟังก์ชันก็เพียงพอแล้ว: imap_header และ imap_fetch_overview สำหรับการดูแลผิวของพวกเขา สกรีนครีม จำเป็นต้องระบุหมายเลขแผ่น ในความเห็นของเรา ในช่วงกลางของวัฏจักรของไวน์ การเปลี่ยนแปลง $m
imap_header เปลี่ยนผลลัพธ์เป็นวัตถุที่ดึงข้อมูลเกี่ยวกับส่วนหัวของแผ่นงาน ในช่วงกลางของวินาที วัตถุที่จะล้างแค้นคืออาร์เรย์ประเภทหนึ่งเพื่อล้างแค้นความหมายบางอย่าง Tse ส่วนบุคคล, adl, กล่องจดหมายและโฮสต์ เราอยู่ในกล่องจดหมายและโฮสต์น้อยกว่า การส่งїхเราใช้ที่อยู่ซึ่งส่งแผ่นงาน
$h = imap_header($my_box, $m); $h = $h->จาก; foreach ($h เป็น $k => $v) ( $mailbox = $v->mailbox; $host = $v->host; $personal = $v->personal; $email = $mailbox . "@" $โฮสต์;
imap_fetch_overview - ให้เราดึงธีมของชีต เพื่อจุดประสงค์เดียวกัน เป็นไปได้ที่จะสั่นและ imap_header แต่ด้วยเหตุผลหลายประการ อาจไม่สามารถใช้งานได้ จากอาร์เรย์ที่หมุนฟังก์ชันเราต้องการเฉพาะเขตข้อมูลเรื่อง
$s = imap_fetch_overview($my_box, $m); foreach ($s เช่น $k => $v) $subj = $v-> subject;
นอกจากนี้ กิจกรรมของเราจะดำเนินการจนถึงจุดที่อีเมลถูกลบออกจากฐาน และในช่วงเวลาที่ชัดเจน ให้ทำเครื่องหมายแถวทั้งหมดด้วยหมายเหตุว่าชอบหรือดู สมมติว่าหลังจากกรอกแบบฟอร์มสมัครสมาชิกบนเว็บไซต์แล้ว ผู้ชำระล่วงหน้าจะได้รับสถานะ 0 และหลังจากยืนยันการสมัครสมาชิก ไวน์จะเปลี่ยนเป็น 1
ถ้า ($subj == "subscribe") ( mysql_query("update subscribe set stat=1 where email=$my_email"); $del = imap_delete($my_box, $m); mail($email, $add_sbj, $add_text , $headers); ) else if ($subj == "unsubscribe") ( mysql_query("ลบจากการสมัครสมาชิกโดยที่ email = $my_email"); $del = imap_delete($my_box, $m); mail($email, $ del_sbj, $del_text, $headers);) else ( $del = imap_delete($my_box, $m); mail($email, $err_sbj, $err_text, $headers); ) หลังจากพิมพ์สคริปต์ทั้งหมดจะล้างหน้าจอ $clear = imap_expunge($my_box);
ดานา โปรแกรมที่ง่ายที่สุดเป็นเพียงการสาธิตว่าใน PHP คุณสามารถเขียนได้ไม่เฉพาะไซต์ที่เปลี่ยนแปลงแบบไดนามิก แต่ยังรวมถึงบริการที่ไม่สามารถมองเห็นได้ด้วย
รายการระบบของโปรแกรมสำหรับพารามิเตอร์สองสามตัวของการเชื่อมต่อกับฐานข้อมูล:
รวม "config.php"; // รายการฐานข้อมูล $my_box = imap_open("(you.pop.host/pop3:110)", "เข้าสู่ระบบ", "รหัสผ่าน"); $n = imap_num_msg($my_box); $m=0; $add_text = "เนื่องจากเป็นการยืนยันการชำระเงินล่วงหน้าของคุณ"; $add_sbj = "คุณเพิ่ม!"; $del_text = "คุณถูกลบออกจากรายการพัสดุ"; $del_sbj = "ลบออกจากรายการ"; $err_text = "กรุณาส่งหน้าจอเมลบ็อกซ์สำหรับการบริหารการแจกจ่ายเท่านั้น"; $err_sbj = "ผิดพลาด"; $headers = "จาก: สมัครสมาชิกหุ่นยนต์ x-mailer: php4 ประเภทเนื้อหา: ข้อความ/ธรรมดา; charset=windows-1251"; if($n != 0) ( ในขณะที่($m++< $n) { $h = imap_header($my_box, $m); $s = imap_fetch_overview($my_box, $m); $h = $h->จาก; foreach ($h เป็น $k =>$v) ( $mailbox = $v->mailbox; $host = $v->host; $personal = $v->personal; $email = $mailbox . "@" $host; $my_email = mysql_escape_string($email); ) foreach ($s เป็น $k => $v) $subj = $v-> subject; if ($subj == "subscribe") ( mysql_query("update table set stat=1 where email=$my_email"); //print mysql_error(); $del = imap_delete($my_box, $m); เมล($ email, $add_sbj, $add_text, $headers); ) else if ($subj == "unsubscribe") ( mysql_query("ลบออกจากตารางโดยที่ email = $my_email"); mail ($email, $del_sbj, $del_text, $ส่วนหัว); ) else ( $del = imap_delete($open_box, $m); mail($email, $err_sbj, $err_text, $headers); ) ) $clear = imap_expunge($my_box); )
รายการมีรายละเอียดรายวัน เช่น สามารถเปลี่ยนจาก win เป็น koi . ได้ ภาพหน้าจอของไปรษณีย์ผู้บริหารระดับสูงบางเกินไป Tse ผิวเผินการทำงานเช่นหนังสามารถเพิ่มได้ตามความต้องการ
โปรแกรมเว็บอาจสร้างอีเมลพิเศษสำหรับ koristuvach ขณะนี้ เราสามารถเขียนรหัสอีเมลที่เชื่อถือได้ว่า SquirrelMail หรือ Roundcube ไม่ว่าคุณจะได้รับอะไร การรู้การทำงานของเมล IMAP จะเป็นสีดำ
วิธีฝึก IMAP ใน PHP rozpovidaetsya ทั้งสองด้าน ด้านแรก ฟังก์ชันที่จำเป็นสำหรับการเชื่อมต่อกับ ส่งไปยังเซิร์ฟเวอร์การอ่านนั้นชวนให้นึกถึง ในอีกด้านหนึ่ง เราจะพูดถึงการทำงานกับอีเมล เช่น การสนับสนุนระยะไกล และการมีส่วนร่วมของโปรแกรม
เพื่อสาธิต ฟังก์ชั่นการแฮ็กจะใช้โค้ด ดังนั้นคุณจึงสามารถแฮ็กเพื่อเรียกใช้สคริปต์ในโปรแกรมรับส่งเมลของคุณได้
การตั้งค่า URL สำหรับคุณสมบัติที่จำเป็นของ Wiki:
- func - ประเภทของฟังก์ชัน ตามต้องการ (เช่น read อีเมลดูที่หน้าจอเมล ดูการเตือนความจำ)
- โฟลเดอร์ - ชื่อของโฟลเดอร์กล่องจดหมายสำหรับการเชื่อมต่อ (เช่น: กล่องขาเข้า กล่องจดหมาย สแปม)
- uid – ตัวระบุอีเมลที่ไม่ซ้ำกัน
สามารถใช้พารามิเตอร์เพื่อขอความช่วยเหลือได้ $ _GET และสามารถใช้สวิตช์สำหรับวิกิได้
กำลังเชื่อมต่อกับเซิร์ฟเวอร์ IMAP
ในการสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ IMAP เราใช้ฟังก์ชัน imap_connect() ดังที่แสดงด้านล่าง:
อย่างที่ทราบ ฉันมีรหัสผ่านนั้นและพารามิเตอร์ที่จำเป็นสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์เพิ่มเติมได้ในคู่มือนี้
วิธีไปยังหน้าจอเมลอยู่ในแถวซึ่งระบุเซิร์ฟเวอร์และพอร์ตที่ส่วนโค้งโค้งซึ่งระบุชื่อโฟลเดอร์เมล
แกนของแถวหอกสำหรับโฟลเดอร์ รายการบริการไปรษณีย์:
- Gmail (imap.gmail.com: 993/imap/ssl) INBOX
- Yahoo (imap.mail.yahoo.com: 993/imap/ssl) INBOX
- AOL (imap.aol.com: 993/imap/ssl) INBOX
เซิร์ฟเวอร์บางตัวไม่ได้เปิดใช้งาน SSL ในกรณีนี้ คุณจะต้องละเว้นการชาร์จ SSL เซิร์ฟเวอร์อื่นสามารถได้รับใบรับรองที่ถูกต้อง ซึ่งคุณต้องรับผิดชอบในการยอมรับ NOVALIDATE-CERT
เนื่องจากเราเชื่อมต่อกับเซิร์ฟเวอร์อีเมล เราจึงประหลาดใจกับฟังก์ชันที่ใช้สำหรับกิจกรรมประเภทดังกล่าว:
- การแสดงรายการโฟลเดอร์หน้าจอการส่งจดหมายในบันทึกจดหมายของคุณ
- การตรวจสอบรายชื่ออีเมลจากตำแหน่งสันตะปาปา
- การตรวจสอบอีเมลของผู้เขียนอีกครั้ง
โฟลเดอร์อีเมล
รายการ , นาดิสลานิซ , สมิธі สแปม— โฟลเดอร์ qi ใช้งานได้จริงในรูปแบบอีเมลที่คล้ายกับสกิน และคอรีสตูวาชมักจะสร้างโฟลเดอร์ที่ทรงพลังได้ ในการดูบันทึกย่อในโฟลเดอร์เหล่านี้เป็นความรับผิดชอบของเราในการเปลี่ยนแถวการเชื่อมต่อ ตัวอย่างเช่น zastosuvat "INBOX" (Vhіdnі) ในแถวก่อนหน้า หากจำเป็น ให้เชื่อมต่อกับโฟลเดอร์สแปม ติดแท็กสแปม (สแปม) เพื่อแทนที่ Ale hocha tse can buti pererahovane yak สแปมในบันทึกทางกายภาพของจดหมายอิเล็กทรอนิกส์ ราวกับว่าประหลาดใจผ่านโปรแกรมรับส่งเมล ชื่อที่ถูกต้องของโฟลเดอร์ในพื้นหลังอาจแตกต่างกัน เราสามารถทำการแมปโฟลเดอร์ปัจจุบันทั้งหมดในบันทึกระบบคลาวด์ด้วยความช่วยเหลือของ imap_list()
"; foreach ($folders เป็น $folder) ( $folder = str_replace("(imap.gmail..php?folder=" . $folder . "&func=view">" . $folder . "";) ก้อง"";
เป็นความรับผิดชอบของเราที่จะส่งแฮนเดิลไปยังคำขอ โดยเลิกใช้ imap_open() เป็นพารามิเตอร์เอาต์พุตของ imap_list() นอกจากนี้เรายังมีความผิดในการเดินผ่านเส้นทาง (โดยไม่มีโฟลเดอร์เช่น INBOX) พารามิเตอร์ที่สามєร้องขอโฟลเดอร์ที่มีอยู่
การแจ้งเตือนเกี่ยวกับการแจ้งเตือน
โฟลเดอร์สกินประกอบด้วยรายการการแจ้งเตือนทางอีเมลที่พร้อมใช้งาน ดังนั้น ให้สงสัยว่าเราจะสร้างรายการการแจ้งเตือนบนหน้าจออีเมลของเราได้อย่างไร
คุณจะต้องใช้การช่วยเตือนจำนวนเล็กน้อยเพื่อขอความช่วยเหลือ imap_num_msg() จากนั้นเราสามารถปรับแต่งฟังก์ชัน imap_header() เพื่อดึงข้อมูลสำหรับส่วนหัวของการดูแลผิว
สมมติว่าเราต้องการใบที่เหลืออีก 20 ใบ:
($ numMessages - 20); $i--) ( $header = imap_header($imap, $i); $fromInfo = $header->from; $replyInfo = $header->reply_to; $details = array("fromAddr" => (isset($) ) fromInfo->mailbox) && isset($fromInfo->host)) ?$fromInfo->mailbox ."@" .$fromInfo->host: "", "fromName" => $fromInfo->personal: "", "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host)) ? $replyInfo->mailbox . "@" . $replyInfo->host : "", "replyName" => ( isset($replyTo->personal)) ?$replyto->personal: "", " subject" => (isset($header-> subject)) ?$header-> subject : "", "udate" => ( isset($header->udate)) ?$header->udate: ""); $uid = imap_uid($imap, $i); เสียงสะท้อน "
- ";เอคโค่"
- พิมพ์:" . $details["fromName"]; echo " " . $details["fromAddr"] . ";เอคโค่"
- เรื่อง:" .$details["subject"] ..php?folder=" . โฟลเดอร์ $ "&id=" $uid ..php?folder=" . $folder . "&uid=" . $uid . "&func=delete">ลบ ";เอคโค่"
$Imap เกิดจาก buti vodkriti ในตำแหน่งสันตะปาปาที่จำเป็น เราสามารถผ่านส่วนที่เหลือของ 20 ใบด้วยจำนวนการแจ้งเตือนที่แตกต่างกัน ลบ imap_num_msg() หมายเลขการโทรและอีเมลจะได้รับโดย imap_header() เพื่อใช้ข้อมูลเกี่ยวกับส่วนหัว ซึ่งสามารถโอนไปยังข้อมูลผู้โทรได้ เช่น ชื่อไดเรกทอรี ที่อยู่อีเมล ชื่อ หัวเรื่อง ฯลฯ
โปรดทราบว่าหมายเลขอีเมลที่เป็นหมายเลขต่างประเทศไม่ใช่ตัวระบุเฉพาะสำหรับการแจ้งเตือน หากคุณมีใบ ½ 100 ใบในหน้าจอการส่งจดหมาย จำนวนที่เหลือจะเป็น 100 หมายเลขด้านหน้าจะเป็น 99 เป็นต้น ทันทีที่คุณเห็นการแจ้งเตือนใต้หมายเลข 100 จากนั้นเราจะลบการแจ้งเตือนใหม่ หมายเลขถัดไปจะเป็น 100
เพื่อระบุลักษณะที่ไม่เหมาะสม จำเป็นต้องใช้ตัวระบุเฉพาะสำหรับอีเมล แผ่นสกินอาจมีตัวระบุเฉพาะ ลำดับ UID ซึ่งเราสามารถเลือกที่จะส่งอีเมลไปที่ ฟังก์ชันหมายเลข imap_uid() เป็น UID ที่ไม่ซ้ำกันและจะไม่เปลี่ยนแปลงเมื่อเวลาผ่านไป
กลับมาเพื่อเตือนความจำ
การอ่านจดหมายอิเล็กทรอนิกส์ไม่ใช่เรื่องง่ายทางด้านขวาเหมือนเมื่อก่อนจำเป็นต้องร้องเพลงตัวอักษรของ Mitul Coradia คลาสดัดแปลงมีสามฟังก์ชั่นสำหรับสต็อกของเรา:
การเข้ารหัส) ( กรณีที่ 3: return imap_base64($text); case 4: return imap_qprint($text); default: return $text; ) ) // multipart if ($structure->type == 1) ( foreach ($structure) ->ชิ้นส่วนเป็น $index => $subStruct) ( $prefix = ""; if ($partNumber) ( $prefix = $partNumber . "; ) $data = get_part($imap, $uid, $mimetype, $ โครงสร้างย่อย, $prefix .($index + 1)), if ($data) ( return $data; ) ) ) ) คืนค่าเท็จ ) ฟังก์ชัน get_mime_type($structure) ( $primaryMimetype = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER"); if (โครงสร้าง $) ->subtype) ( return $primaryMimetype[(int)$structure->type] . "/" . $structure->subtype; ) return "TEXT/PLAIN"; )
ฟังก์ชัน GetBody() รับอีเมล ผ่าน UID และเซสชัน IMAP ฟังก์ชันระดับกลางจะถูกแปลงเป็นฟังก์ชัน get_part() ด้วยประเภทเนื้อหา เช่น ข้อความ / HTML ข้อความปกติของการแจ้งเตือนทางอีเมลนั้นอ่านง่ายกว่า ด้วยวิธีนี้ เราจะพยายามทำความเข้าใจ HTML ที่อยู่ตรงกลางอีเมล
มาอ่านโครงสร้างของอีเมลหลังฟังก์ชันช่วยเหลือ imap_fetchstructure() กัน เราได้เปลี่ยนฟังก์ชันไลบรารีเพื่อเปลี่ยน UID แทนที่จะส่ง FT_UID อย่างสม่ำเสมอ
นอกจากนี้เรายังต้องการประเภท MIME ของอีเมลสำหรับฟังก์ชันความช่วยเหลือ get_mime_type() Є ประเภท MIME ของ Vіsіm ซึ่งหมุนโดยฟังก์ชันนี้ในรูปของจำนวนเต็ม:
- 0-TEXT
- 1 - มัลติพาร์ท
- 2 - ข้อความ
- 3 – แอปพลิเคชัน
- 4-AUDIO
- 5 - IMAGE
- 6 - วิดีโอ
- 7-อื่นๆ
เรากำลังแปลงเป็นแถวประเภท MIME จริงสำหรับอาร์เรย์เพิ่มเติมของประเภท MIME
การเพิ่มโกดังอาจเป็นแม่ของประเภทย่อยจำนวนมาก ดังนั้นเราจึงสำรวจซ้ำผ่านประเภทย่อยทั้งหมด ส่วนของผู้ชนะของหมายเลข และดึงอีเมลจากประเภทย่อย imap_fetchBody() หากดึงข้อมูลที่ถูกต้องจากประเภท mime ชนิดย่อย
จากนั้น mi vikoristovuєmo vіdpovіdnu dekoduvannya vіdpovіdnoถึง koduvannya พิมพ์ podomlennya ที่vertaєmozmіst รายการล่าสุดของประเภทการเข้ารหัสที่มี:
- 0-7 บิต
- 1-8บิต
- 2-BINARY
- 3-BASE64
- 4 - อ้าง-พิมพ์ได้
- 5-OTHER
วิสโนวอค
เราได้ดูพื้นฐานของการเชื่อมต่อกับเซิร์ฟเวอร์ IMAP เสร็จแล้ว โดยแสดงรายการอยู่ตรงกลางของโฟลเดอร์ที่พร้อมใช้งาน และอ่านการแจ้งเตือนทางอีเมลเสร็จแล้ว ที่ด้านถัดไปของบันทึกย่อ จะมีการบอกเกี่ยวกับฟังก์ชันต่างๆ ที่สามารถนำมาใช้เพื่อใช้งานฟังก์ชันเพิ่มเติมของโปรแกรมรับส่งเมล ตัวอย่างเช่น การสนับสนุนระยะไกลของการประมวลผลส่วนแทรกนั้น
เมื่อไม่กี่วันก่อน ฉันมีงานเขียนโมดูลเล็กๆ ใน PHP ซึ่งจะทำให้ฉันทำงานกับอินพุตได้ Google Trochs POP3і IMAP.
Ale vybіr buv ชัดเจน scho ฉันจะเอาชนะ IMAP กับ vin ที่ใช้งานได้ดีกว่าและทันสมัยกว่า โปรโตคอล POP3
ตอนนี้ฉันต้องทำให้มือสกปรก วิธีทำงานกับโปรโตคอล IMAP วิธีแยกใบจากเซิร์ฟเวอร์อีเมล Yandex/Google
สำหรับงานสะดวกฉันเลือกห้องสมุด PhpImap Shards จะไม่สามารถทำงานที่จำเป็นทั้งหมดให้ฉันได้อย่างรวดเร็วและง่ายดาย
การเชื่อมต่อกับเซิร์ฟเวอร์เมล
ตอนนี้ หากเราเลือกโปรโตคอลและไลบรารีแล้ว เราสามารถลองเชื่อมต่อกับเซิร์ฟเวอร์อีเมลได้
สำหรับการดำเนินการ PHP เต็มรูปแบบด้วยโปรโตคอล IMAP คุณต้องเปิดใช้งานส่วนขยาย php_imap.dll/imap.soในไฟล์ php.ini
สำหรับ cob ให้ลองเชื่อมต่อกับ Yandex mail ดังนั้นฉันจึงมีปัญหาน้อยที่สุด
//รวมถึงไลบรารี่รวมถึง("/phpImap/Mailbox.php"); รวม("/phpImap/IncomingMail.php"); //เพื่อความโปร่งใส เราสร้างค่าคงที่สำหรับการเชื่อมต่อกับเซิร์ฟเวอร์อีเมล กำหนด ("MAIL_IMAP_SERVER", "imap.yandex.ru"); กำหนด ("MAIL_IMAP_SERVER_PORT", 993); กำหนด ("MAIL_IMAP_LOGIN", " "); กำหนด ("MAIL_IMAP_PASS", "example_pass"); define("MAIL_IMAP_PATH", "(".MAIL_IMAP_SERVER.":".MAIL_IMAP_SERVER_PORT."/imap/ssl)INBOX"); $mailbox = ใหม่ PhpImap\Mailbox(MAIL_IMAP_PATH, MAIL_IMAP_LOGIN, MAIL_IMAP_PASS, __DIR__); ลอง ( $mailbox->getImapStream(); ) catch (ข้อยกเว้น $e) ( die($e->getMessage()); )
Yak mi bachimo คอนสตรัคเตอร์คลาส กล่องจดหมายยอมรับอาร์กิวเมนต์ต่อไปนี้:
- MAIL_IMAP_PATH- ตั้งค่าที่อยู่เซิร์ฟเวอร์ (MAIL_IMAP_SERVER) พอร์ตเชื่อมต่อ (MAIL_IMAP_SERVER_PORT) ประเภทการเชื่อมต่อ (imap) และแสดงว่าการเชื่อมต่อจะถูกเข้ารหัส (ssl) หลังจากแขนหยิกโปรดระบุโฟลเดอร์จนกว่าจะมีการเชื่อมต่อ ในกรณีนี้จนกว่าจะมีการแจ้งเตือนการป้อนข้อมูล (INBOX)
- MAIL_IMAP_LOGIN- ภาพหน้าจอไปรษณีย์เราจะเชื่อมต่อ
- MAIL_IMAP_PASS- รหัสผ่าน (รหัสผ่านส่วนใหญ่มาจากภาพหน้าจอที่ส่งทางไปรษณีย์)
- __DIR__- ไปจนถึงโฟลเดอร์ที่จะบันทึกไฟล์แนบและการแจ้งเตือนทางเมล
หลังจากนั้นเราแทบไม่เชื่อเลยว่าการเชื่อมต่อของเราเกิดขึ้นผ่านวิธีการ getImapStream()ราวกับว่าเหตุผลของการเชื่อมต่อไม่เกิดขึ้น โปรแกรมก็โทษเหตุผลของการเชื่อมต่อที่อยู่ไม่ไกล
เป็นสิ่งสำคัญที่จะต้องทราบว่าในการตั้งค่าเมล Yandex คุณอาจเปิดใช้งานความเป็นไปได้ในการเชื่อมต่อผ่านโปรโตคอล IMAP
ตอนนี้ มาเชื่อมต่อกับเมล Gmail อีกครั้ง
กำหนด ("MAIL_IMAP_SERVER", "imap.gmail.com"); กำหนด ("MAIL_IMAP_SERVER_PORT", 993); กำหนด ("MAIL_IMAP_LOGIN", " "); กำหนด ("MAIL_IMAP_PASS", "example_pass"); define("MAIL_IMAP_PATH", "(".MAIL_IMAP_SERVER.":".MAIL_IMAP_SERVER_PORT."/imap/ssl)INBOX");
ตามจริงแล้วมันใช้งานไม่ได้กับการเชื่อมต่อด้านหน้า แต่คุณต้องตำหนิทุกอย่างมากขึ้นเมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์
ปัญหา Tse pov'yazana z tim, scho in หุ่นยนต์ Gmail IMAP เปิดใช้งานสำหรับการล็อก. คุณสามารถปิดได้ในการตั้งค่าที่แท็บ Reminder POP/IMAP ในตัวเลือก Access ที่อยู่เบื้องหลังโปรโตคอล IMAP ⇒ เปิด IMAP
หลังจากที่เราเปิดใช้งานหุ่นยนต์ด้วยโปรโตคอล IMAP เราต้องการ สร้างรหัสผ่านแอดออน. ในการดำเนินการนี้ เราจำเป็นต้องสร้างการตรวจสอบสิทธิ์แบบสองปัจจัยสำหรับโปรไฟล์นี้ หลังจากที่คุณสามารถดำเนินการสร้าง yogo หากเราสร้างรหัสผ่านใหม่สำหรับโปรแกรม เราจะต้องป้อนรหัสผ่านนั้นลงในค่าคงที่ MAIL_IMAP_PASS เพื่อเชื่อมต่อกับเซิร์ฟเวอร์
โปรดทราบว่าเมื่อคุณสร้างรหัสผ่านภาคผนวก คุณอาจยังคงไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยไม่ต้องโทร แต่รหัสผ่านของคุณยังไม่หยุดจนกว่าบริการ Gmail จะดังขึ้น และคุณขอยืม 5-60 นาที
การรวบรวมข้อมูล
หลังจากเชื่อมต่อสำเร็จ เราสามารถ vikonati ขอการแจ้งเตือนเพิ่มเติมจากเซิร์ฟเวอร์ สำหรับผู้ที่เราจะชนะวิธีการ searchMailBox(สตริง $criteria)ซึ่งอันที่จริงเป็นวิธีการห่อตัว imap_search. สิ่งสำคัญคือต้องเข้าใจว่าอาร์กิวเมนต์ $criteria เป็นเกณฑ์แรกสำหรับความจำเป็นในการแจ้งให้เราทราบ วิธีนี้จะหมุนเวียนตัวระบุองค์ประกอบ เนื่องจากเราต้องกำจัดข้อมูลโดยละเอียดของการแจ้งเตือนทางอีเมล
$mailsIds = $mailbox->searchMailBox("ALL");
ยักษ์วีเดาแล้ว เอาข้อมูลทั้งหมดมาไว้ที่นี่
และตอนนี้ เรามาลองคิดดูด้วยเกณฑ์อื่นๆ ที่สำคัญไม่แพ้กันสำหรับมุขตลก:
// การแจ้งเตือนทั้งหมดใน 3 วัน $mailsIds = $mailbox->searchMailBox("ตั้งแต่"".date("d-M-Y",strtotime("-3 วัน"))."""); //การแจ้งเตือนที่ยังไม่ได้อ่านเป็นเวลา 3 วัน $mailsIds = $mailbox->searchMailBox("ไม่เห็นตั้งแต่ "".date("d-M-Y",strtotime("-3 วัน"))."""); //ค้นหาการแจ้งเตือนสำหรับคำสั่งดังกล่าวในส่วนหัวของข้อความ $mailsIds = $mailbox->searchMailBox("TEXT "กล่องจดหมายใหม่""); // ค้นหาค่าประเภทนี้ในส่วนหัว BODY $mailsIds = $mailbox->searchMailBox("BODY "กล่องจดหมายข้อมูล""); //ค้นหาในอีเมลของผู้ดูแลระบบ $mailsIds = $mailbox->searchMailBox("FROM""); //ลบการแจ้งเตือนหลังหัวข้อ $mailsIds = $mailbox->searchMailBox("SUBJECT "ปัญหาการอัปเดตสำหรับโทรศัพท์ของคุณ"");
ก้นของใครกรุณาสะท้อนรากฐานของเกณฑ์ชัยชนะสำหรับเรื่องตลก
การถอนข้อมูล
ตอนนี้ หากเรามีอาร์เรย์ของตัวระบุอ้างอิง เราก็พร้อมที่จะประมวลผล:
// เราใช้ ID ของการแจ้งเตือนที่เหลือจากอาร์เรย์ $id = สิ้นสุด($mailsIds); //เราต้องการอินสแตนซ์ของอ็อบเจ็กต์ของคลาส IncomingMail เพื่อดึงข้อมูลการแจ้งเตือน $mail = $เมลบ็อกซ์->getMail($id); //Otrimuєєєєєєєєєєєєеสิ่งที่แนบมาก่อน ths voіdomlennya, yakscho vіn є $mail->getAttachments(); //แสดงโน้ต echo $mail->textHtml;
Axes mi y otrimali z vіdomlennya z แผ่นงานของเราที่แทรก yogo โดยไม่มีปัญหาใด ๆ
ความสามารถที่เพิ่มเข้ามา
ไลบรารีนี้ยังมีวิธีการพื้นฐานจำนวนหนึ่งสำหรับการทำงานที่สะดวกพร้อมคำแนะนำเกี่ยวกับเมล:
โปรดจำไว้ว่าเกี่ยวกับรหัสโยคะ
$mailbox->saveMail($id,$id.".eml");
กู้คืนการแจ้งเตือนว่ายังไม่ได้อ่านสำหรับ ID ของคุณ
$เมลบ็อกซ์->markMailAsUnread($id);
เราติดตั้งการเตือนความจำตามที่อ่านสำหรับรหัสโยคะ
$เมลบ็อกซ์->markMailAsRead($id);
มันถูกติดตั้งบนไอคอนเตือนความจำบนรหัสโยคะ
$เมลบ็อกซ์->markMailAsImportant($id);
เราเห็นการเตือนสำหรับรหัสโยคะ
หนึ่งในฟังก์ชัน zastosuvan imap ที่เป็นไปได้คือการสร้าง mail daemon ซึ่งเป็น keruvate ของการสมัครสมาชิกและการสมัครรับข้อมูลกับผู้ให้บริการอีเมล สำหรับการดำเนินงานนี้ ทางสำนักงานสาขามี 2 วิธี คือ เบี้ยเลี้ยงแรกที่ koristuvach มีความผิดในการไปด้านข้างและยืนยันการกระทำของเขาอีกคนหนึ่งคือการเสริมความแข็งแกร่งของแผ่นงาน อีกวิธีหนึ่งคือต้องแน่ใจว่าสคริปต์การจัดเตรียมถูกรันโดย cron daemon?om เป็นประจำ ผ่านโซ่ไม่นิยมเท่าวิธีแรก
แต่อย่างที่คุณจำได้ วิธีที่รุนแรงที่สุดในการใช้ผู้พิชิตคืออีกวิธีหนึ่ง สำหรับผู้ที่มีความสามารถในการชนะ crond ให้รีบไปกับเขา
มันไม่ง่ายเลยที่จะเข้าใจฟังก์ชัน Lyudina ซึ่งเคยทำงานในสาธารณรัฐประชาชนรัสเซีย เข้าใจวิธีปฏิบัติกับพวกเขาได้ง่าย ความยากลำบากสามารถเอาชนะได้ด้วยการแยกวิเคราะห์ส่วนหัวของรายการ เพื่อให้สามารถประมวลผลสคริปต์ได้
อัลกอริทึมของหุ่นยนต์ของสคริปต์ vigadamy นั้นเงอะงะ daemon จะติดตั้งข้อมูลจากเซิร์ฟเวอร์เมลและตรวจสอบการมีอยู่ในรายการใหม่ เนื่องจากไม่มีใบไม้ หุ่นยนต์สคริปต์จึงถูกแนบ
เป็นชีตจำเป็นต้องวิเคราะห์ส่วนหัวของชีตแรก ช่องต้นทางและหัวเรื่องสามารถมองเห็นได้ หากฟิลด์หัวเรื่องมีตัวเลือกส่วนหัวที่ถูกต้องหนึ่งในสองตัวเลือก (การสมัครรับข้อมูลหรือการสมัครรับข้อมูล) บันทึกที่ตรวจสอบความถูกต้องของค่าของฟิลด์จากหรือเปิดใช้งาน (ยืนยันแล้ว) หรือมองเห็นได้จากตาราง ในทั้งสองกรณี โปรดระบุข้อมูลเพิ่มเติมเกี่ยวกับสคริปต์ตามที่อยู่ที่ระบุไว้ในช่อง แผ่นงานถัดไปจะถูกระบุโดยแผ่นถัดไป หากหัวข้อไม่ล้างแค้นในหัวข้อที่ยอมรับได้ จะมีการบังคับใช้คำเตือนเกี่ยวกับการอภัยโทษ และแผ่นงานก็ถูกกำหนดให้นำออกด้วย สคริปต์ Potim เพื่อไปยังแผ่นงานถัดไป
หลังจากวิเคราะห์ใบทั้งหมดเสร็จแล้ว ก็เคลียร์กล่องไวน์
ฉันไม่รังเกียจที่จะอ่านโฟลว์ชาร์ต ดังนั้นเรามาดูทางขวากัน ในการเปิดเมลบ็อกซ์ ฟังก์ชัน imap_open จะถูกใช้ ชาร์ด RNR รองรับหุ่นยนต์ด้วยโปรโตคอลจำนวนหนึ่ง จำเป็นต้องระบุอย่างชัดเจนว่าโปรโตคอลใดถูกเลือกสำหรับหุ่นยนต์พร้อมกล่อง ของเรามีพอร์ต POP3 บนพอร์ต 110 (มาตรฐาน) มาเพิ่มผลลัพธ์ของการพิมพ์สคริปต์การเปลี่ยนแปลง $my_box
ไปข้างหน้า ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงนี้จะใช้ได้กับฟังก์ชัน imap ทั้งหมด เราให้กล่องเพื่อตรวจสอบการปรากฏตัวของใบไม้ ฟังก์ชัน imap_num_msg ทำการตรวจสอบซ้ำ
$n = imap_num_msg($my_box);
ส่งผลให้จำนวนใบไม้ในกล่องเปลี่ยนไป ตัวเลขอาจมากกว่าศูนย์หรือแพงกว่าสำหรับคุณ (เช่น ช่องว่าง)
หากมีใบอยู่ วงจร while จะตรวจดูใบโดยเพิ่มจำนวนแผ่นทีละแผ่นตามลำดับ เคารพว่าชีตแรกของกล่องจะเป็นแม่หมายเลข 0 เช่นเดียวกับองค์ประกอบแรกของอาร์เรย์
ในการเพิ่มจำนวนชีต ให้เปลี่ยนค่า $m เป็น 0 จากนั้นสำหรับความคิดของวงจร ให้เพิ่มหนึ่ง $m++
หากต้องการแยกวิเคราะห์ส่วนหัวที่จะคลิกเรา สองฟังก์ชันก็เพียงพอแล้ว: imap_header และ imap_fetch_overview สำหรับการดูแลผิวของพวกเขา สกรีนครีม จำเป็นต้องระบุหมายเลขแผ่น ในความเห็นของเรา ในช่วงกลางของวัฏจักรของไวน์ การเปลี่ยนแปลง $m
imap_header เปลี่ยนผลลัพธ์ของวัตถุเพื่อดึงข้อมูลที่แยกออกมาเกี่ยวกับส่วนหัวของแผ่นงาน ในช่วงกลางของวินาที วัตถุที่จะล้างแค้นคืออาร์เรย์ประเภทหนึ่งเพื่อล้างแค้นความหมายบางอย่าง Tse ส่วนบุคคล, adl, กล่องจดหมายและโฮสต์ เราอยู่ในกล่องจดหมายและโฮสต์น้อยกว่า การส่งїхเราใช้ที่อยู่ซึ่งส่งแผ่นงาน
$h = $h -> จาก ;
เอ
foreach ($h เป็น $k => $v ) (
$กล่องจดหมาย = $v -> กล่องจดหมาย;
$host = $v -> โฮสต์;
$personal = $v -> ส่วนตัว;
$email = $เมลบ็อกซ์ ? @¬. $โฮสต์;
imap_fetch_overview - ให้เราดึงธีมของชีต เพื่อจุดประสงค์เดียวกัน เป็นไปได้ที่จะสั่นและ imap_header แต่ด้วยเหตุผลหลายประการ อาจไม่สามารถใช้งานได้ จากอาร์เรย์ที่หมุนฟังก์ชันเราต้องการเฉพาะเขตข้อมูลเรื่อง
foreach ($s เป็น $k => $v ) (
$ subj = $ v -> เรื่อง ;
}
ยิ่งไปกว่านั้น งานของเราจะดำเนินการจนถึงจุดที่ได้รับอีเมลจากฐาน และในขณะเดียวกัน ให้ทำเครื่องหมายทั้งแถวด้วยบันทึกว่า "perverenu" หรือดู สมมติว่าหลังจากกรอกแบบฟอร์มสมัครสมาชิกบนเว็บไซต์แล้ว ผู้ชำระล่วงหน้าจะได้รับสถานะ 0 และหลังจากยืนยันการสมัครสมาชิก ไวน์จะเปลี่ยนเป็น 1
ถ้า ($subj == "สมัคร" ) (
mysql_query( "UPDATE สมัครสมาชิก SET stat=1 WHERE email=$my_email");
}
mysql_query( "ลบออกจากการสมัครโดยที่อีเมล = $my_email");
$del = imap_delete($my_box, $m);
}
อื่น(
$del = imap_delete($my_box, $m);
}
ดังที่ได้กล่าวไว้ข้างต้น หลังจากที่ vikonannya สคริปต์ทั้งหมดเคลียร์กล่อง
โปรแกรมที่ง่ายที่สุดได้รับเป็นมากกว่าการสาธิตว่าใน PHP คุณสามารถเขียนได้ไม่เฉพาะไซต์ที่เปลี่ยนแปลงแบบไดนามิก แต่ยังรวมถึงบริการที่ไม่สามารถมองเห็นได้ เห็นได้ชัดว่าเมื่อเขียนสคริปต์สำหรับเชลล์ pHP จะไม่หยุดนิ่งต่อหน้า Perl คู่แข่ง แต่ไม่น้อย ...
รายการการตั้งค่าของโปรแกรมพร้อมพารามิเตอร์สองสามตัวของการเชื่อมต่อกับฐานข้อมูล (db.php):
รวม "db.php";
$my_box = imap_open("(you.pop.host/pop3:110)", "เข้าสู่ระบบ", "รหัสผ่าน");
$n = imap_num_msg($my_box);
$m=0;
$add_text = "
เนื่องจากการยืนยันการสมัครของคุณ”;
$add_sbj = "คุณเพิ่ม!" ;
$del_text = "
Vibachte, ale tsya ไปรษณีย์ภาพหน้าจอ
tіlki administruvannya rozsilki";
$err_sbj = "ผิดพลาด" ;
$headers = จาก: Subscribe Robot
Xmailer: PHP4
ประเภทเนื้อหา: ข้อความ/ธรรมดา; ชุดอักขระ=UTF-8
"
;
ถ้า($n != 0 ) (
ในขณะที่($m++<
$n
) {
$h = imap_header($my_box, $m);
$s = imap_fetch_overview($my_box, $m);
$h = $h -> จาก ;
foreach ($h เป็น $k => $v ) (
$กล่องจดหมาย = $v -> กล่องจดหมาย;
$host = $v -> โฮสต์;
$personal = $v -> ส่วนตัว;
$email = $เมลบ็อกซ์ "@". $โฮสต์;
$my_email = mysql_escape_string($อีเมล);
}
foreach ($s เป็น $k => $v ) (
$ subj = $ v -> เรื่อง ;
}
ถ้า ($subj == "สมัคร" ) (
mysql_query( "อัปเดตตาราง SET stat=1 WHERE email=$my_email");
//พิมพ์ mysql_error();
$del = imap_delete($my_box, $m);
จดหมาย ($email, $add_sbj, $add_text, $headers);
}
elseif ($subj == "ยกเลิกการสมัคร") (
mysql_query( "ลบออกจากตารางโดยที่อีเมล = $my_email");
$del = imap_delete($my_box, $m);
จดหมาย ($email, $del_sbj, $del_text, $headers);
}
อื่น(
$del = imap_delete($open_box, $m);
จดหมาย($อีเมล, $err_sbj, $err_text, $ส่วนหัว);
}
}
$clear = imap_expunge($my_box);
}
?>
อีเมลเป็นเครื่องมือที่สำคัญที่สุดสำหรับการแลกเปลี่ยนข้อมูลและราวกับว่าคุณได้รับชัยชนะในการทำงานแล้วร้องตามสถานการณ์: แผ่นงานถูกส่งไปยังอีเมลซึ่งต้องได้รับข้อมูลที่จำเป็นด้วยเสียงลั่นดังเอี๊ยด มาพูดถึง Yandex กันเถอะ - ในบทความนี้ฉันจะติดตามคุณผู้อ่านที่รักแจ้งให้เราทราบวิธีรับแผ่นงานจากภาพหน้าจอดังนั้นเราจะจัดเรียงตัวเลือกหากมีไฟล์แนบในแผ่นงาน - เป็นผลให้ zavantazhit สำหรับการจัดการที่อยู่ห่างไกลออกไป
ตัวฉันเอง z zim zavdannyam zіtknuvsya dosit เป็นเวลานานและแม้กระทั่งสำหรับ nayavnostі dosvіdu ขนาดเล็กก็ทำงานกับโปรแกรมเมล Yandex โดยใช้เวลาและความกังวลมากมายเพื่อให้ได้ผลลัพธ์ที่จำเป็น การให้อภัยครั้งแรกของฉันคือ ฉันเริ่มค้นหาหุ้นที่คล้ายคลึงกันในเน็ต เช่นเดียวกับผู้ค้าปลีกทางเว็บหลายๆ คน แต่ไม่ได้เร่งความเร็วด้วยความช่วยเหลือ (ความช่วยเหลือเพิ่มเติม) ของ Yandex จึงมีข้อมูลพื้นฐานถึงแม้จะยังไม่เพียงพอ แต่สิ่งสำคัญสำหรับการเขียนสคริปต์ประเภทนี้ (เพิ่มเติมด้านล่าง) ในเวลานั้นจำเป็นต้องเขียนสคริปต์ซึ่งเป็นสาระสำคัญของสิ่งที่ทำ: เมื่อคุณส่งรายการสินค้าจากราคาสินค้าในรูปแบบ xls ไปยัง Yandex จำเป็นต้องทำให้เสร็จ (แยกวิเคราะห์และแยกวิเคราะห์ด้วยข้อมูล จากฐานข้อมูลของร้านอินเทอร์เน็ตซึ่งขึ้นอยู่กับผลลัพธ์จากนั้นเปิดที่นี่)
ก่อนอื่น สิ่งที่เราต้องทำก่อนเขียนบท - ให้ตั้งชื่อแผนปฏิบัติการของเราซึ่งประกอบด้วยเก้าประเด็น:
- เราสามารถส่งข้อความเพื่ออนุญาตการเข้าถึงผ่านโปรโตคอลเมล
- Namіtimoโครงสร้างของโปรแกรม PHP มีความสำคัญสำหรับการเข้ารหัสไฟล์
- ทำความคุ้นเคยกับโปรโตคอลเมล IMAP และความสามารถของมัน
- เราเชื่อมต่อกับ Yandex ผ่านการเข้าสู่ระบบและรหัสผ่านบัญชี และเราสามารถให้อภัยในทุกขั้นตอน
- มาตัดหัวแผ่นกัน
- นำส่วนที่ใช้งานได้ของแผ่นงานออกไป
- โปรดดูแลสิ่งที่แนบมาของไฟล์
- การสร้างภาพหุ่นยนต์ที่มองเห็นได้
- มาตัดเถาวัลย์กันเถอะ
หัวข้อคือปริมาตร แต่ฉันจะพยายามทำให้ทุกอย่างกระชับและชัดเจนที่สุด แม่ มาทำกัน
Nalashtuvannya posti
ไปที่กล่องจดหมายของเราแล้วไปที่การตั้งค่าดังที่แสดงด้านล่างในภาพหน้าจอ:
ตอนนี้เราได้ทำงานหลายอย่างกับเมลผ่านโปรโตคอล IMAP และ POP3:
มีคนจำนวนมากที่นี่วาดภาพเหมือนในภาพ แต่ฉันติดกันและมากกว่าหนึ่งครั้งถ้าฉันสามารถเข้าถึงได้ ในการนั้น หากคุณมีการตั้งค่าอื่น ให้ทำเครื่องหมายที่ภาพหน้าจอ เพื่อให้เราอนุญาตการเข้าถึงผ่านโปรโตคอล IMAP
โครงสร้างโปรแกรม її การเข้ารหัส
สำหรับแอปพลิเคชันนี้ เราจะไม่พับโครงสร้างของโปรแกรม ไม่จำเป็นต้องใช้ชาร์ด แต่เฉพาะส่วนที่จำเป็นเท่านั้น (ฉันทำงานในโปรแกรมแก้ไข Sublime Text):
- tmp - โฟลเดอร์ในการแทรกไฟล์ yaku zavantazhuvatememo จากแผ่นงานดังนั้นเหม็นє;
- .htaccess - กำหนดค่าส่วนเซิร์ฟเวอร์ เช่น เซิร์ฟเวอร์ apache
- functions.php - ที่นี่เราเพิ่มฟังก์ชั่นของเรา;
- main.css - ไฟล์สไตล์;
- index.php - จุดเริ่มต้นโปรแกรม;
เราจะเข้ารหัส UTF-8 และโหลดไฟล์ .htaccess ทันทีด้วยแถวถัดไป:
AddDefaultCharset utf-8 AddCharset utf-8 *
โปรโตคอล IMAP
จากจุดแรกเป็นที่ชัดเจนว่าคุณสามารถทำงานกับ Yandex ผ่านโปรโตคอล POP3 ได้ ทำไมต้อง IMAP เอง? Zih สองช่อง IMAP єใหม่іทางเลือก POP3 เช่นกัน vin อาจต่ำ ( ฉันไม่สนใจการเลือกแผ่นงานโดยเฉพาะ ตามจริงแล้ว หากคุณต้องการปิดใช้งานโปรโตคอล POP3 ฟังก์ชันทั้งหมดที่จำเป็นก่อน IMAP จะทำงานสำหรับโปรโตคอลใหม่
เชื่อมต่อกับเมล Yandex สำหรับโปรโตคอล IMAP เพิ่มเติม
ในการเชื่อมต่อกับเมล เราจำเป็นต้องทราบพารามิเตอร์สามตัว: การเข้าสู่ระบบของเมล รหัสผ่าน และที่อยู่ของเซิร์ฟเวอร์เมล เนื่องจากไม่มีปัญหากับพารามิเตอร์สองตัว ดังนั้น Yandex จึงสามารถทราบอีกค่าหนึ่งได้ เกี่ยวกับ tse (เช่นไวนิลฉันมีปัญหา) ฉันเป็นมากกว่านั้นและเขียนที่แอปพลิเคชั่นจำนวนมากพารามิเตอร์ที่สามของตัวบ่งชี้นั้นผิดและเพื่อเปิดเผยของฉันเองว่าพวกเขาตำหนิการให้อภัย - tse แล้ว อย่างน้อยก็รับไม่ได้ ฉันไม่ไปไหนซักพักแล้วฉันจะส่งข้อความถึงคุณโดยตรงไปยังฝั่ง Yandex - การตั้งค่าโปรแกรมเมล. สิ่งที่เราต้องการสำหรับการเชื่อมต่อ:
ตอนนี้คุณสามารถข้ามไปที่โค้ดได้โดยตรง:
ส่วนหัว ("ประเภทเนื้อหา: text/html; charset=utf-8"); error_reporting(0); require_once("functions.php"); $mail_login = "yandex_mail"; $mail_password = "mail_password"; $mail_imap = "(imap.yandex.ru:993/imap/ssl)"; // รายการประเภทไฟล์ $mail_filetypes = array("MSWORD"); $การเชื่อมต่อ = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection)( echo("Mail pardon - ".$mail_login); exit; )else( $msg_num = imap_num_msg($connection); $mails_data = array(); สำหรับ($i = 1 ;$i<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);
จำเป็นต้องเพิ่มการเข้ารหัส UTF-8 สำหรับส่วนหัวเพิ่มเติมและรวมถึงการให้อภัย เรารวมไฟล์ functions.php และระบุการตั้งค่าตามที่ได้กล่าวไปแล้ว อาร์เรย์ $ mail_filetypes มีรูปแบบไฟล์ที่เราต้องการ ดังนั้นจึงทำเพื่อให้แน่ใจว่าไม่จำเป็นต้องตรวจสอบและเลือกไฟล์เฉพาะ มันถูกส่งไปด้านหลังฟังก์ชั่นช่วยเหลือ imap_open() ราวกับว่า IMAP-pot ถูกหมุนในระยะไกลและเป็นเท็จหากอยู่ไม่ไกล (หรือควรเพิ่มการให้อภัย แต่ไม่เป็นเช่นนั้น) เราทำงานให้เสร็จสิ้นด้วยเธรดสำหรับฟังก์ชันความช่วยเหลือ imap_close () โดยผ่านตัวบ่งชี้ їійідніднання Mіzh tsimi สองหน้าที่เป็นตัวดำเนินการที่ฉลาดที่สุด
ด้วยการโทรขอความช่วยเหลือจากระยะไกล imap_num_msg() เราทราบจำนวนใบไม้ที่จะส่งและเพิ่มอาร์เรย์ ซึ่งเราจะใส่ข้อมูลที่จำเป็นทั้งหมดจากสตรีม ต้าหลี่ทำตามวัฏจักรซึ่งแผ่นหนังถูกประมวลผลเป็นตัวเลข
การตัดแต่งส่วนหัว
ในการลบส่วนหัวของแผ่นงาน จำเป็นต้องเพิ่มความเร็วของฟังก์ชัน imap_header() พารามิเตอร์อื่นคือหมายเลขแผ่นงาน:
// ส่วนหัวของชีต $msg_header = imap_header($connection, $i);
ในขั้นตอนนี้ เราใช้อ็อบเจ็กต์ซึ่งเราต้องการข้อมูล โดยบันทึกไว้ในอาร์เรย์ $mails_data แกนก้นของแผ่นใดแผ่นหนึ่ง:
ในภาพหน้าจอนี้ชัดเจนว่าข้อมูลทั้งหมดซ้ำซ้อน แต่ไม่มีบทบาทพิเศษ ข้อมูลที่สะดวกกว่านั้นยากกว่า สำคัญกว่านั้น - การเข้ารหัสแผ่นงานเหล่านั้น คุณสามารถเป็นแบบนั้นได้ และในเวลานี้คุณจำเป็นต้องควบคุม นี่คือสถานการณ์ที่มีชื่อเรื่องของแผ่นงานและไฟล์แนบ
$mails_data[$i]["time"] = เวลา($msg_header->MailDate); $mails_data[$i]["date"] = $msg_header->MailDate; foreach($msg_header->เป็น $data)( $mails_data[$i]["to"] = $data->mailbox."@".$data->host; ) foreach($msg_header->from as $ data)( $mails_data[$i]["from"] = $data->เมลบ็อกซ์"@".$data->host; )
เราคำนึงถึงอาร์เรย์ของเรา: การประทับเวลา วันที่ที่แผ่นงานถูกถอนออก ที่อยู่อีเมลและผู้ถือสิทธิ์ และส่งผ่านไปยังการนำแผ่นงานออกโดยสิ่งเหล่านั้น เราต้องเริ่มเพิ่มสามฟังก์ชันในไฟล์ functions.php:
ฟังก์ชั่น check_utf8($charset)( if(strtolower($charset) != "utf-8")( return false; ) return true; ) function convert_to_utf8($in_charset, $str)( return iconv(strtolower($in_charset), "utf-8", $str); ) ฟังก์ชัน get_imap_title($str)( $mime = imap_mime_header_decode($str); $title = ""; foreach($mime as $key => $m)( if(!check_utf8 ) ($m->charset))( $title .= convert_to_utf8($m->charset, $m->text); )else( $title .= $m->text; ) ส่งคืน $title; )
ชื่อที่จะพูดว่า ฉัน ฉันคิดว่า varto อธิบายฟังก์ชันที่เหลือ ต้องใช้แถวการเข้ารหัสและเพื่อขอความช่วยเหลือ imap_mime_header_decode() ถอดรหัส її ซึ่งเป็นผลมาจากการที่อาร์เรย์ของวัตถุถูกหมุน สกินสำหรับชุดอักขระกำลัง (การเข้ารหัส) และข้อความ (ข้อความตามหัวข้อ) จำนวนเท่าใดก็ได้ ทุกอย่างเรียบง่ายในต้าหลี่: เมื่อวนซ้ำ ให้โค้ดโค้ดใหม่ ตั้งค่าเป็น UTF-8 และกาวหัวข้อให้เป็นหัวเรื่องเดียวแล้วพลิกกลับ
ทีนี้มาดูไฟล์ index.php และมาดูพารามิเตอร์สุดท้ายกัน:
$mails_data[$i]["title"] = get_imap_title($msg_header->หัวเรื่อง);
เกี่ยวกับเรื่องนี้ส่วนหัวของแผ่นงานจะเสร็จสมบูรณ์
แพรทซิยูโม่กับตัวแผ่น
เราดำเนินการทีละขั้นตอนเพื่อสร้างอาร์เรย์ของเราจากข้อมูลที่แก้ไขของชีต และตอนนี้ เพื่อลบเนื้อหา เราจำเป็นต้องเพิ่มความเร็วด้วยสองฟังก์ชัน:
// ลำตัว $msg_structure = imap_fetchstructure($connection, $i); $msg_body = imap_fetchbody($ การเชื่อมต่อ, $i, 1);
การเปลี่ยนแปลงครั้งแรกใน $msg_structure มีโครงสร้างลีฟ - ออบเจกต์ทั้งหมด ซึ่งคุณสามารถทราบมวลของข้อมูลพื้นฐาน ตัวอย่างของส่วนหนึ่งของอ็อบเจ็กต์ที่แสดงด้านล่าง:
สิ่งที่สำคัญสำหรับความสำเร็จของงานของเรา:
- ประเภท – ชื่อแผ่นงานประเภทแรกขึ้นอยู่กับสิ่งที่ส่งมาให้เราในจดหมายสามารถเปลี่ยนจาก 0 เป็น 7 (ตัวเลขสกินเพื่อประโยชน์ของเนื้อหาประเภทของตัวเองซึ่งพบได้ในชื่อแผ่นงาน);
- การเข้ารหัส – การเข้ารหัสสำหรับการถ่ายโอนเนื้อหา เปลี่ยนจาก 0 เป็น 5 (0 – 7BIT, 1 – 8BIT, 2 – BINARY, 3 – BASE64, 4 – QUOTED-PRINTABLE, 5 – อื่นๆ);
- ส่วน – อาร์เรย์ของส่วนต่าง ๆ ของตัวอักษรซึ่งสะท้อนโครงสร้างของวัตถุที่เท่ากัน
Trochy รายงานชิ้นส่วน razglyana yak_st เพิ่มเติม อย่างแรกเลย สิ่งที่ต้องพูดคือ นั่นคือ ตรงกลางศูนย์ของอาร์เรย์ที่มีข้อมูลที่ตรงกับข้อความของชีตเอง และอย่างแรกเลยคือไฟล์แนบ นอกจากนี้ ประเภทและพารามิเตอร์ของการเข้ารหัสในมุมมองที่ชัดเจนและโดยนัยจะถูกระบุสำหรับวัตถุสกิน
โครงสร้างของชีตอาจลงทุนน้อย zavgodno แต่ฉันมีความผันผวนบางอย่างถ้ามันมาถึง chotirox - ห้าเท่ากับแล้วดูเหมือนว่าเราควรได้รับโอกาสในการเขียนฟังก์ชันแบบเรียกซ้ำ
ฟังก์ชัน imap_fetchbody() อื่นดึงข้อมูลเพียงส่วนหนึ่งของชีต ซึ่งส่วนใหญ่เข้ารหัสแล้ว
ตอนนี้ฉันจะเพิ่มการเปลี่ยนแปลงในลักษณะที่ฉันบันทึกเวอร์ชันทั่วไปของเนื้อความของแผ่นงาน:
$body = "";
ให้เปิดไฟล์ functions.php และเขียนฟังก์ชันแบบเรียกซ้ำ:
ฟังก์ชั่น recursive_search($structure)( $encoding = ""; if($structure->subtype == "HTML" || $structure->type == 0)( if($structure->parameters->attribute == " ชุดอักขระ")( $charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure- >ประเภทย่อย); )else( if(isset($structure->parts)))() return recursive_search($structure->parts); charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype); )
ฟังก์ชัน recursive_search() ยอมรับหนึ่งพารามิเตอร์ - โครงสร้างของชีต จากนั้นจึงเปลี่ยนกำลังและรับพารามิเตอร์สามตัว: การเข้ารหัส ชุดอักขระ ประเภทย่อย จุดเริ่มต้นของการเรียกซ้ำคือการเข้าสู่คุณภาพของชิ้นส่วนที่มีศูนย์ศูนย์ ไม่มีอะไรจะอธิบายมากกว่านี้แล้ว ฉันคิดว่าฉันเข้าใจจากโค้ดแล้วว่าอะไรควรเป็น
มาเพิ่มอีกฟังก์ชันสำหรับการแปลงเนื้อความของชีต ตามที่เราต้องการในอนาคต:
ฟังก์ชัน structure_encoding($encoding, $msg_body)( switch((int) $encoding)( case 4: $body = imap_qprint($msg_body); break; case 3: $body = imap_base64($msg_body); break; case 2: $body = imap_binary($msg_body); ตัวแบ่ง, กรณีที่ 1: $body = imap_8bit($msg_body); ;)
$recursive_data = recursive_search($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1)( $body = $msg_body; ) if($recursive_data["encoding"] == 4)( $body = โครงสร้าง_encoding($recursive_data["encoding"], $msg_body); ) if($recursive_data["encoding"] == 3)( $body = structure_encoding($recursive_data["encoding"], $msg_body); ) if recursive_data[ "การเข้ารหัส"] == 2)( $body = structure_encoding($recursive_data["encoding"], $msg_body); ) if(!check_utf8($recursive_data["charset"]))( $body = convert_to_utf8( recursive_data[" ชุดอักขระ"], $msg_body);
นอกจากนี้ เมื่อเราดึงข้อมูลจากการเรียกซ้ำ เราเข้ารหัสการถ่ายโอนใหม่ทีละขั้นตอน และเรียกใช้ฟังก์ชัน structure_encoding() ในภายหลังด้วยพารามิเตอร์ที่เหมาะสม ในส่วนที่เหลือของตัวดำเนินการอัจฉริยะนั้น สิ่งที่ทำได้ใน UTF-8 นั้นได้รับการปกป้อง และแม้หลังจากการปรับเปลี่ยนทั้งหมดที่เรามี เราจะเห็นโค้ดนั้น มันจะถูกบันทึกใหม่
แพ้ระหว่าง:
$mails_data[$i]["body"] = base64_encode($body); $mails_data[$i]["body"] = ฐานข้อมูล 64_encode($body);
เนื้อความของแผ่นงานสามารถมีทั้งข้อความธรรมดาและเค้าโครง HTML ที่มีสไตล์เป็นของตัวเอง เข้ารหัสใน BASE64 ดังนั้นเลย์เอาต์ของเราจึงไม่ทำงานในระหว่างการเรนเดอร์
ไฟล์แนบ
Axis ไต่ขึ้นไปจนถึงจุดสิ้นสุดของการเขียนโปรแกรมของเราอย่างราบรื่น:
// แทรกไฟล์ if(isset($msg_structure->parts))( for($j = 1, $f = 2; $j< count($msg_structure->ชิ้นส่วน); $j++, $f++)( if(in_array($msg_structure->parts[$j]->subtype, $mail_filetypes))( $mails_data[$i]["attachs"][$j]["type"] = $msg_structure->parts[$j]->subtype;$mails_data[$i]["attachs"][$j]["size"] = $msg_structure->parts[$j]->bytes; $i] ["แนบ"][$j]["name"] = get_imap_title($msg_structure->parts[$j]->parameters->value); $mails_data[$i]["attachs"][$ j][ "file"] = structure_encoding($msg_structure->parts[$j]->encoding, imap_fetchbody($connection, $i, $f)); file_put_contents("tmp/".iconv("utf-8") , " cp1251", $mails_data[$i]["attachs"][$j]["name"]), $mails_data[$i]["attachs"][$j]["file"]); )
Shmatok, yaky vіdpovіdaєสำหรับการประมวลผลไฟล์แนบนั้นรวยน้อยกว่าและตอนนี้ทำไมถึงเป็นเช่นนั้น หลักการทำงานกับไฟล์คล้ายกับการทำงานกับเนื้อความของแผ่นงาน แต่ขั้นตอนนี้ได้รับการซ่อมแซมจากสิ่งเดียวกันในอาร์เรย์ของชิ้นส่วน อย่าลืมเพิ่มสิ่งที่ไม่ได้มาตรฐานโดยดูจากรายชื่อประเภท สำหรับความช่วยเหลือของฟังก์ชั่นง่าย ๆ file_put_contents() เราบันทึกไฟล์ไปยังเซิร์ฟเวอร์ของเราในโฟลเดอร์ tmp
อยากได้ผลลัพธ์!
ในกระบวนการทำงาน เราได้สร้างอาร์เรย์จากข้อมูล $mails_data และสำหรับการแสดงข้อมูลเป็นภาพ เราได้ทำงานกับมันโดยตรงแล้ว ในบทความนี้ ฉันทำแผ่นทดสอบซึ่งวางอยู่ในจดหมาย ให้สงสัยว่าเกิดอะไรขึ้นกับเราเป็นผล:
แกนบางชนิดมีหน้าที่ในการออกจากอาร์เรย์โดยประมาณ แต่น่าเสียดายที่ฉันแนบไฟล์กับไฟล์ด้วยเหตุผลพิเศษ ตอนนี้ ไปที่มาร์กอัป HTML ของเรา:
Yandex Post (Vhіdnі) |
จำนวนใบ:
ฉันจะไม่เพิ่มสไตล์ที่นี่เพราะกลิ่นเหม็นไม่ได้มีบทบาทพิเศษ ด้วยเหตุนี้:
และบนเซิร์ฟเวอร์ที่โฟลเดอร์ tmp คุณจะมีไฟล์
วิสโนวอค
เมื่อเสร็จสิ้นทุกขั้นตอนของสถิติแล้วคุณจะได้ผลลัพธ์ที่น่าเชื่อถือ แต่ทุกอย่างไม่ง่ายอย่างที่คุณสามารถสร้าง - หินน้ำ vrakhovuvat เป็นสิ่งจำเป็น เมื่อเขียนสคริปต์สำหรับงานเฉพาะ มีความจำเป็นต้องดูแลการเข้ารหัสในทุกขั้นตอน แผ่นงานสามารถไปจากอีเมลต่างๆ ได้ ซึ่งสกินอาจแตกต่างกันไป ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องตรวจสอบให้แน่ใจว่าจดหมาย Yandex และเอกสารประกอบได้รับการอัปเดตเป็นระยะ ๆ ดังนั้นอาจมีจุดต่าง ๆ ในการทำงานกับโปรแกรมอีเมล ในสิ่งที่ฉันมีทุกอย่างฉันสนับสนุนคุณบนพื้นฐานของความโชคดีบทความได้รับเมื่อทำงานกับ Yandex Mail เวอร์ชันต่ำที่ใหญ่กว่า
อย่าพยายามเอาแผ่นงานออกจากเอกสารแนบ (
วิธีบังคับเมลด้วยไฟล์ - ไม่ว่าจะเป็น - จากนั้นข้อความของชีตจะหายไป
ช่วยกรุณา
มันเริ่มต้นกับฉัน ... หากคุณส่งอีเมลจาก Yandex ถึง Yandex ทุกอย่างก็ดับลง ...
เรียบร้อย
แกนเบียร์ทำไมไฟล์อื่น ๆ crim word tsey script ไม่ยอมรับไม่zrozumіlo ... มีแถว MSWORD สั่งใครโดยใส่ใน pdf і zhpg і png - อ่านและเลือกปกติเฉพาะคำ .... เช่นนั้น