ใช้ PHP imap ฟังก์ชัน imap mail ของ PHP โฟลเดอร์อีเมล

โกลอฟนา / ข้อมูล Corisna

หนึ่งในฟังก์ชัน 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 จำเป็นต้องทำให้เสร็จ (แยกวิเคราะห์และแยกวิเคราะห์ด้วยข้อมูล จากฐานข้อมูลของร้านอินเทอร์เน็ตซึ่งขึ้นอยู่กับผลลัพธ์จากนั้นเปิดที่นี่)

ก่อนอื่น สิ่งที่เราต้องทำก่อนเขียนบท - ให้ตั้งชื่อแผนปฏิบัติการของเราซึ่งประกอบด้วยเก้าประเด็น:

  1. เราสามารถส่งข้อความเพื่ออนุญาตการเข้าถึงผ่านโปรโตคอลเมล
  2. Namіtimoโครงสร้างของโปรแกรม PHP มีความสำคัญสำหรับการเข้ารหัสไฟล์
  3. ทำความคุ้นเคยกับโปรโตคอลเมล IMAP และความสามารถของมัน
  4. เราเชื่อมต่อกับ Yandex ผ่านการเข้าสู่ระบบและรหัสผ่านบัญชี และเราสามารถให้อภัยในทุกขั้นตอน
  5. มาตัดหัวแผ่นกัน
  6. นำส่วนที่ใช้งานได้ของแผ่นงานออกไป
  7. โปรดดูแลสิ่งที่แนบมาของไฟล์
  8. การสร้างภาพหุ่นยนต์ที่มองเห็นได้
  9. มาตัดเถาวัลย์กันเถอะ

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

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 * CharsetSourceEnc utf-8 CharsetDefault 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 ของเรา:

ยานเดกซ์โพสต์ |<?php echo($mail_login);?>

Yandex Post (Vhіdnі) |

จำนวนใบ:

ไม่มีใบ
$mail):?>
เครื่องหมาย Timchas:
วันที่:
ถึงผู้ซึ่ง:
พิมพ์:
เรื่อง:
แผ่นฐาน64:
ไฟล์ที่แนบมาด้วย:
$attach):?>
พิมพ์:
Rozmir (เป็นไบต์):
ชื่อ:
ร่างกาย:

ฉันจะไม่เพิ่มสไตล์ที่นี่เพราะกลิ่นเหม็นไม่ได้มีบทบาทพิเศษ ด้วยเหตุนี้:


และบนเซิร์ฟเวอร์ที่โฟลเดอร์ tmp คุณจะมีไฟล์

วิสโนวอค

เมื่อเสร็จสิ้นทุกขั้นตอนของสถิติแล้วคุณจะได้ผลลัพธ์ที่น่าเชื่อถือ แต่ทุกอย่างไม่ง่ายอย่างที่คุณสามารถสร้าง - หินน้ำ vrakhovuvat เป็นสิ่งจำเป็น เมื่อเขียนสคริปต์สำหรับงานเฉพาะ มีความจำเป็นต้องดูแลการเข้ารหัสในทุกขั้นตอน แผ่นงานสามารถไปจากอีเมลต่างๆ ได้ ซึ่งสกินอาจแตกต่างกันไป ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องตรวจสอบให้แน่ใจว่าจดหมาย Yandex และเอกสารประกอบได้รับการอัปเดตเป็นระยะ ๆ ดังนั้นอาจมีจุดต่าง ๆ ในการทำงานกับโปรแกรมอีเมล ในสิ่งที่ฉันมีทุกอย่างฉันสนับสนุนคุณบนพื้นฐานของความโชคดีบทความได้รับเมื่อทำงานกับ Yandex Mail เวอร์ชันต่ำที่ใหญ่กว่า

อย่าพยายามเอาแผ่นงานออกจากเอกสารแนบ (
วิธีบังคับเมลด้วยไฟล์ - ไม่ว่าจะเป็น - จากนั้นข้อความของชีตจะหายไป

ช่วยกรุณา

มันเริ่มต้นกับฉัน ... หากคุณส่งอีเมลจาก Yandex ถึง Yandex ทุกอย่างก็ดับลง ...
เรียบร้อย
แกนเบียร์ทำไมไฟล์อื่น ๆ crim word tsey script ไม่ยอมรับไม่zrozumіlo ... มีแถว MSWORD สั่งใครโดยใส่ใน pdf і zhpg і png - อ่านและเลือกปกติเฉพาะคำ .... เช่นนั้น

© 2022 androidas.ru - ทั้งหมดเกี่ยวกับ Android