เราดึงจดหมายออกจากจดหมาย เราทำงานร่วมกับโปรโตคอล IMAP บทวิจารณ์ Advanced Email Parcer - โปรแกรมสำหรับการประมวลผลอีเมลอัตโนมัติ


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

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

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

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

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

การตั้งค่าเมล

ไปที่เมลของคุณและไปที่การตั้งค่า ดังที่แสดงในภาพหน้าจอด้านล่าง:



ตอนนี้เราอยู่ในการตั้งค่าเมลผ่าน โปรโตคอล IMAPและป๊อป3:


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

โครงสร้างแอปพลิเคชันและการเข้ารหัส

ในตัวอย่างนี้เราจะไม่ประดิษฐ์ โครงสร้างที่ซับซ้อนแอปพลิเคชันเนื่องจากไม่จำเป็น แต่เราจะเพิ่มเฉพาะสิ่งที่จำเป็น (ฉันทำงานในโปรแกรมแก้ไขข้อความ Sublime):


  • tmp - โฟลเดอร์ที่เราจะดาวน์โหลดไฟล์แนบจากจดหมาย (ถ้ามี)
  • .htaccess – ตั้งค่าฝั่งเซิร์ฟเวอร์ ถ้าคุณมี เซิร์ฟเวอร์อาปาเช่;
  • ฟังก์ชั่น.php – เราจะเพิ่มฟังก์ชั่นของเราที่นี่;
  • main.css – ไฟล์สไตล์;
  • index.php – จุดเริ่มต้นแอปพลิเคชัน;

เราจะใช้การเข้ารหัส UTF-8 ดังนั้นให้กรอกไฟล์ .htaccess ด้วยบรรทัดต่อไปนี้ทันที:

AddDefaultCharset utf-8 เพิ่มCharset utf-8 * CharsetSourceEnc utf-8 CharsetDefault utf-8

โปรโตคอล IMAP

เมื่อกลับไปที่จุดแรกคุณจะเห็นว่าคุณสามารถทำงานกับเมล Yandex ผ่านโปรโตคอล POP3 ได้ แล้วทำไมถึงต้องใช้ IMAP? ในทั้งสองนี้ IMAP เป็นรุ่นที่ใหม่กว่าและเป็นทางเลือกแทน POP3 ดังนั้นจึงมีข้อดีหลายประการ (คุณสามารถศึกษาได้โดยใช้ Wikipedia) แต่ในกรณีของเรา ตัวเลือกได้รับอิทธิพลจากข้อเท็จจริงที่ว่ามันใหม่กว่าเท่านั้น โดยส่วนตัวแล้วฉันไม่เห็นความแตกต่างมากนักว่าจะใช้อะไรอยู่ข้างใต้ งานเฉพาะรับจดหมาย หากคุณจำเป็นต้องใช้โปรโตคอล POP3 ด้วยเหตุผลบางประการฟังก์ชันทั้งหมดที่ใช้กับ IMAP ก็จะใช้งานได้

การเชื่อมต่อกับเมล Yandex โดยใช้โปรโตคอล IMAP

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


ตอนนี้คุณสามารถไปที่โค้ดได้โดยตรง:

Header("ประเภทเนื้อหา: text/html; charset=utf-8"); error_reporting(0); need_once("functions.php"); $mail_login = "yandex_mail"; $mail_password = "mail_password"; $mail_imap = "(imap.yandex.ru:993/imap/ssl)"; // รายการประเภทไฟล์ที่พิจารณา $mail_filetypes = array("MSWORD"); $connection = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection)( echo("เกิดข้อผิดพลาดในการเชื่อมต่อเมล - ".$mail_login); exit; )else( $msg_num = imap_num_msg($connection); $mails_data = array(); for($i = 1; $ ฉัน<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

ก่อนอื่น เรายังระบุการเข้ารหัส UTF-8 เพิ่มเติมโดยใช้ส่วนหัวและปิดการแสดงข้อผิดพลาด เราเชื่อมต่อไฟล์ function.php และระบุการตั้งค่าที่กล่าวถึงข้างต้น ในอาร์เรย์ $mail_filetypes เราระบุรูปแบบไฟล์ที่เราต้องการ มีการตัดสินใจที่จะทำเช่นนี้เพื่อกำจัดขยะที่ไม่จำเป็นและรับไฟล์เฉพาะ การเชื่อมต่อกับเมลทำได้โดยใช้ฟังก์ชัน imap_open() ซึ่งหากสำเร็จก็จะส่งคืนสตรีม IMAP และหากไม่สำเร็จก็จะส่งคืน false (แต่หากคุณเปิดใช้งานการแสดงข้อผิดพลาด จะไม่เป็นเช่นนั้น) เราเสร็จสิ้นการทำงานกับสตรีมโดยใช้ฟังก์ชัน imap_close() โดยส่งตัวบ่งชี้การเชื่อมต่อไปให้ ระหว่างสองฟังก์ชันนี้จะมีคำสั่งแบบมีเงื่อนไขปกติ

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

กำลังประมวลผลส่วนหัวของจดหมาย

หากต้องการรับส่วนหัวของตัวอักษร คุณต้องใช้ฟังก์ชัน 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->to as $data)( $mails_data[$i]["to"] = $data->mailbox."@".$data->host; ) foreach($msg_header->from as $ ข้อมูล)( $mails_data[$i]["from"] = $data->กล่องจดหมาย"@".$data->host; )

เราบันทึกในอาร์เรย์ของเรา: การประทับเวลา, วันที่รับจดหมาย, อีเมลของผู้รับและผู้ส่ง และดำเนินการรับเรื่องของจดหมาย ในการดำเนินการนี้ เราต้องเพิ่มฟังก์ชันสามรายการลงในไฟล์ function.php ก่อน:

ฟังก์ชั่น check_utf8($charset)( if(strtolower($charset) != "utf-8")( return false; ) return true; ) ฟังก์ชั่น 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 )

ชื่อนี้อธิบายได้ในตัวและฉันคิดว่ามันคุ้มค่าที่จะอธิบายเฉพาะฟังก์ชันสุดท้ายเท่านั้น ใช้สตริงที่เข้ารหัสและใช้ imap_mime_header_decode() เพื่อถอดรหัส ส่งผลให้มีอาร์เรย์ของอ็อบเจ็กต์ โดยแต่ละรายการมีคุณสมบัติสองประการ: ชุดอักขระและข้อความ จากนั้นทุกอย่างก็ง่ายดาย: ตรวจสอบการเข้ารหัสในลูป แปลงเป็น UTF-8 และรวมหัวข้อเป็นส่วนหัวเดียวแล้วส่งคืน

ตอนนี้กลับไปที่ไฟล์ index.php แล้วดึงพารามิเตอร์สุดท้ายออกมา:

$mails_data[$i]["title"] = get_imap_title($msg_header->subject);

เสร็จสิ้นการประมวลผลส่วนหัวของอีเมล

การทำงานกับเนื้อความของจดหมาย

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

// เนื้อความอีเมล $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 - อ้างอิงถึงพิมพ์ได้, 5 - อื่น ๆ );
  • parts – อาร์เรย์ของส่วนตัวอักษรที่สอดคล้องกับโครงสร้างของวัตถุในระดับที่สูงกว่า

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

โครงสร้างของตัวอักษรสามารถซ้อนกันได้ตามต้องการ อย่างน้อยฉันก็มีกรณีที่มันถึงสี่หรือห้าระดับ ดังนั้นเพื่อที่จะแยกย่อยอย่างที่พวกเขาพูดกัน เราจะต้องเขียนฟังก์ชันแบบเรียกซ้ำในอนาคต

ฟังก์ชันที่สอง imap_fetchbody() ดึงข้อมูลเฉพาะส่วนของข้อความ ซึ่งส่วนใหญ่มักจะอยู่ในรูปแบบที่เข้ารหัส

ตอนนี้เรามาเพิ่มตัวแปรที่เราจะบันทึกเวอร์ชันที่ประมวลผลของเนื้อความของตัวอักษร:

$ร่างกาย = "";

กลับไปที่ไฟล์ Functions.php แล้วเขียนฟังก์ชันแบบเรียกซ้ำ:

ฟังก์ชั่น recursive_search($structor)( $encoding = ""; if($struction->subtype == "HTML" || $structure->type == 0)( if($struction->parameters->attribute == " charset")( $charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure- >ประเภทย่อย); )else( if(isset($structural->parts))( return recursive_search($structor->parts); )else( if($structural->parameters->attribute == "charset")( $ charset = $structural->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype ) ) )

ฟังก์ชัน recursive_search() รับหนึ่งพารามิเตอร์ - โครงสร้างของตัวอักษร โดยจะตรวจสอบคุณสมบัติตามลำดับและรับพารามิเตอร์สามตัว: การเข้ารหัส ชุดอักขระ ประเภทย่อย จุดออกจากการเรียกซ้ำคือการไม่มีคุณสมบัติชิ้นส่วนที่มีเซลล์เป็นศูนย์ ไม่มีอะไรจะอธิบายเพิ่มเติมที่นี่ ฉันคิดว่ามันชัดเจนจากโค้ดว่าเกิดอะไรขึ้นและอย่างไร

เรามาเพิ่มฟังก์ชันอีกหนึ่งอย่างในการแปลงเนื้อความของตัวอักษร ซึ่งเราจะต้องใช้ในภายหลัง:

Function Structure_encoding($encoding, $msg_body)( switch((int) $encoding)( กรณีที่ 4: $body = imap_qprint($msg_body); break; กรณีที่ 3: $body = imap_base64($msg_body); break; กรณีที่ 2: $body = imap_binary($msg_body); กรณีที่ 1: $body = imap_8bit;

$recursive_data = recursive_search($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1)( $body = $msg_body; ) if($recursive_data["encoding"] == 4)( $body = โครงสร้าง_การเข้ารหัส($recursive_data["การเข้ารหัส"], $msg_body); if($recursive_data["การเข้ารหัส"] == 3)( $body = โครงสร้าง_encoding($recursive_data["การเข้ารหัส"], $msg_body); ) if($ recursive_data ["encoding"] == 2)( $body = โครงสร้าง_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);

เนื้อความของจดหมายอาจมีเช่น ข้อความธรรมดาและมาร์กอัป HTML พร้อมสไตล์ของตัวเอง เราเข้ารหัสใน BASE64 เพื่อให้ในระหว่างการแสดงภาพเค้าโครงของเราจะไม่ได้รับผลกระทบ

ไฟล์แนบ

เรากำลังใกล้จะถึงจุดสิ้นสุดของการเขียนใบสมัครของเราแล้ว:

// ไฟล์แนบ 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_structor->parts[$j]->subtype; $mails_data[$i]["attachs"][$j]["size"] = $msg_structure->parts[$j]->bytes[; ]["แนบ"][$j]["ชื่อ"] = 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"] ) ) )

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

อยากเห็นผลลัพธ์!

ในกระบวนการทำงาน เราได้สร้างอาร์เรย์ที่มีข้อมูล $mails_data และสำหรับการแสดงภาพ เราจะทำงานกับข้อมูลนั้นโดยตรงแล้ว ในบทความนี้ ฉันใช้จดหมายทดสอบที่อยู่ในจดหมาย มาดูกันว่าสุดท้ายแล้วเราได้อะไร:


นี่คือลักษณะอาร์เรย์ของคุณควรมีลักษณะโดยประมาณ แต่น่าเสียดายที่ฉันต้องซ่อนเนื้อหาของไฟล์ด้วย เหตุผลส่วนตัว- ตอนนี้เรามาดูของเรากันดีกว่า มาร์กอัป HTML:

ยานเดกซ์เมล |<?php echo($mail_login);?>

Yandex Mail (กล่องจดหมาย) |

จำนวนตัวอักษร:

ไม่มีตัวอักษร
$เมล):?>
การประทับเวลา:
วันที่:
ถึงใคร:
จาก:
เรื่อง:
ตัวอักษรใน base64:
ไฟล์แนบ:
$แนบ):?>
พิมพ์:
ขนาด (เป็นไบต์):
ชื่อ:
ร่างกาย:


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


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

บทสรุป

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

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

โปรดช่วยด้วย

ชัดเจน... หากคุณถ่ายโอนจดหมายจาก Yandex ไปยัง Yandex ทุกอย่างจะเรียบร้อย...
คิดออกแล้ว
แต่ไม่ชัดเจนว่าทำไมสคริปต์นี้ไม่ยอมรับไฟล์อื่นนอกเหนือจาก Word... มีบรรทัด MSWORD อยู่ข้างๆ คั่นด้วยเครื่องหมายจุลภาค และใส่ pdf และ zhpg และ png - มีเพียง Word เท่านั้นที่อ่านและบันทึกตามปกติ.... บางอย่างเช่นนี้

» สคริปต์ PHP Sendmail

PHPSendMail

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

- ดาวน์โหลดแล้ว: ครั้ง

PHP ส่งอีเมลอย่างง่าย

ด้วยสคริปต์ PHP แสนง่ายนี้ ผู้เยี่ยมชมเว็บไซต์ของคุณจะสามารถส่งอีเมลถึงคุณโดยตรงผ่านแบบฟอร์มคำติชม

- ดาวน์โหลดแล้ว: ครั้ง

สคริปต์ PHP + AJAX สำหรับส่งแบบฟอร์มไปยัง E-mail

สคริปต์สากลสำหรับการส่งข้อมูลจากแบบฟอร์มไปยังอีเมล สคริปต์นี้เหมาะสำหรับไซต์ต่างๆ เช่น Landing Page ไซต์นามบัตร ฯลฯ

- ดาวน์โหลดแล้ว: ครั้ง

PHP Mailer Final พร้อม captcha

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

- ดาวน์โหลดแล้ว: ครั้ง

จดหมายแบบฟอร์ม GentleSource

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

- ดาวน์โหลดแล้ว: ครั้ง

ไมโครเมล์

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

- ดาวน์โหลดแล้ว: ครั้ง

Web4you-เอฟเอ็ม

Web4you-FM การส่งจดหมายจากเว็บไซต์ของคุณ คุณสมบัติ: 1 - เลือกผู้รับและจำนวนผู้รับ (ตั้งแต่ 1 ถึง 4) 2 - ตรวจสอบว่ากรอกแบบฟอร์มถูกต้อง ถึงใคร. ชื่อ แค่ตัวอักษร...

- เวอร์ชัน 1.0 | ดาวน์โหลดแล้ว: ครั้ง

แบบฟอร์มติดต่อ Light PHP

สคริปต์สำหรับส่งอีเมลผ่านแบบฟอร์มตอบรับนั้นเรียบง่ายมาก แม้แต่ผู้ที่ไม่รู้ PHP/HTML ก็สามารถใช้โปรแกรมได้โดยไม่ยาก...

- ดาวน์โหลดแล้ว: ครั้ง

โดโดสเมล

DodosMail เป็นสคริปต์ PHP ที่ติดตั้งง่ายซึ่งช่วยให้คุณสามารถส่งอีเมลผ่านแบบฟอร์มคำติชมบนเว็บไซต์ของคุณได้ คุณเพียงแค่ต้องอัปโหลดไฟล์ php

- v.2.5 | ดาวน์โหลดแล้ว: ครั้ง

แบบฟอร์มติดต่อ PHP

สคริปต์แบบฟอร์มการติดต่อ PHP มีฟังก์ชันดังต่อไปนี้ 1) ฟังก์ชั่นป้องกันสแปม ผู้ใช้จะต้องป้อนรหัสความปลอดภัยหรือที่เรียกว่า captcha

- ดาวน์โหลดแล้ว: ครั้ง

ติดต่อ TPCS (แบบฟอร์มอีเมล)

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

- ดาวน์โหลดแล้ว: ครั้ง

จดหมายตอบรับ

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

- v.1.2 | ดาวน์โหลดแล้ว: ครั้ง

แบบฟอร์มติดต่อ PHP อย่างง่าย

สคริปต์ PHP ที่เรียบง่ายแต่ปลอดภัยสำหรับติดต่อผู้ดูแลเว็บโดยใช้แบบฟอร์มตอบรับพร้อมการตรวจสอบรหัส (CAPTCHA) เพื่อป้องกันสแปม

- เวอร์ชัน 2.1 | ดาวน์โหลดแล้ว: ครั้ง

แบบฟอร์มติดต่อ PHP (พร้อมการยืนยันรูปภาพ)

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

- ดาวน์โหลดแล้ว: ครั้ง

จดหมายแบบฟอร์ม CW3

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

- v.3.30 | ดาวน์โหลดแล้ว: ครั้ง

แบบฟอร์มติดต่อ reCAPTCHA

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

- v.1.4 | ดาวน์โหลดแล้ว: ครั้ง

phMailer

phMailer เป็นสคริปต์ตอบรับ PHP ที่เรียบง่ายมาก ซึ่งรองรับไฟล์แนบด้วยฟังก์ชัน mail() ในตัวของภาษา PHP


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

แต่บริษัท Tweek Marketing เสนอให้ใช้รูปแบบที่คล้ายกัน แต่ขยายความเป็นไปได้ในการประยุกต์ใช้ ในโซลูชัน Advanced Email Parcer (AEP) จดหมายขาเข้าจะถูกประมวลผลภายนอกไคลเอ็นต์อีเมล และด้วยการใช้ตัวควบคุม ActiveX ทำให้สามารถรวมโปรแกรมเข้ากับโปรแกรมใดๆ ก็ตามที่สนับสนุนเทคโนโลยีนี้ได้ บูรณาการดำเนินการโดยใช้ภาษาสคริปต์ที่ใช้เทคโนโลยี Microsoft Active Scripting ภาษาสคริปต์ส่วนใหญ่สามารถใช้ได้ทั้ง JScript และ VBScript

การใช้โปรแกรมนี้ทำให้คุณสามารถดำเนินการตามปกติบางอย่างได้โดยอัตโนมัติ ตัวอย่างเช่น คุณสามารถทำให้:

  • การประมวลผลแบบฟอร์มคำสั่งซื้อและแบบสอบถามที่ส่งทางอีเมล
  • กรอกฐานข้อมูลคำสั่งซื้อ
  • การเรียงลำดับและการเปลี่ยนเส้นทางการรับส่งอีเมล
  • รวบรวมรายชื่อผู้รับจดหมาย รักษาสถิติต่างๆ
  • การสร้างบริการตอบกลับอัตโนมัติ โรบอตอีเมล
  • สำรองข้อความอีเมลที่สำคัญ

โปรแกรมสามารถทำงานในสองโหมดหลัก - โหมดตัวกลางเมื่อ AEP ทำหน้าที่เป็นตัวประมวลผลระดับกลางที่อินเทอร์เฟซระหว่างเมลเซิร์ฟเวอร์และไคลเอนต์และโหมดตัวรวบรวมซึ่งโปรแกรมเชื่อมต่อกับเซิร์ฟเวอร์เมลอย่างอิสระและขึ้นอยู่กับบัญชี การตั้งค่า ประมวลผลข้อความ และลบหรือทิ้งไว้บนเซิร์ฟเวอร์ (ขึ้นอยู่กับการตั้งค่าบัญชีของคุณ) เมื่อเชื่อมต่อเป็นตัวกลาง การเชื่อมต่อเมลไคลเอ็นต์จะได้รับการกำหนดค่าใหม่ การตั้งค่าใหม่จะคล้ายกับการตั้งค่าเมื่อทำงานกับตัวกรองสแปม เมื่อไคลเอนต์ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ แต่เชื่อมต่อกับโปรเซสเซอร์ระดับกลาง (ฉันสงสัยว่าจะติดตั้งทั้ง parser และตัวกรองสแปมในกรณีนี้ได้อย่างไร)

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

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

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

เช่น วิธีสร้างรายชื่ออีเมลตามข้อความขาเข้า มาสร้างกฎใหม่และตั้งชื่อกันเถอะ สิ่งแรกที่คุณต้องทำคือประมวลผลข้อความขาเข้า เราจะถือว่าเฉพาะผู้ตอบแบบสอบถามที่ส่งจดหมายที่มีชื่อเฉพาะเท่านั้นที่จะรวมอยู่ในรายชื่อผู้รับจดหมาย ดังนั้น จะต้องกำหนดค่าตัวกรองแรกเพื่อเลือกตัวอักษรที่มีส่วนหัวนี้ มาเพิ่มตัวกรอง (ตัวกรองหัวเรื่อง) ให้กับกฎและในคุณสมบัติในฟิลด์ ประกอบด้วย ให้เพิ่มหัวเรื่องที่ต้องการ

จากข้อความที่ตัวกรองนี้เลือก จำเป็นต้องเลือกชื่อและที่อยู่ของผู้ส่ง ในการทำเช่นนี้ เราใช้ฟังก์ชันการสุ่มตัวอย่าง (Line Parcer) เราเพิ่มมันโดยเพียงแค่ลากมันจากแผนผังของฟังก์ชันที่มีอยู่ไปยังกฎที่สร้างขึ้น ควรมีสองฟังก์ชัน: ฟังก์ชันแรกจะประมวลผลฟิลด์ที่มีชื่อผู้ส่ง ฟังก์ชันที่สองจะประมวลผลฟิลด์ด้วยที่อยู่ของเขา (ชื่อผู้ส่งและอีเมลของผู้ส่ง) ข้อมูลที่เลือกจะถูกบันทึกลงในตัวแปรที่คุณกำหนด ตอนนี้พวกเขาจำเป็นต้องได้รับการช่วยเหลือ

หากต้องการบันทึกข้อมูลที่ได้รับ ให้ใช้ฟังก์ชัน File Writer มาเพิ่มลงในกฎในลักษณะเดียวกับฟังก์ชันก่อนหน้า ตอนนี้คุณต้องกำหนดค่าคุณสมบัติ ซึ่งรวมถึงชื่อของไฟล์ที่จะเขียนข้อมูลลงไป ในเทมเพลตสำหรับบันทึกข้อมูล เราจะป้อนชื่อของตัวแปรที่มีข้อมูลที่ต้องการ คุณต้องจบบรรทัดด้วยตัวแปรด้วยการขึ้นบรรทัดใหม่ เพื่อให้รายการถัดไปเริ่มต้นในบรรทัดใหม่ และเลือกตัวเลือก - เขียนลงในไฟล์ใหม่หรือเพิ่มลงในไฟล์ที่มีอยู่ (หากเป็นไฟล์ใหม่ คุณสามารถกำหนดคำนำหน้าเพื่อสร้างชื่อไฟล์ที่ไม่ซ้ำกันได้)

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

คุณยังสามารถสร้างกฎเพื่อประมวลผลไฟล์แนบ - เพื่อบันทึกไฟล์แนบโดยอัตโนมัติ การประมวลผลขาเข้าจะดำเนินการตามการวิเคราะห์ส่วนหัวของข้อความ ซึ่งในกรณีของไฟล์แนบจะต้องมีคำว่า multipart มีฟังก์ชั่นพิเศษสำหรับการบันทึกไฟล์แนบลงดิสก์ - ตัวเขียนไฟล์แนบ ส่วนประกอบนี้ช่วยให้คุณสามารถระบุรายการตัวแปรที่จะวางชื่อไฟล์ที่บันทึกไว้รวมถึงโฟลเดอร์ที่จะบันทึก เพื่อป้องกันไม่ให้ไฟล์ที่มีชื่อเดียวกันปรากฏขึ้น คุณสามารถเพิ่มวันที่และเวลาให้กับชื่อไฟล์ได้ ข้อมูลนี้จะถูกนำไปใช้ในเวลาที่ไฟล์แนบถูกบันทึกลงดิสก์

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

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

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

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

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