Pagsusuri ng Advanced Email Parcer - software para sa pag-automate ng pagproseso ng email. Kinukuha namin ang mga titik mula sa koreo. Nagtatrabaho kami sa protocol ng IMAP


Sinusubukan ng lahat na gumagamit ng e-mail (at ito ang karamihan sa mga gumagamit ng Internet) na maglagay ng mga papasok na mensahe sa paraang maginhawang makipagtulungan sa kanila, upang mabilis at madaling mahanap nila ang mga kailangan nila. Upang gawin ito sa mailbox ay nililikha karagdagang mga folder at depende sa email client na ginamit, inaayos ang mga papasok na email sa isang paraan o iba pa. Kadalasan, ang pagproseso ay isinasagawa ayon sa mga postal address, ayon sa mga mailing list kung saan naka-subscribe ang user. Maaari mong ayusin ayon sa paksa ng mensahe, mga keyword. Ngunit ang lahat ng ito ay ginagawa sa mga programa sa mail Oh.

Ngunit ang kumpanya ng Tweek Marketing ay nagmumungkahi na gumamit ng isang katulad na pamamaraan, ngunit palawakin ang mga posibilidad ng aplikasyon nito. SA Advanced na solusyon Email Parcer(AEP) ang pagproseso ng mga papasok na sulat ay isinasagawa sa labas ng mail client, ngunit sa pamamagitan ng paggamit ng Mga kontrol ng ActiveX naging posible na isama ang programa sa anumang mga programa na sumusuporta sa teknolohiyang ito. Isinasagawa ang pagsasama gamit ang mga wika ng scripting batay sa teknolohiya ng Microsoft Active Scripting. Karamihan sa mga wika ng scripting ay maaaring gamitin, kabilang ang JScript at VBScript.

Sa program na ito maaari mong i-automate ang ilan mga nakagawiang operasyon. Halimbawa, maaari mong i-automate ang:

  • pagproseso ng mga form ng order at mga questionnaire na ipinadala sa pamamagitan ng email;
  • pagpuno ng mga database ng order;
  • pag-uuri at pag-redirect ng mga daloy ng mail;
  • pag-iipon ng mga mailing list, pagpapanatili ng iba't ibang istatistika;
  • paglikha ng mga awtomatikong serbisyo sa pagtugon, mga robot ng email;
  • i-backup ang mahahalagang mensahe sa email.

Ang programa ay maaaring gumana sa dalawang pangunahing mga mode - intermediary mode, kapag ang AEP ay gumaganap bilang isang intermediate processor sa interface mail server parehong client at sa collector mode, kung saan ang program ay nakapag-iisa na kumokonekta sa mail server at, depende sa mga setting account nagpoproseso ng mga mensahe at tinatanggal o iniiwan ang mga ito sa server (depende sa mga setting ng iyong account). Kapag kumokonekta bilang isang tagapamagitan, ang koneksyon ng mail client ay muling na-configure. Bagong setting katulad ng setting kapag nagtatrabaho sa mga filter ng spam, kapag ang kliyente ay kumokonekta hindi sa server, ngunit sa intermediate na processor. (Nagtataka ako kung paano i-install ang parehong parser at ang spam filter sa kasong ito?)

Ang mga mensaheng natanggap ng AEP ay pinoproseso gamit ang isang listahan ng mga panuntunang nabuo mula sa mga filter at mga bahagi ng pagproseso. Ang mga filter ay isinasagawa nang sunud-sunod at tinutukoy kung ang isang mensahe ay ipoproseso o hindi. Ang mga mensaheng iyon na nasa ilalim ng isa sa mga panuntunan ay inilalagay sa isang pila, ang pagproseso nito ay magsisimula pagkatapos ma-download ang lahat ng mga bagong mensahe mula sa mail server. Ang mga resulta ng pagproseso ay maaaring makita sa ibang pagkakataon sa log, na nagtatala ng lahat ng mga kaganapan.

Ang pagpoproseso ng mga bahagi ay nag-extract, nagbabago, at nag-iimbak ng partikular na data mula sa mga mensahe. Sa panahon ng pagproseso, posibleng mag-save ng data sa panlabas na mga file, paglipat sa iba pang mga programa, pagproseso gamit ang mga script, pagbabago gamit ang mga template. Upang makabuo ng mga panuntunan at mga bahagi, ginagamit ang isang espesyal na tagabuo, na nagbibigay din ng pag-debug batay sa data ng pagsubok (maaari silang mabuo sa anyo ng isang file o maaaring maisagawa ang pag-debug sa mga papasok na mensahe).

Ang pagkakasunud-sunod ng pagbuo ng panuntunan ay ipinapakita nang detalyado sa website ng developer sa anyo ng isang online na paglilibot. Nakakalungkot na hindi ito kasama sa dokumentasyon, kung gayon magiging mas simple ang pagtratrabaho at magiging mas madaling makabisado ang pag-setup. Gayunpaman, tingnan natin kung paano nabuo ang mga patakaran.

Halimbawa, kung paano lumikha ng isang mailing list batay sa mga papasok na mensahe. Gumawa tayo ng bagong panuntunan at bigyan ito ng pangalan. Ang unang bagay na kailangan mong gawin ay iproseso papasok na mensahe. Ipagpalagay namin na ang mga tumutugon lamang na nagpadala ng liham na may tiyak na pamagat ang kasama sa mailing list. Samakatuwid, ang unang filter ay kailangang i-configure upang pumili ng mga titik na may ganitong header. Magdagdag tayo ng filter (Subject Filter) sa panuntunan at sa mga katangian, sa field na Naglalaman, idagdag ang kinakailangang paksa.

Mula sa mga mensaheng iyon na pipiliin ng filter na ito, kinakailangang piliin ang pangalan at address ng nagpadala. Para gawin ito, ginagamit namin ang sampling function (Line Parcer). Idinagdag namin ito sa pamamagitan ng simpleng drag at drop gawa sa kahoy magagamit na mga function sa nabuong panuntunan. Dapat mayroong dalawang function: ang isa ay magpoproseso ng field na naglalaman ng pangalan ng nagpadala, ang pangalawa ay magpoproseso ng field kasama ang kanyang address (Sender Name at Sender Email). Ang napiling data ay ise-save sa mga variable na iyong tutukuyin. Ngayon kailangan nilang iligtas.

Para i-save ang natanggap na data na ginagamit namin Pag-andar ng file Manunulat. Idagdag natin ito sa panuntunan sa parehong paraan tulad ng mga nakaraang function. Ngayon ay kailangan mong i-configure ang mga katangian nito. Kabilang dito ang pangalan ng file kung saan isusulat ang impormasyon. Sa template para sa pagtatala ng impormasyon, ilalagay namin ang mga pangalan ng mga variable na naglalaman ng kinakailangang data. Kailangan mong tapusin ang isang linya na may mga variable na may babalik na karwahe sa susunod na entry nagsimula sa bagong linya. At piliin ang opsyon - sumulat sa bagong file o magdagdag sa isang umiiral na. (Kung bago ito, maaari kang magtalaga ng prefix para makabuo ng natatanging pangalan ng file.)

Ang natitira na lang ay suriin kung ang panuntunan ay inihanda nang tama. Upang gawin ito, lumikha ng mga file gamit ang pagsubok ng mga mensahe at sa pamamagitan ng control panel, i-download ang mga ito sa panuntunan (lalabas ang mga ito sa seksyong Mga Mensahe sa Debug). Maaari mo na ngayong patakbuhin ang proseso ng pagsubok at tingnan ang mga resulta sa log ng debug. Tutulungan ka ng mga resultang ito na malinaw na matukoy kung may mga error sa iyong panuntunan o wala. Kung walang mga error, maaaring gamitin ang panuntunan upang iproseso ang papasok na mail. Kung wala kang isang panuntunan, ngunit marami, ang parehong mensahe ay maaaring iproseso ng ilang mga panuntunan. Upang ibigay ang opsyong ito, lagyan ng check ang item na Magpatuloy Sa Susunod na Panuntunan sa mga property ng panuntunan.

Maaari ka ring lumikha ng isang panuntunan upang iproseso ang mga attachment - upang awtomatikong i-save ang mga ito. Ang papasok na pagproseso ay isinasagawa batay sa pagsusuri ng header ng mensahe, na sa kaso ng mga attachment ay dapat maglaman ng salitang multipart. Upang i-save ang mga attachment sa disk mayroong espesyal na function- Attachment Writer. Binibigyang-daan ka ng bahaging ito na tukuyin ang isang listahan ng mga variable kung saan ilalagay ang mga pangalan ng mga naka-save na file, pati na rin ang folder kung saan sila ise-save. Upang maiwasang lumabas ang mga file na may parehong pangalan, maaari mong idagdag ang petsa at oras sa pangalan ng file. Ang data na ito ay kukunin sa oras na ang mga attachment ay nai-save sa disk.

Bilang karagdagang pagproseso Maaari mong tukuyin kung aling mga file ang gusto mong i-save. Halimbawa, dapat itong mga file na may partikular na extension. Upang gawin ito, kakailanganin mong gamitin ang DeleteFile function ng FileSystemObject. Ang bagay na ito ay nilikha at ginagamit sa JScript Component code.

Maaari ka ring gumawa ng panuntunan para sa pagtugon sa mga kahilingan ng mga respondent. Halimbawa, kung humiling sila ng ilang dokumentasyon. Tukuyin natin na para dito ang paksa ng liham ay dapat magkaroon ng isang tiyak na format, at ang mga liham mismo ay dapat ipadala sa tiyak na address. Samakatuwid, una sa lahat, pinipili namin ang mga titik sa address na ito, at pagkatapos ay sinasala namin ang mga mensahe ayon sa kanilang paksa. (Upang mag-filter ayon sa address, gamitin ang Recipient Email Filter.)

Ang susunod na hakbang ay upang matukoy ang address ng nagpadala (katulad ng inilarawan sa itaas). Susunod, mula sa paksa ng mensahe, kailangan mong piliin ang pangalan ng dokumento na hinihiling ng user. Iniimbak namin ang data na ito sa mga variable na tinukoy namin. Upang magpadala ng tugon, gamitin ang SMTP Sender function (ngunit bago iyon, dapat mo ring suriin ang pangalan ng hiniling na dokumento para sa kawastuhan, na maaaring gawin gamit ang Simple Condition function).

Para sa pagpapaandar ng SMTP Sender, sa mga katangian nito ay ipahiwatig namin ang paksa ng liham at ang tekstong ipapadala. Ang dokumentasyong hiniling ng respondent ay ipapadala bilang isang attachment. Kung ang iyong user ay maaaring humiling ng iba't ibang dokumentasyon, pagkatapos ay upang ipadala ang bawat isa sa kanila kailangan mong lumikha ng sarili nitong function sa pagpoproseso. Magagawa ito sa pamamagitan ng pagkopya sa unang ginawang pagproseso at pagsasaayos ng mga katangian nito.

Ang mga ipinatupad na halimbawa ng paggamit ng programa ay ipinakita dito. Ngunit maaari kang makabuo ng iba pang mga pagpipilian. Ang programa ay may iba't ibang mga kakayahan at isang malawak na hanay ng mga pag-andar. Bagama't kumpara sa pag-set up ng mga humahawak ng mensahe sa mga mail client mas mahirap ang pagse-set up ng AEP, dahil dito ay mas nakatutok pa rin ito sa mga programmer, at hindi sa mga ordinaryong user. Ngunit dahil ang programa ay inilaan para gamitin sa isang kumpanya, malamang na magkakaroon ng ilan System Administrator sino ang makakapag-configure ng system na ito.

» PHP Sendmail Script

PHPSendMail

Upang magamit ang form, kailangan mo lamang ipasok ang iyong mga setting ng email at iyon na. Sa pangkalahatan, handa nang gamitin ang script at ang form na ito puna para sa isang site sa HTML na may PHP processor, perpekto para sa maliliit na site, business card site.

| Na-download: beses

Simpleng PHP Send Mail

Sa napakadaling PHP script na ito, ang iyong mga bisita sa website ay makakapagpadala ng mga email nang direkta sa iyo sa pamamagitan ng feedback form.

| Na-download: beses

PHP + AJAX script para sa pagpapadala ng mga form sa E-mail

Isang unibersal na script para sa pagpapadala ng data mula sa mga form patungo sa email. Ang script ay perpekto para sa mga site tulad ng Landing Page, mga site ng business card, atbp.

| Na-download: beses

Pangwakas na PHP Mailer na may captcha

Ipinapakita ng script ang form at, kapag pinunan mo ang mga kinakailangang field, nagpapadala ng mensahe sa iyong e-mail. Ang script ay may built-in na proteksyon laban sa mga robot: bago ipadala ang sulat kailangan mong maglagay ng captcha.

| Na-download: beses

GentleSource Form Mail

Mayroon kang dalawang pagpipilian na mapagpipilian: alinman sa user, gamit ang isang pag-redirect, makapunta sa Thank-You-Page kasama ang iyong text, o ang user ay ipinapakita ang impormasyon na matagumpay na naipadala ang mensahe.

| Na-download: beses

Micro Mailer

Hindi malaki ang Micro Mailer script ng PHP, na nagpapahintulot sa iyo at sa iyong mga bisita sa website na magpadala ng email sa sinumang tatanggap.

| Na-download: beses

Web4you-FM

Web4you-FM Pagpapadala ng sulat mula sa iyong website. Mga Tampok: 1 - Piliin ang tatanggap at kung ilan ang (mula 1 hanggang 4). 2 - Suriin kung ang form ay napunan nang tama. Para kanino. Pangalan, letra lang...

| v.1.0 | Na-download: beses

Light PHP Contact Form

Ang script para sa pagpapadala ng mail sa pamamagitan ng isang feedback form ay napakasimple na kahit na ang isang taong hindi alam ang PHP/HTML ay maaaring gumamit ng program nang walang kahirapan...

| Na-download: beses

DodosMail

Madaling gamitin ang DodosMail Pag-install ng PHP isang script na nagbibigay-daan sa iyong magpadala ng mga liham sa pamamagitan ng feedback form sa iyong website. Kailangan mo lang i-upload ang php file.

| v.2.5 | Na-download: beses

PHP Contact Form

Script Contact sa PHP Kasama sa form sumusunod na mga function: 1) spam prevention function. Dapat pumasok ang user code ng seguridad, kilala rin bilang captcha.

| Na-download: beses

TPCS Contact (email form)

Ang TPCS Contact script na ito ay magbibigay-daan sa iyong mga bisita na makipag-ugnayan sa iyo sa pamamagitan ng isang feedback form. Ang lahat ng impormasyon ay ipapadala sa iyo sa pamamagitan ng email.

| Na-download: beses

Feedback mailer

Inire-redirect ng mailer ng feedback ang lahat ng impormasyon mula sa form ng feedback sa iyong website nang direkta sa iyong email. Ang maliit na script na ito ay pinoproseso ang lahat ng mga kahilingan nang napakabilis.

| v.1.2 | Na-download: beses

Madaling PHP Contact Form

Simple pero secure na PHP script para sa pakikipag-ugnayan sa webmaster gamit ang isang feedback form na may code verification (CAPTCHA) upang maiwasan ang spam.

| v.2.1 | Na-download: beses

PHP Contact form (na may pag-verify ng larawan)

contact form, na pumipigil sa spam sa pamamagitan ng pagtatanong sa user na ilagay ang security code mula sa larawan. Kung gagamit ka ng ganap simpleng anyo feedback, maaga o huli ang mga spammer ay makakahanap ng paraan para awtomatikong magpadala sa iyo ng mga advertisement.

| Na-download: beses

CW3 Form Mail

Napakadaling i-install at i-configure ang script hitsura iyong site. Maaari mong baguhin ang laki ng form ng feedback at ang teksto ng mensahe na ipinapakita kapag matagumpay na naipadala ang liham.

| v.3.30 | Na-download: beses

ReCAPTCHA Contact Form

Ang libreng script na ito Baliktarin ang PHP komunikasyon, ginagawang mas madaling makatanggap ng mga sulat o feedback mula sa iyong mga bisita. Ang iyong bisita, kailangan mo lamang na punan ang lahat Mga kailangang punan makipag-ugnayan...

| v.1.4 | Na-download: beses

phMailer

Napakaganda ng phMailer simpleng PHP isang feedback script na sumusuporta sa file attachment function salamat sa built-in mail() function ng PHP language.


Email- ito ang pinakamahalagang tool para sa pagpapalitan ng impormasyon, at kung gagamitin mo ito para sa trabaho, malamang na nakatagpo ka ng isang sitwasyon: dumating ang isang sulat sa mail na naglalaman ng data na kinakailangan para sa pagproseso ng script. Pag-uusapan natin ang tungkol sa Yandex mail - sa artikulong ito ay ibabahagi ko sa iyo, mahal na mga mambabasa, ang aking karanasan kung paano makakuha ng mga titik mula sa isang mailbox, titingnan din natin ang pagpipilian kapag ang isang sulat ay naglalaman ng isang nakalakip na file - kung paano ito matutukoy at kalaunan ay i-download ito para sa karagdagang pagmamanipula dito.

Ako mismo ay nahaharap sa problemang ito medyo matagal na ang nakalipas, at pagkatapos, kahit na mayroon akong kaunting karanasan sa pagtatrabaho sa mga programa ng email ng Yandex, gumugol ako ng maraming oras at nerbiyos upang makamit ang kinakailangang resulta. Ang aking unang pagkakamali ay, tulad ng maraming mga web developer, nagsimula akong masinsinang maghanap para sa mga katulad na halimbawa sa Internet, ngunit hindi ginamit ang tulong ng Yandex mismo. Oo, mayroong kapaki-pakinabang na impormasyon doon, kahit na ito ay napakaliit, ngunit ito ay sapat na mahalaga upang isulat ang ganitong uri ng script (higit pa tungkol dito sa ibaba). Sa oras na iyon, kinakailangan na magsulat ng isang script, ang kakanyahan nito ay: isang liham ay ipinadala sa Yandex mail ng customer na may listahan ng presyo ng mga kalakal sa xls na format isang beses sa isang araw, kailangan itong iproseso (na-parse at ikumpara sa data mula sa database ng online store at, depende sa resulta, may dapat na i-update sa isang lugar, hindi pinagana o pinagana).

At ang unang bagay na gagawin namin bago isulat ang script ay balangkasin ang aming plano ng aksyon, na bubuo ng siyam na puntos:

  1. I-configure natin ang mail upang makakuha ng access sa pamamagitan ng mga mail protocol;
  2. Ibalangkas natin ang Istruktura ng PHP mga aplikasyon at magpasya sa pag-encode ng file;
  3. Kilalanin natin postal protocol IMAP at mga kakayahan nito;
  4. Kumonekta tayo sa Yandex mail gamit ang iyong account login at password at subaybayan ang mga error sa yugtong ito;
  5. Iproseso natin ang header ng liham;
  6. Tatanggap at ipoproseso namin ang katawan ng liham;
  7. Tumanggap at mag-save ng mga naka-attach na file;
  8. Isipin ang gawaing ginawa;
  9. Gumawa tayo ng mga konklusyon.

Ang paksa ay medyo malaki, ngunit susubukan kong ipakita ang lahat bilang compact at malinaw hangga't maaari. Magsimula na tayo.

Mga setting ng mail

Pumunta sa iyong mail at pumunta sa mga setting, tulad ng ipinapakita sa screenshot sa ibaba:



Ngayon kami ay nasa mga setting ng mail sa pamamagitan ng Mga protocol ng IMAP at POP3:


Dito, marami ang makakakita ng larawan tulad ng nasa larawan sa itaas, ngunit nakatagpo ako, higit sa isang beses, kapag ang pag-access ay hindi pinagana. Samakatuwid, kung ang iyong mga setting ay naiiba, suriin ang mga kahon tulad ng sa screenshot para sa amin, ang pangunahing bagay ay upang payagan ang pag-access sa pamamagitan ng IMAP protocol;

Ang istraktura ng aplikasyon at ang pag-encode nito

Sa halimbawang ito hindi tayo mag-iimbento kumplikadong istraktura application, dahil hindi ito kailangan, ngunit idaragdag lamang namin ang kinakailangan (nagtatrabaho ako sa editor ng Sublime Text):


  • tmp – ang folder kung saan kami magda-download ng mga naka-attach na file mula sa liham, kung mayroon man;
  • .htaccess – pag-set up ng server side, kung mayroon ka server ng apache;
  • functions.php – idadagdag namin ang aming mga function dito;
  • main.css – style file;
  • index.php – entry point ng application;

Gagamit kami ng UTF-8 encoding at samakatuwid ay agad na punan ang .htaccess file ng mga sumusunod na linya:

AddDefaultCharset utf-8 AddCharset utf-8 * CharsetSourceEnc utf-8 CharsetDefault utf-8

protocol ng IMAP

Pagbabalik sa unang punto, makikita mo na maaari ka ring magtrabaho sa Yandex mail sa pamamagitan ng POP3 protocol. Kaya bakit IMAP? Sa dalawa, ang IMAP ay ang mas bago at alternatibo sa POP3, samakatuwid ito ay may isang bilang ng mga pakinabang (maaari mong pag-aralan ang mga ito gamit ang Wikipedia), ngunit sa aming kaso ang pagpili ay naiimpluwensyahan lamang ng katotohanan na ito ay mas bago. Sa personal, wala akong nakikitang pagkakaiba kung ano ang gagamitin sa ilalim tiyak na gawain pagtanggap ng sulat. Kung sa ilang kadahilanan kailangan mong gamitin ang POP3 protocol, kung gayon ang lahat ng mga function na nalalapat sa IMAP ay gagana para dito.

Pagkonekta sa Yandex mail gamit ang IMAP protocol

Upang kumonekta sa mail, kailangan nating malaman ang tatlong parameter: mail login, password nito at mail server address. Kung walang mga problema sa dalawang mga parameter, kung gayon ang pangalawa ay matatagpuan sa tulong ng Yandex. Sumulat ako tungkol dito (ang problema na lumitaw para sa akin) sa itaas at nagsulat sa Internet ng maraming mga halimbawa kung saan ang pangatlong parameter ay tinukoy nang hindi tama at, isipin, na ang mga error ay nangyari na sa yugto ng koneksyon - ito ay, sa pinakamababa, hindi kasiya-siya . Hindi ako magpapatalo sa paligid at agad na magbibigay ng direktang link sa pahina ng Yandex - pag-set up ng mga email program. Narito kung ano mismo ang kailangan nating kumonekta:


Ngayon ay maaari kang direktang pumunta sa code mismo:

Header("Content-Type: 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)"; // Listahan ng mga uri ng file na isinasaalang-alang $mail_filetypes = array("MSWORD"); $koneksyon = imap_open($mail_imap, $mail_login, $mail_password); if(!$koneksyon)( echo("Error sa pagkonekta sa mail - ".$mail_login); exit; )else($msg_num = imap_num_msg($koneksyon); $mails_data = array(); for($i = 1; $ i<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Una sa lahat, tinukoy din namin ang pag-encode ng UTF-8 gamit ang header at hindi paganahin ang pagpapakita ng mga error. Ikinonekta namin ang functions.php file at tinukoy ang mga setting na tinalakay sa itaas. Sa $mail_filetypes array, tinukoy namin ang mga format ng file na kailangan namin. Napagpasyahan na gawin ito upang matanggal ang mga hindi kinakailangang basura at makatanggap ng mga partikular na file. Ang koneksyon sa mail ay ginawa gamit ang imap_open() function, na, kung matagumpay, ay nagbabalik ng IMAP stream, at kung hindi matagumpay, nagbabalik ng false (ngunit kung pinagana mo ang pagpapakita ng error, hindi ito ang kaso). Natapos namin ang pagtatrabaho sa mga stream gamit ang imap_close() function sa pamamagitan ng pagpasa dito ng indicator ng koneksyon. Sa pagitan ng dalawang function na ito ay mayroong regular na conditional statement.

Kung matagumpay ang koneksyon, gamit ang imap_num_msg() malalaman namin ang bilang ng mga titik sa mail at magdagdag ng array kung saan ilalagay namin ang lahat ng kinakailangang data mula sa stream. Susunod na darating ang isang cycle kung saan ang bawat titik ay ipoproseso ng numero nito (nagsisimula ang pagnunumero sa 1) nang hiwalay.

Pinoproseso ang header ng liham

Upang makuha ang header ng isang liham, kailangan mong gamitin ang imap_header() function, ang pangalawang parameter kung saan ay ang numero ng titik:

// Letter header $msg_header = imap_header($koneksyon, $i);

Sa yugtong ito, makakatanggap kami ng isang bagay kung saan kukunin namin ang data na kailangan namin, na ise-save ito sa $mails_data array. Narito ang isang halimbawa ng isa sa mga titik:

Ipinapakita ng screenshot na ito na ang lahat ng data ay nadoble, ngunit hindi ito gumaganap ng isang espesyal na papel, ginagamit namin kung ano ang mas maginhawa. Higit na mahalaga ay ang pag-encode ng linya ng paksa ng liham. Maaari itong maging anuman at ang sandaling ito ay dapat na kontrolin. Ang parehong sitwasyon ay nalalapat sa katawan ng liham at mga nakalakip na file.

$mails_data[$i]["oras"] = oras($msg_header->MailDate); $mails_data[$i]["date"] = $msg_header->MailDate; foreach($msg_header->to bilang $data)( $mails_data[$i]["to"] = $data->mailbox."@".$data->host; ) foreach($msg_header->mula bilang $ data)( $mails_data[$i]["from"] = $data->mailbox."@".$data->host; )

Nagse-save kami sa aming array: ang timestamp, ang petsa ng pagtanggap ng sulat, ang email ng tatanggap at ang nagpadala at magpatuloy sa pagtanggap ng paksa ng sulat. Upang gawin ito, kailangan muna nating magdagdag ng tatlong function sa functions.php file:

Function 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); ) function 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; ) ) ibalik ang $title )

Ang mga pangalan ay nagpapaliwanag sa sarili at sa tingin ko ito ay nagkakahalaga ng pagpapaliwanag lamang sa huling function. Ito ay nangangailangan ng isang naka-encode na string at gumagamit ng imap_mime_header_decode() upang i-decode ito, na nagreresulta sa isang hanay ng mga bagay, bawat isa ay may dalawang katangian: charset at text. Pagkatapos ang lahat ay simple: suriin ang pag-encode sa isang loop, i-convert ito sa UTF-8 at pagsamahin ang paksa sa isang solong header at ibalik ito.

Ngayon bumalik tayo sa index.php file at bunutin ang huling parameter:

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

Kinukumpleto nito ang pagproseso ng header ng email.

Paggawa gamit ang katawan ng liham

Patuloy kaming unti-unting bumubuo ng aming array gamit ang naprosesong data ng sulat at ngayon upang makuha ang katawan kailangan naming gumamit ng dalawang function:

// Email body $msg_structure = imap_fetchstructure($koneksyon, $i); $msg_body = imap_fetchbody($koneksyon, $i, 1);

Ang unang variable na $msg_structure ay naglalaman ng istraktura ng titik - ito ay isang bagay kung saan makikita mo ang masa kapaki-pakinabang na impormasyon, isang halimbawa ng bahagi ng bagay na ito ay ipinakita sa ibaba:

Ano ang mahalaga upang malutas ang aming problema:

  • uri - ang pangunahing uri ng katawan ng liham, depende sa kung ano ang dumating sa amin sa pamamagitan ng koreo, maaari itong mag-iba mula 0 hanggang 7 (bawat numero ay nagpapahiwatig ng sarili nitong uri ng nilalaman na matatagpuan sa katawan ng liham);
  • encoding – body transfer encoding, nag-iiba mula 0 hanggang 5 (0 - 7BIT, 1 - 8BIT, 2 - BINARY, 3 - BASE64, 4 - QUOTED-PRINTABLE, 5 - OTHER);
  • mga bahagi – isang hanay ng mga bahagi ng titik na tumutugma sa istruktura ng bagay sa mas mataas na antas.

Tingnan natin ang pag-aari ng mga bahagi. Ang unang bagay na kailangang sabihin ay na sa zero cell ng array na ito ay may impormasyong eksaktong katumbas ng teksto ng liham, at simula sa una - hanggang sa mga nakalakip na file. Gayundin, sa bawat bagay ang uri ay ipinahiwatig at sa mga parameter ang pag-encode ay ipinahiwatig nang tahasan at hindi malinaw.

Ang istraktura ng liham ay maaaring maging nested gaya ng ninanais, hindi bababa sa mayroon akong mga kaso kapag umabot ito sa apat o limang antas, kaya upang masira ito, tulad ng sinasabi nila, kakailanganin nating magsulat ng isang recursive function sa hinaharap.

Ang pangalawang function na imap_fetchbody() ay kumukuha ng isang partikular na bahagi ng mensahe, kadalasan sa naka-encode na anyo.

Ngayon magdagdag tayo ng variable kung saan ise-save natin ang naprosesong bersyon ng katawan ng liham:

$katawan = "";

Bumalik tayo sa functions.php file at magsulat ng recursive function:

Function recursive_search($structure)( $encoding = ""; if($structure->subtype == "HTML" || $structure->type == 0)( if($structure->parameters->attribute == " charset")( $charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure- >subtype); )else( if(isset($structure->parts))( return recursive_search($structure->parts); )else(if($structure->parameters->attribute == "charset")( $ charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype ) ) )

Ang recursive_search() function ay tumatagal ng isang parameter - ang istraktura ng liham, kung saan sunud-sunod nitong sinusuri ang mga katangian at nakakakuha ng tatlong parameter: encoding, charset, subtype. Ang exit point mula sa recursion ay ang kawalan ng mga bahagi ng ari-arian na may cell zero. Wala nang dapat ipaliwanag dito; sa tingin ko ay malinaw sa code kung ano ang nangyayari at kung paano.

Magdagdag tayo ng isa pang function para ma-convert ang katawan ng liham, na kakailanganin natin mamaya:

Function 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);

$recursive_data = recursive_search($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1)( $body = $msg_body; ) if($recursive_data["encoding"] == 4)( $body = structure_encoding($recursive_data["encoding"], $msg_body); if($recursive_data["encoding"] == 3)( $body = structure_encoding($recursive_data["encoding"], $msg_body); ) if($ recursive_data ["encoding"] == 2)( $body = structure_encoding($recursive_data["encoding"], $msg_body); ) if(!check_utf8($recursive_data["charset"]))( $body = convert_to_utf8($ recursive_data ["charset"], $msg_body )

Pagkatapos naming matanggap ang data mula sa recursion, unti-unti naming sinusuri ang transfer encoding at, depende dito, tawagan ang structure_encoding() function na may naaangkop na mga parameter. Sa huli may kondisyong operator Isinasaalang-alang namin na nagtatrabaho kami sa UTF-8 at kung pagkatapos ng lahat ng mga manipulasyon ay nakakuha kami ng ibang pag-encode, muli naming ie-encode ito.

Ito ay nananatiling gumuhit ng linya:

$mails_data[$i]["body"] = base64_encode($body);

Maaaring naglalaman ang katawan ng liham, tulad ng simpleng teksto, at HTML markup na may sariling mga istilo. Nag-encode kami sa BASE64 upang sa panahon ng visualization ay hindi magbago ang aming layout.

Naka-attach na mga file

Dito ay unti-unti na kaming nalalapit sa pagtatapos ng pagsulat ng aming aplikasyon:

// Mga naka-attach na file if(isset($msg_structure->parts))(for($j = 1, $f = 2; $j< count($msg_structure->mga bahagi); $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[; ]["attachs"][$j]["name"] = get_imap_title($msg_structure->parts[$j]->parameters->value); ["file"] = structure_encoding($msg_structure->parts[$j]->encoding, imap_fetchbody($koneksyon, $i, $f)); file_put_contents("tmp/".iconv("utf-8" , " cp1251", $mails_data[$i]["attachs"][$j]["name"]), $mails_data[$i]["attachs"][$j]["file"] ) ) )

Ang piraso na responsable para sa pagproseso ng nakalakip na file ay mas maliit, at ngayon - bakit eksakto ito. Ang prinsipyo ng pagtatrabaho sa isang file ay katulad ng pagtatrabaho sa katawan ng isang liham, tanging sinisimulan natin ang yugtong ito sa pamamagitan ng pagkakaroon nito sa array ng mga bahagi ng ari-arian. Huwag kalimutang i-filter ang mga hindi kailangan sa pamamagitan ng pagsuri sa listahan ng mga uri. Gamit ang simpleng file_put_contents() function, nai-save namin ang aming file sa aming server sa tmp folder.

Gusto kong makita ang resulta!

Sa proseso ng trabaho, nakabuo kami ng array na may $mails_data data, at para sa visualization ay direktang gaganahan namin ito. Sa artikulong ito gumamit ako ng test letter na nasa aking mail, tingnan natin kung ano ang nakuha natin sa huli:


Ito ay halos kung ano ang dapat na hitsura ng iyong array, sa kasamaang-palad, kailangan kong itago ang mga nilalaman ng file sa pamamagitan ng mga personal na dahilan. Ngayon ay lumipat tayo sa aming HTML markup:

Yandex Mail |<?php echo($mail_login);?>

Yandex Mail (Inbox) |

Bilang ng mga titik:

walang mga titik
$mail):?>
timestamp:
Petsa ng:
Para kanino:
mula kay:
Paksa:
Liham sa base64:
Mga naka-attach na file:
$attach):?>
Uri:
Sukat (sa bytes):
Pangalan:
katawan:


Hindi ako magdadagdag ng mga istilo dito, dahil hindi sila gumaganap ng isang espesyal na papel, sa huli:


At sa server sa tmp folder magkakaroon ka ng isang file.

Konklusyon

Matapos makumpleto ang lahat ng mga hakbang mula sa artikulo, makakamit mo ang ninanais na resulta, ngunit ang lahat ay hindi kasing simple ng maaaring tila - may mga pitfalls na kailangang isaalang-alang. Kapag nagsusulat ng isang script para sa isang tiyak na gawain, kailangan mong subaybayan ang pag-encode sa lahat ng mga yugto; Mahalaga rin na isaalang-alang na ang Yandex mail at ang kanilang dokumentasyon ay pana-panahong na-update, kaya maaaring lumitaw ang iba't ibang mga sub-item para sa pagtatrabaho sa mga programa ng mail. Iyon lang ang para sa akin, sana ay makita mong kapaki-pakinabang ang artikulong ito kapag nagtatrabaho sa isang mas mababang antas na bersyon ng Yandex mail.

Hindi makatanggap ng email na may kasamang attachment(
kung ang mail ay ipinadala kasama ang isang file - anumang file - pagkatapos ay mawawala ang teksto ng liham

tulungan mo ako please

Malinaw... kung ililipat mo ang mail mula sa Yandex patungo sa Yandex, gagana ang lahat...
uri ng figured ito out
ngunit hindi malinaw kung bakit ang script na ito ay hindi tumatanggap ng iba pang mga file bukod sa Word... mayroong isang linya na MSWORD sa tabi nito, na pinaghihiwalay ng isang kuwit, at naglalagay ng pdf at zhpg at png - ang Word lang ang nagbabasa at nagse-save ng normal.... isang bagay na tulad nito