Mapitio ya Advanced Email Parcer - programu ya kuchakata barua pepe kiotomatiki. Tunatoa barua kutoka kwa barua. Tunafanya kazi na itifaki ya IMAP


Kila mtu anayetumia barua-pepe (na hii ni watumiaji wengi wa Mtandao) anajaribu kuweka ujumbe unaoingia kwa njia ambayo ni rahisi kufanya kazi nao, ili waweze kupata haraka na kwa urahisi wale wanaohitaji. Kwa kusudi hili katika sanduku la barua zinaundwa folda za ziada na kulingana na mteja wa barua pepe anayetumiwa, barua pepe zinazoingia hupangwa kwa njia moja au nyingine. Mara nyingi, usindikaji unafanywa kulingana na anwani za posta, kulingana na orodha za barua ambazo mtumiaji amejiandikisha. Unaweza kupanga kwa mada ya ujumbe, maneno muhimu. Lakini yote haya yanafanywa ndani programu za barua Oh.

Lakini kampuni ya Masoko ya Tweek inapendekeza kutumia mpango sawa, lakini kupanua uwezekano wa matumizi yake. KATIKA Suluhisho la hali ya juu Barua pepe Parcer(AEP) usindikaji wa barua zinazoingia hufanywa nje ya mteja wa barua, lakini kwa kutumia Vidhibiti vya ActiveX ikawa inawezekana kuunganisha programu na mipango yoyote inayounga mkono teknolojia hii. Ujumuishaji unafanywa kwa kutumia lugha za uandishi kulingana na teknolojia ya Microsoft Active Scripting. Lugha nyingi za uandishi zinaweza kutumika, pamoja na JScript na VBScript.

Ukiwa na programu hii unaweza kubadilisha baadhi shughuli za kawaida. Kwa mfano, unaweza kufanya otomatiki:

  • usindikaji fomu na dodoso zilizotumwa kwa barua pepe;
  • kujaza hifadhidata za agizo;
  • kupanga na kuelekeza mtiririko wa barua;
  • kuandaa orodha za barua, kudumisha takwimu mbalimbali;
  • uundaji wa huduma za majibu ya kiotomatiki, roboti za barua pepe;
  • chelezo ujumbe muhimu wa barua pepe.

Programu inaweza kufanya kazi kwa njia mbili kuu - hali ya mpatanishi, wakati AEP inafanya kazi kama processor ya kati kwenye kiolesura. seva ya barua mteja na katika hali ya mtoza, ambayo programu inaunganishwa kwa kujitegemea na seva ya barua na, kulingana na mipangilio akaunti huchakata ujumbe na kufuta au kuwaacha kwenye seva (kulingana na mipangilio ya akaunti yako). Wakati wa kuunganisha kama mpatanishi, muunganisho wa mteja wa barua huwekwa upya. Mpangilio mpya sawa na mpangilio wakati wa kufanya kazi na vichungi vya barua taka, mteja anapounganisha si kwa seva, lakini kwa processor ya kati. (Nashangaa jinsi ya kusakinisha kichanganuzi na kichungi cha barua taka katika kesi hii?)

Ujumbe unaopokelewa na AEP huchakatwa kwa kutumia orodha ya sheria zinazoundwa kutoka kwa vichungi na vipengele vya usindikaji. Vichujio hutekelezwa kwa kufuatana na huamua kama ujumbe unapaswa kuchakatwa au la. Ujumbe huo unaoanguka chini ya moja ya sheria huwekwa kwenye foleni, usindikaji ambao huanza baada ya ujumbe wote mpya kupakuliwa kutoka kwa seva ya barua. Matokeo ya usindikaji yanaweza kutazamwa baadaye kwenye logi, ambayo inarekodi matukio yote.

Vipengee vya kuchakata huchota, kurekebisha na kuhifadhi data mahususi kutoka kwa ujumbe. Wakati wa usindikaji, inawezekana kuhifadhi data ndani faili za nje, kuhamisha kwa programu nyingine, usindikaji kwa kutumia scripts, kubadilisha kwa kutumia templates. Ili kuzalisha sheria na vipengele, mjenzi maalum hutumiwa, ambayo pia hutoa uharibifu kulingana na data ya mtihani (zinaweza kuzalishwa kwa namna ya faili au kufuta kunaweza kufanywa kwenye ujumbe unaoingia).

Mlolongo wa uundaji wa sheria unaonyeshwa kwa undani sana kwenye tovuti ya msanidi programu kwa njia ya ziara ya mtandaoni. Ni huruma kwamba haijajumuishwa kwenye nyaraka, basi itakuwa rahisi zaidi kufanya kazi nayo na itakuwa rahisi kusimamia usanidi. Walakini, wacha tuangalie jinsi sheria zinaundwa.

Kwa mfano, jinsi ya kuunda orodha ya barua pepe kulingana na ujumbe unaoingia. Wacha tuunde sheria mpya na tuipe jina. Jambo la kwanza unahitaji kufanya ni mchakato ujumbe unaoingia. Tutachukulia kuwa wale tu waliojibu ambao walituma barua yenye kichwa fulani ndio waliojumuishwa kwenye orodha ya wanaopokea barua pepe. Kwa hiyo, kichujio cha kwanza kitahitaji kusanidiwa ili kuchagua herufi zenye kichwa hiki. Hebu tuongeze kichujio (Kichujio cha Mada) kwa sheria na katika mali, katika Ina shamba, ongeza somo linalohitajika.

Kutoka kwa ujumbe huo ambao utachaguliwa na chujio hiki, ni muhimu kuchagua jina na anwani ya mtumaji. Ili kufanya hivyo, tunatumia kazi ya sampuli (Line Parcer). Tunaongeza kwa Drag rahisi na kuacha iliyotengenezwa kwa mbao vipengele vinavyopatikana kwenye kanuni iliyotengenezwa. Inapaswa kuwa na kazi mbili: moja itashughulikia shamba ambalo lina jina la mtumaji, pili itashughulikia shamba na anwani yake (Jina la Mtumaji na Barua pepe ya Mtumaji). Data iliyochaguliwa itahifadhiwa kwa vigezo unavyofafanua. Sasa wanahitaji kuokolewa.

Ili kuhifadhi data iliyopokelewa tunayotumia Utendaji wa faili Mwandishi. Wacha tuiongeze kwa sheria kwa njia sawa na kazi zilizopita. Sasa unahitaji kusanidi sifa zake. Hizi ni pamoja na jina la faili ambayo habari itaandikwa. Katika template ya kurekodi habari, tutaingiza majina ya vigezo vyenye data zinazohitajika. Unahitaji kumalizia mstari na vigeuzo na kurudi kwa gari ingizo linalofuata ilianza na mstari mpya. Na chagua chaguo - andika kwa faili mpya au ongeza kwa iliyopo. (Ikiwa ni mpya, unaweza kukabidhi kiambishi awali ili kuunda jina la kipekee la faili.)

Kinachobaki ni kuangalia ikiwa sheria imeandaliwa kwa usahihi. Ili kufanya hivyo, unda faili na ujumbe wa mtihani na kupitia jopo la kudhibiti, zipakue kwa sheria (zitaonekana katika sehemu ya Ujumbe wa Debug). Sasa unaweza kuendesha mchakato wa majaribio na kuona matokeo katika kumbukumbu ya utatuzi. Matokeo haya yatakusaidia kuamua kwa uwazi ikiwa kuna makosa katika sheria yako au la. Ikiwa hakuna makosa, basi sheria inaweza kutumika kushughulikia barua zinazoingia. Ikiwa huna utawala mmoja, lakini kadhaa, basi ujumbe huo unaweza kusindika na sheria kadhaa. Ili kutoa chaguo hili, angalia kipengee cha Endelea na Sheria Inayofuata katika sifa za sheria.

Unaweza pia kuunda sheria ya kuchakata viambatisho - kuvihifadhi kiotomatiki. Usindikaji unaoingia unafanywa kulingana na uchambuzi wa kichwa cha ujumbe, ambacho katika kesi ya viambatisho lazima iwe na neno multipart. Ili kuhifadhi viambatisho kwenye diski kuna kazi maalum- Mwandishi wa Viambatisho. Sehemu hii inakuwezesha kutaja orodha ya vigezo ambavyo majina ya faili zilizohifadhiwa zitawekwa, pamoja na folda ambayo watahifadhiwa. Ili kuzuia faili zilizo na jina moja zisionekane, unaweza kuongeza tarehe na wakati kwa jina la faili. Data hii itachukuliwa wakati viambatisho vinapohifadhiwa kwenye diski.

Kama usindikaji wa ziada Unaweza kutaja faili ambazo ungependa kuhifadhi. Kwa mfano, hizi lazima ziwe faili zilizo na kiendelezi fulani. Ili kufanya hivyo, utahitaji kutumia kazi ya DeleteFile ya FileSystemObject. Kipengee hiki kimeundwa na kutumika katika msimbo wa Sehemu ya JScript.

Unaweza pia kuunda sheria ya kujibu maombi ya waliojibu. Kwa mfano, ikiwa wanaomba nyaraka fulani. Hebu tuamue kwamba kwa hili somo la barua lazima liwe na muundo fulani, na barua zenyewe zinapaswa kutumwa anwani maalum. Kwa hiyo, kwanza kabisa, tunachagua barua kwa anwani hii, na kisha tunachuja ujumbe kwa mada yao. (Ili kuchuja kulingana na anwani, tumia Kichujio cha Barua Pepe za Mpokeaji.)

Hatua inayofuata ni kuamua anwani ya mtumaji (sawa na ile iliyoelezwa hapo juu). Ifuatayo, kutoka kwa mada ya ujumbe, unahitaji kuchagua jina la hati ambayo mtumiaji anaomba. Tunahifadhi data hii katika vigezo tunavyofafanua. Ili kutuma jibu, tumia kazi ya Mtumaji wa SMTP (lakini kabla ya hapo, lazima pia uangalie jina la hati iliyoombwa kwa usahihi, ambayo inaweza kufanywa kwa kutumia kazi ya Hali Rahisi).

Kwa kazi ya Mtumaji wa SMTP, katika mali zake tutaonyesha mada ya barua na maandishi ambayo yatatumwa. Hati zilizoombwa na mlalamikiwa zitatumwa kama kiambatisho. Ikiwa mtumiaji wako anaweza kuomba nyaraka tofauti, basi kutuma kila mmoja wao unahitaji kuunda kazi yake ya usindikaji. Hii inaweza kufanywa kwa kunakili usindikaji wa kwanza iliyoundwa na kurekebisha mali zake.

Mifano iliyotekelezwa ya kutumia programu iliwasilishwa hapa. Lakini unaweza kuja na chaguzi zingine. Programu ina uwezo tofauti kabisa na anuwai ya kazi. Ingawa ikilinganishwa na kusanidi vidhibiti vya ujumbe ndani wateja wa barua kuanzisha AEP ni ngumu zaidi, kwani hapa bado inalenga zaidi kwa watengenezaji wa programu, na sio kwa watumiaji wa kawaida. Lakini kwa kuwa programu imekusudiwa kutumiwa katika kampuni, labda kutakuwa na zingine Msimamizi wa Mfumo ni nani anayeweza kusanidi mfumo huu.

» Hati ya kutuma barua pepe ya PHP

PHPSendMail

Ili kutumia fomu, unahitaji tu kuingiza mipangilio yako ya barua pepe na ndivyo hivyo. Kwa ujumla, hati iko tayari kutumika na fomu hii maoni kwa tovuti katika HTML iliyo na kichakataji cha PHP, bora kwa tovuti ndogo, tovuti za kadi za biashara.

| Imepakuliwa: nyakati

PHP Rahisi Tuma Barua

Kwa hati hii RAHISI sana ya PHP, wanaotembelea tovuti yako wataweza kutuma barua pepe kwako moja kwa moja kupitia fomu ya maoni.

| Imepakuliwa: nyakati

Hati ya PHP + AJAX ya kutuma fomu kwa barua pepe

Hati ya jumla ya kutuma data kutoka kwa fomu hadi barua pepe. Hati ni bora kwa tovuti kama Ukurasa wa Kutua, tovuti za kadi ya biashara, nk.

| Imepakuliwa: nyakati

PHP Mailer Final na captcha

Hati huonyesha fomu na, unapojaza sehemu zinazohitajika, hutuma ujumbe kwa barua pepe yako. Hati ina ulinzi wa ndani dhidi ya roboti: kabla ya kutuma barua lazima uweke captcha.

| Imepakuliwa: nyakati

Barua pepe ya Fomu ya GentleSource

Una chaguo mbili za kuchagua: ama mtumiaji, kwa kutumia kuelekeza kwingine, afikie Ukurasa wa Asante-na maandishi yako, au mtumiaji ataonyeshwa taarifa kwamba ujumbe ulitumwa kwa ufanisi.

| Imepakuliwa: nyakati

Micro Mailer

Micro Mailer si kubwa Nakala ya PHP, ambayo hukuruhusu wewe na wanaotembelea tovuti yako kutuma barua pepe kwa mpokeaji yeyote.

| Imepakuliwa: nyakati

Web4you-FM

Web4you-FM Inatuma barua kutoka kwa tovuti yako. Vipengele: 1 - Chagua mpokeaji na wangapi watakuwa (kutoka 1 hadi 4). 2 - Hakikisha kuwa fomu imejazwa kwa usahihi. Kwa nani. Majina, herufi tu...

| v.1.0 | Imepakuliwa: nyakati

Fomu ya Mawasiliano ya PHP nyepesi

Hati ya kutuma barua kupitia fomu ya maoni ni rahisi sana hivi kwamba hata mtu ambaye hajui PHP/HTML anaweza kutumia programu bila shida...

| Imepakuliwa: nyakati

DodosMail

DodosMail ni rahisi kutumia Ufungaji wa PHP hati inayokuruhusu kutuma barua kupitia fomu ya maoni kwenye tovuti yako. Unahitaji tu kupakia faili ya php.

| v.2.5 | Imepakuliwa: nyakati

Fomu ya Mawasiliano ya PHP

Hati Mawasiliano ya PHP Fomu inajumuisha kazi zifuatazo: 1) kazi ya kuzuia barua taka. Mtumiaji lazima aingie nambari ya usalama, pia inajulikana kama captcha.

| Imepakuliwa: nyakati

Mawasiliano ya TPCS (fomu ya barua pepe)

Hati hii ya Mawasiliano ya TPCS itawaruhusu wageni wako kuwasiliana nawe kupitia fomu ya maoni. Taarifa zote zitatumwa kwako kwa barua pepe.

| Imepakuliwa: nyakati

Mtoa maoni

Mtumaji wa maoni huelekeza upya maelezo yote kutoka kwa fomu ya maoni kwenye tovuti yako moja kwa moja hadi kwa barua pepe yako. Hati hii ndogo huchakata maombi yote haraka sana.

| v.1.2 | Imepakuliwa: nyakati

Fomu ya Mawasiliano ya PHP rahisi

Rahisi lakini salama PHP hati ya kuwasiliana na msimamizi wa tovuti kwa kutumia fomu ya maoni yenye uthibitishaji wa msimbo (CAPTCHA) ili kuzuia barua taka.

| v.2.1 | Imepakuliwa: nyakati

Fomu ya Mawasiliano ya PHP (na uthibitishaji wa picha)

fomu ya mawasiliano, ambayo huzuia barua taka kwa kuuliza mtumiaji kuingiza msimbo wa usalama kutoka kwa picha. Ikiwa unatumia kabisa fomu rahisi maoni, mapema au baadaye watumaji taka watapata njia ya kukutumia matangazo kiotomatiki.

| Imepakuliwa: nyakati

Barua ya Fomu ya CW3

Hati ni rahisi sana kusakinisha na kusanidi mwonekano tovuti yako. Unaweza kubadilisha ukubwa wa fomu ya maoni na maandishi ya ujumbe ambayo yanaonyeshwa barua inapotumwa kwa ufanisi.

| v.3.30 | Imepakuliwa: nyakati

Fomu ya Mawasiliano ya reCAPTCHA

Hati hii ya bure PHP kinyume chake mawasiliano, hurahisisha zaidi kupokea barua au maoni kutoka kwa wageni wako. Mgeni wako, unahitaji tu kujaza kila kitu mashamba yanayohitajika mawasiliano...

| v.1.4 | Imepakuliwa: nyakati

phMailer

phMailer ni sana PHP rahisi hati ya maoni inayoauni utendakazi wa kiambatisho cha faili kutokana na kazi ya barua pepe iliyojengewa ndani ya lugha ya PHP.


Barua pepe- hii ndiyo chombo muhimu zaidi cha kubadilishana habari, na ikiwa unatumia kwa kazi, labda umekutana na hali: barua inakuja kwenye barua iliyo na data muhimu kwa usindikaji na script. Tutazungumza juu ya barua ya Yandex - katika nakala hii nitashiriki nanyi, wasomaji wapendwa, uzoefu wangu wa jinsi ya kupata barua kutoka kwa sanduku la barua, tutaangalia pia chaguo wakati barua ina faili iliyoambatanishwa - jinsi ya kuigundua. na mwishowe uipakue kwa udanganyifu zaidi nayo.

Mimi mwenyewe nilikabiliwa na tatizo hili muda mrefu uliopita, na kisha, ingawa nilikuwa na uzoefu mdogo wa kufanya kazi na programu za barua pepe za Yandex, nilitumia muda mwingi na mishipa kufikia matokeo yaliyohitajika. Kosa langu la kwanza lilikuwa kwamba, kama watengenezaji wengi wa wavuti, nilianza kutafuta sana mifano kama hiyo kwenye mtandao, lakini sikutumia msaada wa Yandex yenyewe. Ndio, kuna habari muhimu huko, ingawa ni ndogo sana, lakini ni muhimu kutosha kuandika aina hii ya maandishi (zaidi juu ya hii hapa chini). Wakati huo, ilikuwa ni lazima kuandika hati, ambayo kiini chake kilikuwa: barua ilitumwa kwa barua ya mteja ya Yandex na orodha ya bei ya bidhaa. muundo wa xls mara moja kwa siku, ilibidi kuchakatwa (kuchanganuliwa na kulinganishwa na data kutoka kwa hifadhidata ya duka la mtandaoni na, kulingana na matokeo, kitu kinapaswa kusasishwa mahali fulani, kuzima au kuwezeshwa).

Na jambo la kwanza tutakalofanya kabla ya kuandika hati ni kuelezea mpango wetu wa utekelezaji, ambao utakuwa na pointi tisa:

  1. Wacha tusanidi barua ili kupata ufikiaji kupitia itifaki za barua;
  2. Hebu tuangazie Muundo wa PHP maombi na kuamua juu ya usimbuaji faili;
  3. Hebu tujue itifaki ya posta IMAP na uwezo wake;
  4. Hebu tuunganishe barua ya Yandex kwa kutumia kuingia kwa akaunti yako na nenosiri na kufuatilia makosa katika hatua hii;
  5. Wacha tuchakate kichwa cha barua;
  6. Tutapokea na kushughulikia mwili wa barua;
  7. Pokea na uhifadhi faili zilizoambatishwa;
  8. Taswira ya kazi iliyofanywa;
  9. Hebu tufanye hitimisho.

Mada hiyo ni nyepesi, lakini nitajaribu kuwasilisha kila kitu kwa uwazi na kwa uwazi iwezekanavyo. Tuanze.

Mpangilio wa barua

Nenda kwa barua yako na uende kwa mipangilio, kama inavyoonyeshwa kwenye picha ya skrini hapa chini:



Sasa tuko kwenye mipangilio ya barua kupitia Itifaki za IMAP na POP3:


Hapa, wengi wataona picha kama kwenye picha hapo juu, lakini nimekutana, zaidi ya mara moja, wakati ufikiaji umezimwa. Kwa hivyo, ikiwa mipangilio yako ni tofauti, angalia visanduku kama kwenye picha ya skrini; kwetu, jambo kuu ni kuruhusu ufikiaji kupitia itifaki ya IMAP.

Muundo wa maombi na usimbuaji wake

Katika mfano huu hatutazua muundo tata maombi, kwani haihitajiki, lakini tutaongeza tu kile kinachohitajika (Ninafanya kazi katika hariri ya maandishi ya Sublime):


  • tmp - folda ambayo tutapakua faili zilizounganishwa kutoka kwa barua, ikiwa ipo;
  • .htaccess - kusanidi upande wa seva, ikiwa unayo seva ya apache;
  • function.php - tutaongeza kazi zetu hapa;
  • main.css - faili ya mtindo;
  • index.php - mahali pa kuingilia maombi;

Tutatumia usimbaji wa UTF-8 na kwa hivyo kujaza faili ya .htaccess mara moja na mistari ifuatayo:

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

Itifaki ya IMAP

Kurudi kwenye hatua ya kwanza, unaweza kuona kwamba unaweza pia kufanya kazi na barua ya Yandex kupitia itifaki ya POP3. Kwa hivyo kwa nini IMAP? Kati ya hizo mbili, IMAP ni mpya na mbadala kwa POP3, kwa hivyo ina faida kadhaa (unaweza kuzisoma kwa kutumia Wikipedia), lakini kwa upande wetu uchaguzi uliathiriwa tu na ukweli kwamba ni mpya zaidi. Binafsi, sioni tofauti kubwa ya kutumia chini kazi maalum kupokea barua. Ikiwa kwa sababu fulani unahitaji kutumia itifaki ya POP3, basi kazi zote zinazotumika kwa IMAP zitaifanyia kazi.

Kuunganisha kwa barua ya Yandex kwa kutumia itifaki ya IMAP

Ili kuunganisha kwa barua, tunahitaji kujua vigezo vitatu: kuingia kwa barua, nenosiri lake na anwani ya seva ya barua. Ikiwa hakuna matatizo na vigezo viwili, basi ya pili inaweza kupatikana kwa msaada wa Yandex. Niliandika juu ya hili (shida iliyotokea kwangu) hapo juu na kuandika kwenye mtandao mifano mingi ambapo paramu ya tatu imeainishwa vibaya na, fikiria, kwamba makosa yanatokea tayari kwenye hatua ya unganisho - hii ni, kwa kiwango cha chini, haifurahishi. . Sitapiga kichaka na mara moja nitatoa kiunga cha moja kwa moja kwa ukurasa wa Yandex - kuanzisha programu za barua pepe. Hapa ndivyo tunahitaji kuunganisha:


Sasa unaweza kwenda moja kwa moja kwa nambari yenyewe:

Kichwa("Aina ya Maudhui: maandishi/html; charset=utf-8"); kuripoti_kosa(0); need_once("functions.php"); $mail_login = "yandex_mail"; $mail_password = "mail_password"; $mail_imap = "(imap.yandex.ru:993/imap/ssl)"; // Orodha ya aina za faili zilizozingatiwa $mail_filetypes = safu("MSWORD"); muunganisho wa $ = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection)( echo("Hitilafu ya kuunganisha kwa barua - ".$mail_login); toka; ) vinginevyo( $msg_num = imap_num_msg($connection); $mails_data = safu(); kwa($i = 1; $ i<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Kwanza kabisa, tunataja kwa kuongeza usimbuaji wa UTF-8 kwa kutumia kichwa na kuzima onyesho la makosa. Tunaunganisha faili ya function.php na kutaja mipangilio iliyojadiliwa hapo juu. Katika safu ya $mail_filetypes tunabainisha fomati za faili tunazohitaji. Iliamuliwa kufanya hivyo ili kuondoa takataka zisizohitajika na kupokea faili maalum. Muunganisho kwa barua unafanywa kwa kutumia imap_open() chaguo za kukokotoa, ambazo, ikifaulu, hurejesha mkondo wa IMAP, na isipofaulu, hurejesha uwongo (lakini ukiwezesha onyesho la hitilafu, hii sivyo). Tunamaliza kufanya kazi na mito kwa kutumia imap_close() kazi kwa kuipitisha kiashiria cha uunganisho. Kati ya kazi hizi mbili kuna taarifa ya kawaida ya masharti.

Ikiwa muunganisho umefanikiwa, kwa kutumia imap_num_msg() tunapata idadi ya barua kwenye barua na kuongeza safu ambayo tutaweka data zote muhimu kutoka kwa mkondo. Inayofuata inakuja mzunguko ambao kila herufi itachakatwa na nambari yake (idadi inaanza kutoka 1) kando.

Inachakata kichwa cha barua

Ili kupata kichwa cha barua, unahitaji kutumia imap_header() kazi, parameta ya pili ambayo ni nambari ya barua:

// Kijajuu cha barua $msg_header = imap_header(muunganisho wa $, $i);

Katika hatua hii, tutapokea kitu ambacho tutatoa data tunayohitaji, na kuihifadhi katika safu ya data ya $mails. Hapa kuna mfano wa moja ya barua:

Picha hii ya skrini inaonyesha kwamba data zote zimerudiwa, lakini hii haina jukumu maalum, tunatumia kile ambacho ni rahisi zaidi. Muhimu zaidi ni usimbaji wa mstari wa somo la barua. Inaweza kuwa chochote na wakati huu lazima udhibitiwe. Hali hiyo inatumika kwa mwili wa barua na faili zilizounganishwa.

$mails_data[$i]["time"] = 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 $ data)( $mails_data[$i]["from"] = $data->boxbox."@".$data->host; )

Tunahifadhi katika safu yetu: muhuri wa muda, tarehe ya kupokea barua, barua pepe ya mpokeaji na mtumaji na kuendelea kupokea mada ya barua. Ili kufanya hivyo, tunahitaji kwanza kuongeza vitendaji vitatu kwenye faili ya function.php:

Kazi check_utf8($charset)( if(strtolower($charset) != "utf-8")( return false; ) return true; ) kitendakazi convert_to_utf8($in_charset, $str)( return iconv(strtolower($in_charset), "utf-8", $str); ) kitendakazi 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; ) ) rudisha $title; )

Majina yanajieleza na nadhani inafaa kuelezea kazi ya mwisho tu. Inachukua mfuatano uliosimbwa na hutumia imap_mime_header_decode() ili kusimbua, na kusababisha safu ya vitu, kila moja ikiwa na sifa mbili: charset na maandishi. Kisha kila kitu ni rahisi: kuangalia encoding katika kitanzi, kubadilisha kwa UTF-8 na kuunganisha mada kwenye kichwa kimoja na kuirejesha.

Sasa hebu turejee kwenye faili ya index.php na tutoe kigezo cha mwisho:

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

Hii inakamilisha uchakataji wa kichwa cha barua pepe.

Kufanya kazi na mwili wa barua

Tunaendelea kuunda safu yetu hatua kwa hatua na data iliyochakatwa ya barua na sasa ili kupata mwili tunahitaji kutumia kazi mbili:

// Mwili wa barua pepe $msg_structure = imap_fetchstructure($connection, $i); $msg_body = imap_fetchbody(muunganisho wa $, $i, 1);

Tofauti ya kwanza $msg_structure ina muundo wa herufi - hii ni kitu ambacho unaweza kupata wingi habari muhimu, mfano wa sehemu ya kitu hiki umewasilishwa hapa chini:

Ni nini muhimu kutatua shida yetu:

  • aina - aina ya msingi ya mwili wa barua, kulingana na kile kinachokuja kwetu kwa barua, inaweza kutofautiana kutoka 0 hadi 7 (kila namba inaonyesha aina yake ya maudhui ambayo iko katika mwili wa barua);
  • usimbaji - usimbaji wa kuhamisha mwili, hutofautiana kutoka 0 hadi 5 (0 - 7BIT, 1 - 8BIT, 2 - BINARY, 3 - BASE64, 4 - QUOTED-PRINTABLE, 5 - OTHER);
  • sehemu - safu ya sehemu za barua zinazofanana na muundo wa kitu katika ngazi ya juu.

Wacha tuangalie kwa karibu mali ya sehemu. Jambo la kwanza ambalo linahitaji kusema ni kwamba katika seli ya sifuri ya safu hii kuna habari inayofanana hasa na maandishi ya barua, na kuanzia ya kwanza - kwa faili zilizounganishwa. Pia, katika kila kitu aina imeonyeshwa na katika vigezo encoding inaonyeshwa kwa uwazi na kwa uwazi.

Muundo wa barua unaweza kuwekwa kama unavyotaka, angalau nilikuwa na kesi wakati ilifikia viwango vinne au tano, kwa hivyo ili kuivunja, kama wanasema, tutahitaji kuandika kazi ya kujirudia katika siku zijazo.

Chaguo za kukokotoa za pili imap_fetchbody() huchota sehemu mahususi ya ujumbe, mara nyingi katika fomu iliyosimbwa.

Sasa hebu tuongeze kigezo ambacho tutahifadhi toleo lililochakatwa la mwili wa barua:

$mwili = "";

Wacha turudi kwenye faili ya function.php na tuandike kazi ya kujirudia:

Function recursive_search($structure)( $encoding = ""; if($structure->subtype == "HTML" || $structure->aina == 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); ) ))

Kazi ya recursive_search() inachukua kigezo kimoja - muundo wa herufi, ambapo inakagua mali kwa mpangilio na kupata vigezo vitatu: encoding, charset, subtype. Njia ya kutoka kutoka kwa urejeshaji ni kutokuwepo kwa mali ya sehemu na sifuri ya seli. Hakuna zaidi ya kuelezea hapa; nadhani ni wazi kutoka kwa kanuni kile kinachotokea na jinsi gani.

Wacha tuongeze kazi moja zaidi ili kubadilisha mwili wa barua, ambayo tutahitaji baadaye:

Usimbaji wa muundo_wa kazi($usimbaji, $msg_body)( switch((int) $encoding)( kesi ya 4: $body = imap_qprint($msg_body); break; kesi ya 3: $body = imap_base64($msg_body); break; kesi 2: $body = imap_binary($msg_body); break; case 1: $body = imap_8bit($msg_body); break; case 0: $body = $msg_body; break; default: $body = ""; break; ) rudisha $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);)

Baada ya kupokea data kutoka kwa urejeshaji, tunaangalia hatua kwa hatua usimbaji wa uhamishaji na, kulingana na hili, piga kazi ya muundo_encoding() na vigezo vinavyofaa. Katika mwisho mwendeshaji wa masharti Tunazingatia kuwa tunafanya kazi katika UTF-8 na ikiwa baada ya upotoshaji wote tutapata usimbaji tofauti, tutausimba upya.

Inabakia kuchora mstari:

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

Mwili wa barua unaweza kuwa na, kama maandishi wazi, na alama za HTML na mitindo yake. Tunasimba katika BASE64 ili wakati wa taswira mpangilio wetu hautabadilika.

Faili zilizoambatishwa

Hapa tunakaribia mwisho wa kuandika maombi yetu hatua kwa hatua:

// Faili zilizoambatishwa if(isset($msg_structure->parts))( for($j = 1, $f = 2; $j< count($msg_structure->sehemu); $j++, $f++)( ikiwa(katika_array($msg_structure->sehemu[$j]->aina ndogo, $mail_filetypes))( $mails_data[$i]["attachs"][$j]["type"] = $msg_structure->sehemu[$j]->aina ndogo; $mails_data[$i]["attachs"][$j]["size"] = $msg_structure->sehemu[$j]->baiti; $mails_data[ $i]["attachs"][$j]["name"] = get_imap_title($msg_structure->sehemu[$j]->vigezo->thamani); $mails_data[$i]["attachs"][$ j]["faili"] = 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"]);) ))

Kipande kinachohusika na usindikaji faili iliyoambatanishwa ni ndogo zaidi, na sasa - kwa nini hasa hii ni hivyo. Kanuni ya kufanya kazi na faili ni sawa na kufanya kazi na mwili wa barua, tu tunaanza hatua hii kwa kuwa nayo katika sehemu za safu ya mali. Usisahau kuchuja zisizo za lazima kwa kuangalia orodha ya aina. Kwa kutumia kazi rahisi ya file_put_contents(), tunahifadhi faili yetu kwenye seva yetu kwenye folda ya tmp.

Nataka kuona matokeo!

Katika mchakato wa kazi, tumeunda safu na data ya $mails_data, na kwa taswira tayari tutafanya kazi nayo moja kwa moja. Katika nakala hii nilitumia barua ya jaribio ambayo ilikuwa kwenye barua yangu, wacha tuone tulipata nini mwishoni:


Hivi ndivyo safu yako inavyopaswa kuonekana, kwa bahati mbaya, ilibidi nifiche yaliyomo kwenye faili na sababu za kibinafsi. Sasa tuendelee kwenye yetu Alama ya HTML:

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

Barua ya Yandex (Kikasha) |

Idadi ya barua:

hakuna barua
$mail):?>
Muhuri wa saa:
Tarehe ya:
Kwa nani:
Kutoka:
Mada:
Barua katika msingi64:
Faili zilizoambatishwa:
$ ambatisha):?>
Aina:
Ukubwa (katika baiti):
Jina:
Mwili:


Sitaongeza mitindo hapa, kwani hawana jukumu maalum, mwishowe:


Na kwenye seva kwenye folda ya tmp utakuwa na faili.

Hitimisho

Baada ya kukamilisha hatua zote kutoka kwa kifungu, utafikia matokeo unayotaka, lakini kila kitu sio rahisi kama inavyoweza kuonekana - kuna mitego ambayo inahitaji kuzingatiwa. Wakati wa kuandika maandishi kwa kazi maalum, unahitaji kufuatilia usimbuaji katika hatua zote; barua zinaweza kutoka kwa akaunti tofauti za barua pepe, ambayo kila moja inaweza kuwa na nuances yake mwenyewe. Pia ni muhimu kuzingatia kwamba barua ya Yandex na nyaraka zao zinasasishwa mara kwa mara, hivyo vitu vidogo mbalimbali vinaweza kuonekana kwa kufanya kazi na programu za barua. Hiyo yote ni kwangu, natumaini utapata makala hii muhimu wakati wa kufanya kazi na toleo la chini la barua ya Yandex.

Haiwezi kupokea barua pepe iliyo na kiambatisho(
ikiwa barua imetumwa na faili - faili yoyote - basi maandishi ya barua hupotea

nisaidie tafadhali

Ni wazi ... ukihamisha barua kutoka kwa Yandex hadi Yandex, basi kila kitu kitafanya kazi ...
aina ya figured it nje
lakini haijulikani ni kwa nini hati hii haikubali faili zingine kando na Neno... kuna mstari MSWORD karibu nayo, ikitenganishwa na koma, na kuweka pdf na zhpg na png - Neno pekee husoma na kuhifadhi kawaida.... kitu kama hiki