Meny
Är gratis
checka in
den huvudsakliga  /  Multimedia / Dra ut brev från posten. Vi arbetar med IMAP-protokollet

Dra ut bokstäver från posten. Vi arbetar med IMAP-protokollet

Ett av de möjliga IMAP-applikationsfunktionerna är skapandet av en postdemon, som hanterar abonnemangs- och överföringsanvändarna från din e-postlista. För att implementera denna uppgift används vanligtvis två metoder i mailinglocks. Den första tyder på att användaren ska gå till en viss sida och bekräfta dess handlingar, det andra kräver att ett brev skickas. Den andra kräver också att bearbetningsskriptet regelbundet lanserades Cron Daemon? OM. På grund av detta är det inte så populärt som första sättet.

Men som du kan se använder de mest allvarliga nyhetsbrev den andra metoden. Därför, om du har möjlighet att använda crond, använd den.

Det är faktiskt inte så svårt att förstå funktionerna. Den person som brukade arbeta för RNR, utan svårighet, hur man arbetar med dem. Vissa svårigheter kan uppstå med analysen av rubrikerna av bokstäver som kommer att bearbeta skriptet.

Algoritmen för skriptets arbete är lätt. Demonen etablerar en anslutning till postservern och kontrollerar närvaron av bokstäver på den. Om det inte finns några bokstäver, stoppar manusarbetet.
Om det finns bokstäver finns det en parsing av rubrikerna i första bokstaven. Du kan titta på fältet från och ämnesområden. Om ämnesfältet innehåller ett av två tillåtna rubrikalternativ (prenumeration eller inspelning), blir rekordet som motsvarar fältet från fältet antingen aktiv (bekräftad) eller borttagen från bordet. I båda fallen skickas den adress som anges i fältet från fält till lämplig anmälan om skriptåtgärden. Därefter är brevet markerat för borttagning. Om ämnet inte innehåller tillåtna ämnen skickas en felmeddelande, och brevet är också markerat för borttagning. Då flyttas skriptet till nästa bokstav.
Efter att ha avslutat analysen av alla bokstäver, rensar han lådan.

Jag kommer inte att däcka läsaren i blockdiagram, så vi kommer omedelbart att gå vidare till affärer. IMAP_OPEN-funktionen används för att öppna rutan. Eftersom PNP stöder flera protokoll, är det nödvändigt att uttryckligen ange vilket protokoll som används för att fungera med lådan. I vårt fall är det POP3 till 110 port (standard). Vi tilldelar resultatet av skriptet till $ my_box-skriptet.


I framtiden kommer du att se att denna variabel kommer att användas på alla IMAP-funktioner. Tryck sedan på rutan för bokstäver. Verifieringen utför funktionen imap_num_msg.

$ n \u003d imap_num_msg ($ my_box);

Som ett resultat kommer variabeln $ n att innehålla antalet bokstäver i rutan. Numret som det kan vara antingen mer noll eller lika med det (om lådan är tom).
Om det finns bokstäver, sedan i underkroppen, utför vi analysen av bokstäver, vilket konsekvent ökar bokstavsnumret per enhet. Observera att första bokstaven i rutan har nummer 0, som och det första elementet i matrisen.
För att öka brevnumret, tilldela ett variabelt $ m-värde 0, och sedan under cykelventiler ökar vi det per enhet $ M ++.

För att analysera rubrikerna av intresse för oss är två funktioner tillräckligt: \u200b\u200bimap_header och imap_fetch_overview. För att utföra var och en av dem, förutom lådan, måste du ange bokstavsnumret. I vårt fall kommer det att vara lika med $ M-variabeln.

Imap_header returnerar ett objekt som ett resultat av utförandet som innehåller uttömmande information om brevets rubrik. Bland annat innehåller det här objektet en rad av, som innehåller fyra värden. Detta är personligt, ADL, brevlåda och värd. Vi är bara intresserade av brevlåda och värd. Att ersätta dem får vi den adress från vilken brevet skickades.


$ H \u003d $ h -\u003e från;
a.
foreach ($ h som $ k \u003d\u003e $ v) (
$ Mailbox \u003d $ v -\u003e brevlåda;
$ Värd \u003d $ v -\u003e värd;
$ Personal \u003d $ v -\u003e Personlig;
$ email \u003d $ brevlåda. ? @ ¬. $ Värd;

IMAP_FETCH_OVERVIEW - Låter oss veta ämnet i brevet. För samma ändamål skulle det vara möjligt att använda imap_header men för ett nummer skäl till det, ibland kanske det inte fungerar. Från den matris som returnerar den här funktionen behöver vi bara ämnet fält


Foreach ($ s som $ k \u003d\u003e $ v) (
$ SUBJ \u003d $ v -\u003e Ämne;
}

Vidare reduceras våra handlingar för att dra ut e-post från basen, och om du har det där, markera hela strängen med den här posten som "verifierad" eller radera. Antag att efter att ha fyllt i postformuläret på webbplatsen är abonnenten tilldelad status 0, och efter att ha bekräftat prenumerationen ändras den till 1.

om ($ SUBJ \u003d\u003d "Prenumerera") (
mysql_query ( "Uppdatera prenumerera Stat \u003d 1 var mail \u003d $ my_email");

}
mysql_query ( "Ta bort från prenumerera var Email \u003d $ my_Email");
$ del \u003d imap_delete ($ my_box, $ m);
}
Annars (
$ del \u003d imap_delete ($ my_box, $ m);
}

Som nämnts ovan, efter att ha utfört alla åtgärder, rensar skriptet rutan.


Detta enklaste program, Endast en demonstration som du inte kan skriva, inte bara dynamiskt föränderliga webbplatser, men de tjänster som användaren inte är synliga kan skrivas. Naturligtvis, när det gäller att skriva skript för skal, är RNR inte tillämplig, till skillnad från konkurrent Perl, men ändå ...

Lista hela programmet med undantag för anslutningsparametrarna med basen (db.php):

inkludera "db.php";
$ My_box \u003d imap_open ("(you.pop.host/pop3:110)", "Logga in", "Lösenord");
$ n \u003d imap_num_msg ($ my_box);
$ m \u003d 0;
$ add_text \u003d "

Tack för att du bekräftar din prenumeration ";
$ add_sbj \u003d "Du har lagt till!" ;
$ Del_text \u003d "

Tyvärr men den här brevlådan används
Bara för att administrera mailing ";
$ err_sbj \u003d "fel";
$ Rubriker \u003d. "Från: Prenumerera robot

X-Mailer: PHP4

Innehållstyp: Text / Plain; Charset \u003d UTF-8
" ;
Om ($ n! \u003d 0) (
Medan ($ M ++< $n ) {
$ H \u003d imap_header ($ my_box, $ m);
$ s \u003d imap_fetch_overview ($ my_box, $ m);
$ H \u003d $ h -\u003e från;
Foreach ($ h som $ k \u003d\u003e $ v) (
$ Mailbox \u003d $ v -\u003e brevlåda;
$ Värd \u003d $ v -\u003e värd;
$ Personal \u003d $ v -\u003e Personlig;
$ email \u003d $ brevlåda. "@". $ Värd;
$ My_email \u003d mysql_escape_string ($ email);
}
Foreach ($ s som $ k \u003d\u003e $ v) (
$ SUBJ \u003d $ v -\u003e Ämne;
}
Om ($ SUBJ \u003d\u003d "Prenumerera") (
mysql_query ( "Uppdatera tabelluppsättning stat \u003d 1 var mail \u003d $ my_email");
// Skriv ut mysql_error ();
$ del \u003d imap_delete ($ my_box, $ m);
mail ($ email, $ add_sbj, $ add_text, $ rubriker);
}
ELSEIF ($ SUBJ \u003d\u003d "unsubscribe") (
mysql_query ( "Ta bort från bordet där email \u003d $ my_email");
$ del \u003d imap_delete ($ my_box, $ m);
mail ($ email, $ del_SBJ, $ del_text, $ rubriker);
}
Annars (
$ del \u003d imap_delete ($ open_box, $ m);
mail ($ e-post, $ er_SBJ, $ er_text, $ rubriker);
}
}
$ CLEAR \u003d IMAP_EXPUNGE ($ MY_BOX);
}
?>


E-post - Det här är det viktigaste verktyget för att dela information och om du använder det för arbete, kommer du säkert över situationen: ett brev kommer till posten, som innehåller de uppgifter som behövs för bearbetningen creak. Vi kommer att prata om Yandex Mail - i den här artikeln kommer jag att dela med dig, kära läsare, uppleva hur man får brev från lådan, vi kommer också att analysera alternativet när det finns en investerad fil i brevet - hur man hittar den och så småningom Ladda ner det för ytterligare manipuleringar.

Jag själv stötte på den här uppgiften länge, och då, om det finns en liten erfarenhet av Yandex Postal-programmen, spenderade jag mycket tid och nerver för att uppnå det önskade resultatet. Mitt första misstag var att jag, som många webbutvecklare, började intensivt söka efter liknande exempel på nätverket, men använde inte hjälp av yandex. Ja, det finns användbar information, även om det är mycket litet, men det är ganska viktigt att skriva denna typ av manus (det kommer att vara nedan). Vid den tiden var det nödvändigt att skriva ett skript, vars essens minskade: Kundens mail kom till kundens mail ett brev med priset på varor i XLS-formatet en gång om dagen, det var nödvändigt att bearbeta det (till Färg och jämför med data från DB Online Store och, beroende på resultatet, den uppdateringen någonstans, inaktivera eller aktivera).

Och det första vi ska göra innan du skriver skriptet är att göra vår handlingsplan, som kommer att bestå av nio saker:

  1. Konfigurera mail för att få tillgång via postprotokoll;
  2. Notera själva strukturen PHP-applikationer och bestämma kodningen av filer;
  3. Vi kommer att bekanta oss med IMAP postprotokollet och dess förmåga.
  4. Vi ansluter till Yandex-post via inloggning och lösenord för kontot och spåra felet i detta skede;
  5. Bearbeta rubriken för brevet;
  6. Vi får och behandlar brevets kropp;
  7. Vi får och sparar kapslade filer;
  8. Vi visualiserar det utförda arbetet;
  9. Göra slutsatser.

Temat är ganska voluminöst, men jag kommer att försöka ställa in allt är mest kompakt och förståeligt. Kanske fortsätt.

Inställning av post

Gå till ditt mail och gå in i inställningarna, som visas nedan i skärmdumpen:



Nu har vi kommit till inställningar via post via IMAP och POP3-protokollen:


Här kommer många att se bilden som bilden ovan, men jag kom över, och mer än en gång, när åtkomst är inaktiverad. Därför, om du har andra inställningar, sätt fästen som i skärmdumpen, för oss det viktigaste att tillåta åtkomst via IMAP-protokollet.

Applikationsstruktur och dess kodning

I det här exemplet kommer vi inte att komma med en komplex applikationsstruktur, eftersom det inte behövs, och lägg till bara vad som behövs (jag jobbar i den sublima textredigeraren):


  • tMP-mapp där vi laddar ner kapslade filer från brevet om de är;
  • .htaccess - Ställa in serverns del, om du har en Apache-server;
  • funktioner.php - här lägger till våra funktioner;
  • main.css-stil-filen;
  • index.php - Application Entry Point;

Kodningen använder UTF-8 och fyller därför omedelbart filen.htaccess nästa rader:

Adddefaultcharset utf-8 addcarset utf-8 * Charsetsourceenc Utf-8 CharSetDefault utf-8

IMAP-protokoll

Att återvända till det första objektet Det kan ses att det också är möjligt att arbeta med Yandex-posten via POP3-protokollet. Så varför exakt IMAP? Från dessa två IMAP-kanaler är en nyare och alternativ POP3, därför har han ett antal fördelar (de kan studeras med Wikipedia), men i vårt fall blev valet endast påverkat att han var ny. Personligen ser jag inte en särskild skillnad som använder under specifik uppgift ta emot ett brev. Om du av någon anledning behöver använda POP3-protokollet, kommer alla funktioner som gäller för IMAP att fungera för det.

Anslut till Yandex-post med hjälp av IMAP-protokollet

För att ansluta till mail måste vi veta tre parametrar: inloggningsmail, lösenord och adress mejl server. Om det inte finns några problem med två parametrar, kan den andra hittas i hjälp av Yandex. Om det (jag hade ett problem) Jag var högre och skrev en massa av exempel, där den tredje parametern inte är korrekt och, föreställ dig att det finns fel åtminstone i anslutningsstadiet - det är åtminstone obehagligt. Jag kommer inte att gå runt och om och omedelbart ge en direktlänk till Yandex-sidan - miljö postprogram . Här är faktiskt vad vi behöver ansluta:


Nu kan du gå direkt till koden själv:

Header ("Innehållstyp: Text / HTML; charset \u003d UTF-8"); Error_reporting (0); Kräva_once ("funktioner.php"); $ mail_login \u003d "yandex_pot"; $ Mail_password \u003d "Password_text"; $ Mail_imap \u003d "(imap.yandex.ru:993/imap/ssl)"; // Lista över bokförda typer av filer av $ Mail_Filetypes \u003d array ("msword"); $ Connection \u003d Imap_Open ($ mail_imap, $ mail_login, $ mail_password); Om ("$ Connection) (ECHO (" felanslutning med post - ". $ Mail_login); avsluta;) annars ($ msg_num \u003d imap_num_msg ($ anslutning); $ mails_data \u003d array (); för ($ i \u003d 1; $ Jag<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Först ange vidare UTF-8-kodningen med hjälp av rubriken och stäng av felkartläggningen. Anslut filfunktionerna. PHP och ange de inställningar som adresserades ovan. I $ MAIL_FILETYPES-arrayen föreskriver vi filformat som vi behöver. Så det bestämdes att göra det onödiga sopor och ta emot specifika filer. Postanslutning sker med funktionen iMap_Open (), som med ett bra utförande returnerar en IMAP-ström och med felet - FALSE (men om du slår på feldisplayen är det inte så). Komplett arbete med strömmar med funktionen Imap_close () genom att passera den anslutningsindikatorn. Det finns en vanlig villkorlig operatör mellan dessa två funktioner.

Med en lyckad anslutning med hjälp av IMAP_NUM_MSG () lär vi oss antalet bokstäver i posten och lägg till en array som vi lägger alla nödvändiga data från strömmen. Därefter följs en cykel där varje bokstav kommer att behandlas med sitt nummer (numreringen sker från 1) separat.

Bearbetar rubriken i brevet

För att få ett brevhuvud måste du använda funktionen Imap_header (), vars andra parameter är bokstavsnumret:

// brevlock $ msg_header \u003d imap_header ($ anslutning, $ i);

I detta skede får vi ett objekt från vilket vi kommer att dra de data vi behöver samtidigt som du behåller $ Mails_Data-arrayen. Här är ett exempel på en av bokstäverna:

Den här skärmdumpen visar att alla data dupliceras, men det spelar inte en speciell roll, dra, vad som är bekvämare. Mycket viktigare är kodningen av ämnet i brevet. Det kan vara något eller det här ögonblicket måste kontrolleras. Samma situation med brevets kropp och med kapslade filer.

$ mails_data [$ i] ["Time"] \u003d Tid ($ msg_header-\u003e Maildate); $ Mails_data [$ i] ["Datum"] \u003d $ msg_header-\u003e postdate; Foreach ($ msg_header-\u003e till som $ data) ($ mails_data [$ i] ["to"] \u003d $ data-\u003e brevlåda. "@. $ Data-\u003e värd;) foreach ($ msg_header-\u003e från som $ data ) ($ mails_data [$ i] ["från"] \u003d $ data-\u003e brevlåda. "@. $ Data-\u003e värd;)

Vi sparar i vår array: en tillfällig etikett, datumet för mottagandet av brevet, mottagarens och avsändarens e-post och gå till att få ämnet i brevet. För att göra detta lägger vi först till tre funktioner till funktioner. PHP-fil:

Funktionskontroll_utf8 ($ charset) (om (StrtLofter ($ charset)! \u003d "UTF-8") (returnera false;) returnera sant;) funktion konvertera_to_utf8 ($ IN_CHARSET, $ STR) (returnera iConV ($ IN_CHARSET), "UTF -8 ", $ str);) Funktion get_imap_title ($ str) ($ mime \u003d imap_mime_header_decode ($ str); $ title \u003d" "; foreach ($ mime as $ key \u003d\u003e $ m) (om (! Check_utf8 ($ m) M-\u003e Charset)) ($ Titel. \u003d Convert_To_UTF8 ($ m-\u003e charset, $ m-\u003e text);) annars ($ titel. \u003d $ M-\u003e text;)) returnera $ title;)

Talk namn och jag tycker att det är värt att förklara bara den sista funktionen. Det accepterar den kodade strängen och med IMAP_MIME_HEADER_DECODE () avkodar det, vilket en följd av vilken en uppsättning objekt returneras, var och en har två charsetegenskaper (kodning) och text (text ämne). Vidare är allt enkelt: i slingan som kontrollerar kodningen klickar vi på UTF-8 och limar ämnet till en enda rubrik och returnerar den.

Låt oss nu återvända till index.php-filen och förlänga den sista parametern:

$ mails_data [$ i] ["titel"] \u003d get_imap_title ($ msg_header-\u003e ämne);

På denna behandling av rubriken för brevet kommer att slutföras.

Vi arbetar med ett skrivbrev

Vi fortsätter att gradvis bildas vår array med de bearbetade bokstäverna och nu, för kroppen, måste vi använda två funktioner:

// kroppsbrev $ msg_struktur \u003d imap_fetchstruktur ($ anslutning, $ i); $ msg_body \u003d imap_fetchbody ($ anslutning, $ i, 1);

I den första variabeln $ msg_struktur finns det ett brevstruktur - det här är ett objekt där du kan hitta en massa användbar informationExemplet på den del av detta objekt presenteras nedan:

Vad är viktigt för att lösa vårt problem:

  • typ är den primära typen av brevkropp, beroende på vad som kommer till mail det kan ändras från 0 till 7 (varje siffra rekommenderar sin typ av innehåll som ligger i brevets kropp);
  • kodning - Body Transfer Encoder, varierar från 0 till 5 (0 - 7bit, 1 - 8bit, 2 - Binär, 3 - Base64, 4 - Citat-Printable, 5 - Andra);
  • delar är en rad delar av brevet som motsvarar strukturen på objektnivån ovan.

Titta mer i detalj. Tänk på egenskapen. Det första som sägs är att i nollcellen i den här matrisen finns det information som motsvarar texten i brevet och börjar med de förstnittade filerna. Också i varje objekt angiven typ och i parametrar som kodar i det uppenbara och inte uttryckliga formen.

Strukturen i brevet kan döljas, åtminstone hade jag fall när det nådde fyra - fem nivåer, så att det, som de säger, kopplar oss i framtiden, det är nödvändigt att skriva en rekursiv funktion.

Den andra funktionen imap_fetchbody () extraherar en specifik del av brevet, oftast i den kodade formen.

Lägg nu till en variabel där vi kommer att bearbeta den bearbetade versionen av bokstavens kropp:

$ kropp \u003d "";

Låt oss återvända till filfunktionerna. PHP och skriv en rekursiv funktion:

Funktion Recursiv_Search ($ struktur) ($ Encoding \u003d ""; Om ($ struktur-\u003e subtyp \u003d\u003d "html" || $ struktur-\u003e typ \u003d\u003d 0) (om ($ struktur-\u003e parametrar-\u003e attribut \u003d\u003d " Charset ") ($ charset \u003d $ struktur-\u003e parametrar-\u003e värde;) returmatris (" kodning "\u003d\u003e $ struktur-\u003e kodning," charset "\u003d\u003e strtolower ($ charset)," subtyp "\u003d\u003e $ struktur- \u003e subtyp);) annars (om (ISSET ($ struktur-\u003e delar)) (returnera rekursiv_search ($ struktur-\u003e delar);) annars (om ($ struktur-\u003e parametrar-\u003e attribut \u003d\u003d "charset") ($ Charset \u003d $ struktur-\u003e parametrar-\u003e värde;) retur array ("kodning" \u003d\u003e $ struktur-\u003e kodning, "charset" \u003d\u003e strtolower ($ charset), "subtyp" \u003d\u003e $ struktur-\u003e subtyp);) ))

Funktionen Recursive_Search () tar en parameter - brevstrukturen där egenskaperna kontrollerar sekventiellt och drar tre parametrar: kodning, charset, subtyp. En utgångspunkt från rekursionen är frånvaron av egenskapen hos delarna med en nollcell. Mer att förklara här finns det inget mer, från koden jag tycker att det är klart vad som händer.

Vi lägger till en annan funktion för contendance för brevets kropp, som kommer att krävas i framtiden:

Funktionskonstruktion_coding ($ Coding, $ msg_body) (CASE 4: $ BODY \u003d IMAP_QPRINT ($ msg_body); Break; Case 3: $ Body \u003d Imap_Base64 ($ msg_body); Break; Case 2: $ Body \u003d Imap_Binary ($ msg_body); Break; Fall 1: $ Body \u003d Imap_8bit ($ msg_body); Break; Case 0: $ Body \u003d $ msg_body; bryta; standard: $ body \u003d "", bryta) returnera $ kropp;)

$ Recursiv_data \u003d rekursiv_search ($ msg_struktur); Om ($ recursiv_Data ["Encoding"] \u003d\u003d 0 || $ recursiv_data ["kodning"] \u003d\u003d 1) ($ kropp \u003d $ msg_body;) om ($ recursiv_data ["kodning"] \u003d\u003d 4) ($ kropp \u003d Structure_encoding ($ recursiv_Data ["kodning"], $ msg_body);) om ($ recursiv_data ["kodning"] \u003d\u003d 3) ($ body \u003d struktur_encoding ($ recursiv_data ["kodning"], $ msg_body);) om ($ msg_body);) rekursiv_data ["kodning"] \u003d\u003d 2) ($ body \u003d struktur_encoding ($ recursive_data ["kodning"], $ msg_body);) om (! check_utf8 ($ recursiv_data ["charset"]) ($ body \u003d convert_to_utf8 ($ rekursiv_data ["charset"], $ msg_body);)

Efter att vi fått data från recursion, kontrollera gradvis överföringskodningen och, beroende på det här funktionen med motsvarande parametrar. I det sista villkorade uttalandet anser vi vad vi arbetar i UTF-8 och om vi efter alla manipuleringar kommer att ha skiljer sig från kodningen, omkodning.

Det återstår att dras:

$ mails_data [$ i] ["kropp"] \u003d base64_code ($ kropp);

I kroppen kan brevet vara, både den vanliga texten och HTML-markeringen med sina stilar. Vi kodar i base64 så att vår layout inte kommer att gå med visualisering.

Nestade filer

Här, smidigt kommer vi till slutet av att skriva vår ansökan:

// nestade om filer (isset ($ msg_struktur-\u003e delar)) (för ($ j \u003d 1, $ f \u003d 2; $ j< count($msg_structure->delar); $ J ++, $ f ++) (om (in_array ($ msg_struktur-\u003e delar [$ j] -\u003e subtyp, $ mail_filetypes) ($ mails_data [$ i] ["Fäster"] [$ J] [" Skriv "] \u003d $ msg_struktur-\u003e delar [$ j] -\u003e subtyp; $ mails_data [$ i] [" fäster "] [$ j] [" storlek "] \u003d $ msg_struktur-\u003e delar [$ j] -\u003e byte ; $ Mails_data [$ i] ["Fäster"] [$ j] ["NAME"] \u003d get_imap_title ($ msg_struktur-\u003e delar [$ j] -\u003e parametrar-\u003e värde); $ mails_data [$ i] ["Fäster "] [$ J] [" fil "] \u003d struktur_encoding ($ msg_struktur-\u003e delar [$ j] -\u003e kodning, imap_fetchbody ($ connection, $ i, $ f)); file_put_contents (" TMP / ". ICONV (" UTF-8 "," CP1251 ", $ Mails_Data [$ I] [" Fäster "] [$ J] [" Namn "]), $ Mails_Data [$ i] [" Fäster "] [$ J] [" File " ]);)))

En bit ansvarig för att bearbeta en inbäddad fil är mycket mindre, och nu - varför exakt. Principen att arbeta med filen liknar att arbeta med brevets kropp, bara detta stadium börjar med närvaron i gruppen av delaregenskaperna. Glöm inte att skära av onödigt, vända med listan över typer. Med hjälp av en enkel File_put_Contents () -funktion sparar vi vår fil till servern till TMP-mappen.

Jag vill se resultatet!

I arbetsprocessen har vi bildat en array med $ Mails_Data data, och för visualisering kommer vi att arbeta direkt med det. I den här artikeln använde jag ett testbrev som jag hade ett mail, låt oss se vad vi gjorde i slutändan:


Här är vilken typ av något du behöver för att få en array, tyvärr, jag var tvungen att dölja innehållet i filen av personliga skäl. Gå nu till vår HTML-markering:

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

Yandex mail (inkommande) |

Antal bokstäver:

inga bokstäver
$ Mail):?\u003e
Timing Tag:
Datum:
Till vem:
Från:
Ämne:
Brev i base64:
Nested Files:
$ Fästa):?\u003e
En typ:
Storlek (i byte):
Namn:
Kropp:

Stilar som jag inte lägger till här, eftersom de inte spelar en särskild roll, som ett resultat:


Och på servern i TMP-mappen har du en fil.

Slutsats

Efter att ha gjort alla stadier från artikeln, uppnår du författningsresultat, men allt är inte så enkelt som det kan tyckas - det finns fallgropar som måste övervägas. När du skriver ett skript för en specifik uppgift måste du följa kodningen i alla steg, bokstäverna kan gå från olika mail, som alla kan ha sina egna nyanser. Det kommer också att vara viktigt att ta hänsyn till att Yandex-post och deras dokumentationsperiod är uppdaterad, så olika delklausuler kan tyckas arbeta med postprogram. Jag har allt på det här, jag hoppas att du använder den här artikeln när du arbetar med en lägre version av Yandex-post.

Det är omöjligt att få ett bifogat brev (
Om mail skickas med filen - någon försvinner texten i brevet

snälla hjälp mig

Det är klart ... om det visar sig allt från Yandex på Yandex ...
Typ räknat ut
Men det är därför andra filer förutom ordet, det här skriptet accepterar inte det är inte klart ... det finns en linje msword nära kommatecken och pdf och flg och phg - läser och sparar bara ordet .... något sådant

Vissa webbapplikationer kan kräva special email för användaren. I det här fallet kan vi skriva din egen ekorrepail eller roundcube-e-postkod. Oavsett vad du väljer, kommer kunskap om Mail IMAP att vara användbar.

Hur man arbetar med IMAP i PHP beskrivs på två sidor. På första sidan är de nödvändiga funktionerna för att ansluta till postservrar och läsa meddelanden. På andra sidan, låt oss prata om att arbeta med e-post, till exempel radera meddelanden, ladda ner program, etc ...

För att visa funktionalitet, kod exempel som kan användas för att starta skripten på din egen mail klient, kommer att användas.

URL-parametrar för att ringa de nödvändiga funktionerna:

  • fUNC - Typ av funktion krävs (till exempel: Läs e-post, Visa brevlåda, Radera meddelande)
  • mapp - Namnet på mappen Mailbox för anslutning (till exempel: Inkommande, Skickad, Spam)
  • uID - Unik e-postidentifierare

Parametrar kan erhållas med hjälp av $ _get och switch kan användas för att ringa lämpliga åtgärder.

Anslut till IMAP-servern

För att upprätta en anslutning till IMAP-servern använder vi IMAP_CONNECT () -funktionen, som visas nedan:

Meddelande sökväg, användarnamn och lösenord de nödvändiga parametrarna för anslutning till servern. Du kan lära dig om de extra parametrarna i handboken.

Banan till brevlådan är en sträng som identifierar servern och porten i lockiga fästen definierar namnet på den önskade mailmappen.

Här är några rader för mapp Inkommande Posttjänster:

  • Gmail (imap.gmail.com: 993 / IMAP / SSL) inkorg
  • Yahoo (imap.mail.yahoo.com: 993 / IMAP / SSL) Inkorgen
  • AOL (IMAP.AOL.com: 993 / IMAP / SSL) inkorg

På vissa servrar är ingen SSL aktiverat, i det här fallet måste du släppa ut "SSL" från strängen. Andra servrar kan använda sina egna certifikat där du måste aktivera "Novalatate-cert".

Med en öppen anslutning till portoservern kan vi nu titta på de funktioner som används för följande aktiviteter:

  • Visar listan över mappen för brevlåda i ditt e-postkonto
  • Visar listan över e-postmeddelanden i mappen
  • Visa författarens e-postinnehåll

E-postmappar

Inkommande , Postad , Skräp och Spam - Dessa mappar är synliga i nästan alla e-postkonto, och användarna kan ofta skapa egna mappar. För att visa meddelanden i dessa mappar måste vi ändra vår anslutningssträng. Till exempel, använd "inkorg" (inkommande) i raden av banan tidigare. Om du behöver ansluta till Spam-mappen, använd något som "spam" (spam) istället. Men även om det kan listas som Spam I ett e-postkonto, om du tittar igenom e-postklienten, kan det nuvarande namnet på mapparna i bakgrunden vara annorlunda. Vi kan lista alla tillgängliga mappar i kontot med hjälp av IMAP_LIST ().

"; Foreach ($ mappar som $ mapp) ($ mapp \u003d str_replace (" (imap.gmail..php? mapp \u003d ". $ mapp." & func \u003d Visa "\u003e". $ mapp. "") Echo"";

Vi måste överföra anslutningsbeskrivningen som erhållits från IMAP_OPEN () som den ursprungliga parametern IMAP_LIST (). Vi måste också gå igenom vägen (utan en mapp, till exempel "inkorg"). Som en tredje parameter, begäran av alla tillgängliga mappar.

Meddelandet om meddelandet

Varje mapp innehåller en lista med tillgängliga e-postmeddelanden, så låt oss se hur vi kan skapa en lista med meddelanden i vår brevlåda.

Först måste du få antalet tillgängliga meddelanden med hjälp av IMAP_NUM_MSG (). Då kan vi använda funktionen imap_header () för att få information för titeln på varje meddelande.

Låt oss säga om vi vill ha de senaste 20 bokstäverna:

($ numessages - 20); $ i--) ($ IMAP \u003d IMAP_HEADER ($ IMAP, $ i); $ FREFO \u003d $ Header-\u003e Från; $ Svarainfo \u003d $ Header-\u003e Svara_To; $ Detaljer \u003d Array ("FromAddr" \u003d\u003e (Isset ($ Frominfo-\u003e brevlåda) && isset ($ fromfo-\u003e värd))? $ Fromfo-\u003e brevlåda. "@". $ Fromfo-\u003e Värd: "", "FromName" \u003d\u003e (Isset))? $ Fromfo-\u003e Personlig : "", "SvaraAddr" \u003d\u003e (Isset ($ Replyinfo-\u003e Mailbox) && Isset ($ Svarainfo-\u003e värd))? $ Svarainfo-\u003e Mailbox. "@". $ Svarainfo-\u003e Värd: "", "SvaraName "\u003d\u003e (Isset ($ svarto-\u003e Personlig))? $ Svaro-\u003e Personlig:" "," Ämne "\u003d\u003e (ISSET ($ Header-\u003e Ämne))? $ Header-\u003e Ämne:" "," UDATE "\u003d\u003e (Isset ($ Header-\u003e UDate))? $ Header-\u003e UDATE:" "); $ UID \u003d IMAP_UID ($ IMAP, $ I); Echo"

    "; Echo"
  • Från:". $ Detaljer [" frånName "]; echo" ". $ Detaljer [" FromAddr "]."
  • "; Echo"
  • ÄMNE: ". $ Detaljer [" Ämne "] ..Php? Mapp \u003d". $ Mapp. "& Uid \u003d". $ uid ..php? mapp \u003d ". $ mapp." & uid \u003d ". $ uid." & func \u003d Ta bort "\u003e Radera
  • "; Echo"
"; }

Förening $ IMAP måste öppnas i önskad mapp. Vi kan sedan gå igenom de senaste 20 bokstäverna med hjälp av antalet meddelanden som erhålls av imap_num_msg (). Kommunikations- och e-postnummer ges iMAP_HEADER () för att få information om titeln, som sedan kan pergitera för intressant information från avsändaren, e-postadress, namn, ämne etc.

Observera att e-postnummer från det totala antalet meddelanden inte är en unik identifierare för meddelandet. Om du har 100 bokstäver i din brevlåda, kommer det sista numret att vara 100, den föregående kommer att vara 99, och så vidare. Om du tar bort ett meddelande på nummer 100 får du ett nytt meddelande, det kommer att vara 100.

För att fortsätta med följande åtgärder måste du få en unik identifierare för e-post. Varje bokstav har en unik identifierare som kallas UID, som vi kan få genom att tillhandahålla e-post, funktionen för IMAP_UID () nummer UID är unik och kommer inte att förändras med tiden.

Visa meddelandeinnehåll

E-postläsning är inte riktigt en enkel sak som tidigare uppgifter, så du måste använda mailklasser som utvecklats av Mitula Carade. Följande tre funktioner för vårt exempel är anpassade till klassen nedan:

kodning) (CASE 3: RETURN IMAP_BASE64 ($ TEXT); Fall 4: Retur iMAP_QPrint ($ TEXT); Standard: Retur $ Text;)) // Multipart IF ($ STRUKTUR-\u003e Typ \u003d\u003d 1) (Foreach ($ Structure -\u003e delar som $ index \u003d\u003e $ understruka) ($ prefix \u003d ""; om ($ partNumber) ($ prefix \u003d $ partNumber. "";) $ Data \u003d get_part ($ IMAP, $ UID, $ MimeType, $ Substruct , $ prefix. ($ index + 1)); om ($ data) (returnera $ data)))) returnera falskt; ) Funktion GET_MIME_TYPE ($ STRUKTUR) ($ PURORICMIMEPEYPE \u003d ARRAY ("TEXT", "Multipart", "Message", "Application", "Audio", "Image", "Video", "Other"); Om ($ struktur -\u003e subtyp) (returnera $ PURORICMIMETYPE [(INT) $ struktur-\u003e typ]. "/". $ Struktur-\u003e subtyp;) returnera "text / vanlig";)

Funktionen GetBody () får e-postinnehåll, passerar din UID och IMAP-anslutningen. Inne i funktionen klargör vi funktionen GET_PART () med innehållstyp som text / HTML. Det vanliga e-postmeddelandet är mycket lättare att läsa. Således försöker vi först hitta innehållet i HTML inuti e-postmeddelandet.

Sedan läser vi e-poststrukturen med funktionen iMap_fetchstruktur (). Vi ändrade biblioteksfunktionerna för att använda UID, istället för att passera FT_UID ständigt.

Då får vi MIME-typen av e-postmeddelande med funktionen GET_MIME_TYPE (). Det finns åtta MIME-typer som returneras av den här funktionen som heltal:

  • 0 - Text.
  • 1 - Multipart.
  • 2 - Meddelande.
  • 3 - Ansökan
  • 4 - Ljud.
  • 5 - Bild.
  • 6 - Video
  • 7 - Övrigt

Vi vänder tillbaka till den verkliga typen MIME-strängen med MIME-typ-arrays.

Kompositmeddelanden kan ha ett stort antal subtyper, så vi är rekursivt genom alla subtyper med hjälp av en del av siffrorna och tar emot e-post med IMAP_FETCHBODY () när rätten använder MIME-typ.

Därefter använder vi den lämpliga avkodningsfunktionen i enlighet med kodningen av meddelandetypen och förläng innehållet. Hela listan med tillgängliga kodningstyper:

  • 0 - 7bit
  • 1 - 8bit.
  • 2 - Binär.
  • 3 - base64.
  • 4 - Citat-Printable
  • 5 - Övrigt

Slutsats

Vi slutade titta på grunderna för att ansluta till IMAP-servern, en lista med meddelanden inom de tillgängliga mapparna och slutade läsa innehållet i e-postmeddelandet. På nästa sida av posten kommer det att beskrivas om de funktioner som kan användas för att till exempel implementera den extra funktionaliteten hos postklienten, till exempel radering av meddelanden och bearbetningsfäste.

Den andra dagen kom jag för att skriva en liten modul på PHP, vilket skulle tillåta att arbeta med inkommande mail. Lite i Google jag såg det för den här uppgiften är det lämpligt för mig ett av protokollen POP3. och IMap.
Men valet var uppenbart att jag kommer att använda IMAP eftersom det är mer funktionellt och modernt POP3-protokoll.

Nu behövde jag snabbt räkna ut hur man arbetar med IMAP-protokoll, hur man får brev från Yandex / Google-e-postservern.

För bekvämare arbete valde jag biblioteket Phpimap Eftersom det snabbt och enkelt kan implementerar alla uppgifter du behöver.

Anslut till postservern.

Nu, när vi bestämde oss för valet av protokollet och valet av biblioteket, försöker vi ansluta till postservern.

För fullfjädrade PHP-arbete med IMAP-protokollet måste du ansluta tillägget php_imap.dll / imap.so. i php.ini-filen.

För början, låt oss försöka ansluta till Yandex-mail eftersom jag har minst problem med det.

// Anslut inkludera bibliotek ("/ PHPIMAP / Mailbox.php"); Inkludera ("/ phpImap / incomingmail.php"); // För bekvämlighet, skapa en konstant för anslutning till postservern. Definiera ("mail_imap_server", "imap.yandex.ru"); Definiera ("mail_imap_server_port", 993); Definiera ("mail_imap_login", ""); Definiera ("mail_imap_pass", "example_pass"); Definiera ("mail_imap_path", "(" .mail_imap_server. ":" Mail_imap_server_port. "/ IMAP / SSL) inkorg"); $ Mailbox \u003d Ny PHPIMAP \\ Mailbox (mail_imap_path, mail_imap_login, mail_imap_pass, __dir__); Prova ($ Mailbox-\u003e getimapstream ();) fånga (undantag $ e) (dö ($ e-\u003e getmessage ());)

Som vi ser en klassdesigner Brevlåda Tar följande argument:

  • Mail_imap_path - tillsammans en serveradress (mail_imap_server), en anslutningsport (mail_imap_server_port), en anslutningstyp (IMAP) och visar att anslutningen kommer att krypteras (SSL). Efter de lockiga parenteserna anger du den mapp som vi kommer att ansluta, i det här fallet till inkommande meddelanden (inkorg).
  • Mail_imap_login. - brevlåda som kommer att anslutas.
  • Mail_imap_pass. - Lösenord (oftast är det ett lösenord från brevlådan).
  • __Dir__- Det här är sökvägen till mappen där de kapslade filerna och e-postmeddelandena sparas.

Därefter kommer vi att kontrollera om vår anslutning skapades genom metoden getimapstream () Om anslutningen av någon anledning inte kommer att skapas, kastar applikationen uteslutningar med orsaken till inte en bra anslutning.

Det är viktigt att ta hänsyn till det faktum att i inställningarna för Yandex Mail kan du inaktivera möjligheten att ansluta via IMAP-protokollet.

Låt oss nu jämföra anslutningen till Gmail-posten.

Definiera ("mail_imap_server", "imap.gmail.com"); Definiera ("mail_imap_server_port", 993); Definiera ("mail_imap_login", ""); Definiera ("mail_imap_pass", "example_pass"); Definiera ("mail_imap_path", "(" .mail_imap_server. ":" Mail_imap_server_port. "/ IMAP / SSL) inkorg");

Som vi ser det skiljer sig nästan inte från föregående anslutning, men sannolikt kommer du att få ett undantag när du ansluter till servern.
Detta problem beror på det faktum att Gmail IMAP-protokollarbete är avstängt som standard. Du kan aktivera det i inställningarna i fliken Speditörer och POP / IMAP i åtkomstalternativet med IMAP-protokoll ⇒ Aktivera IMAP.

Efter att vi har vänt på arbetet med IMAP-protokollet, behöver vi skapa lösenordsapp. För att det ska kunna skapa, måste vi göra två faktorbehörighet för den här profilen. Därefter kan du fortsätta till dess skapande. När vi skapar ett nytt lösenord för programmet måste vi sättas in i mail_imap_pass-konstanten för anslutning till servern.

Observera att när du skapar en lösenordsansökan kanske du inte kan ansluta till servern den är ansluten till det faktum att det här lösenordet ännu inte har tillämpats än Gmail-tjänsten tar vanligtvis 5-60 minuter.

Data provtagning

Efter en lyckad anslutning kan vi utföra en begäran om att få svettmeddelanden från servern. För detta kommer vi att använda metoden searchmailbox (String $ Criteria) vilket är i huvudsak en omslagsmetod imap_search.. Det är viktigt att förstå att det $ kriterierna är en viss sökning efter den sökning vi behöver, returnerar metoden själv identifierare av de element som därefter använder den för detaljerad postinformation.

$ Mailsids \u003d $ Mailbox-\u003e Searchmailbox ("All");

Som du redan gissat här får vi alla meddelanden.
Och nu låt oss försöka räkna ut det med andra lika viktiga sökkriterier:

// alla inlägg i 3 dagar. $ MAILSIDS \u003d $ MAILBOX-\u003e SearchMailBox ("Sedan" .date ("D-M-Y", Strtotime ("- 3 dag")). "" "); // olästa meddelanden i 3 dagar. $ Mailsids \u003d $ Mailbox-\u003e Searchmailbox ("osynlig sedan" .date ("D-M-Y", Strtotime ("- 3 dag")). "" "); // Sök efter meddelanden med en sådan korrespondens i texttiteln. $ MAILSIDS \u003d $ MAILBOX-\u003e SearchMailBox ("Text" Nyhetsbrev "); // Sök efter meddelanden med en sådan korrespondens i kroppsrubriken. $ Mailsids \u003d $ Mailbox-\u003e Searchmailbox ("Body" Informationsmeddelande "); // Sök via e-post avsändare. $ Mailsids \u003d $ Mailbox-\u003e Searchmailbox ("från" "); // Få meddelanden om ämnet $ Mailsids \u003d $ Mailbox-\u003e Searchmailbox ("Ämne" uppdateringar för din telefon ");

Detta exempel återspeglar grunderna för att använda sökkriterier.

Ta emot informationen

Nu när vi har en rad meddelandidentifierare är vi redo att bearbeta det:

// Hämta identifieraren för det senaste meddelandet från arrayen. $ Id \u003d slutet ($ mailsids); // Få en förekomst av ett Incomingmail-klassobjekt som innehåller information om meddelandet. $ Mail \u003d $ Mailbox-\u003e Getmail ($ ID); // få filer inbäddade till det här meddelandet om det är. $ Mail-\u003e getatchments (); // visa meddelanden. Echo $ Mail-\u003e Texthtml;

Så vi fick meddelanden från vårt brev och sina investeringar utan några problem.

Ytterligare egenskaper.

I det här biblioteket, även närvaron av ett antal användbara metoder för bekvämare arbete med postmeddelanden:

Spara meddelanden med sitt ID.

$ Mailbox-\u003e SaveMail ($ ID, $ ID. "EML");

Vi fastställer meddelanden som oläst med sitt ID.

$ Mailbox-\u003e Markmailasunread ($ ID);

Vi etablerar meddelanden som läs av dess ID.

$ Mailbox-\u003e Markmailasread ($ ID);

Installera meddelandet på dess ID.

$ Mailbox-\u003e Markmailasimportant ($ ID);

Ta bort meddelanden med dess ID.

Ett av de möjliga IMAP-applikationsfunktionerna är skapandet av en postdemon, som hanterar abonnemangs- och överföringsanvändarna från din e-postlista. För att implementera denna uppgift används vanligtvis två metoder i mailinglocks. Den första tyder på att användaren ska gå till en viss sida och bekräfta dess handlingar, det andra kräver att ett brev skickas. Den andra kräver också att bearbetningsskriptet regelbundet lanserades Cron Daemon-OM. På grund av detta är det inte så populärt som första sättet.

Men som du kan se använder de mest allvarliga nyhetsbrev den andra metoden. Därför, om du har möjlighet att använda Cron, använd den.

Det är faktiskt inte svårt att förstå funktionerna. Vissa svårigheter kan uppstå med analysen av rubrikerna av bokstäver som kommer att bearbeta skriptet.

Algoritmen för skriptets arbete är lätt. Demonen etablerar en anslutning till postservern och kontrollerar närvaron av bokstäver på den. Om det inte finns några bokstäver, stoppar manusarbetet. Om det finns bokstäver finns det en parsing av rubrikerna i första bokstaven. Du kan titta på fältet från och ämnesområden. Om ämnesfältet innehåller ett av två tillåtna rubrikalternativ (prenumeration eller inspelning), blir rekordet som motsvarar fältet från fältet antingen aktiv (bekräftad) eller borttagen från bordet. I båda fallen skickas den adress som anges i fältet från fält till lämplig anmälan om skriptåtgärden. Därefter är brevet markerat för borttagning. Om ämnet inte innehåller tillåtna ämnen skickas en felmeddelande, och brevet är också markerat för borttagning. Då flyttas skriptet till nästa bokstav. Efter att ha avslutat analysen av alla bokstäver, rensar han lådan.

IMAP_OPEN-funktionen används för att öppna rutan. När PHP stöder flera protokoll, är det nödvändigt att uttryckligen ange vilket protokoll som används för att fungera med lådan. I vårt fall är det POP3 till 110 port (standard). Vi tilldelar resultatet av skriptet till $ my_box-skriptet.

$ My_box \u003d imap_open ("(you.pop.host/pop3:110)", "Logga in", "Lösenord");

I framtiden kommer du att se att denna variabel kommer att användas på alla IMAP-funktioner. Tryck sedan på rutan för bokstäver. Verifieringen utför funktionen imap_num_msg.

$ n \u003d imap_num_msg ($ my_box);

Som ett resultat kommer variabeln $ n att innehålla antalet bokstäver i rutan. Numret som det kan vara antingen mer noll eller lika med det (om lådan är tom). Om det finns bokstäver, sedan i underkroppen, utför vi analysen av bokstäver, vilket konsekvent ökar bokstavsnumret per enhet. Observera att första bokstaven i rutan har nummer 0, som och det första elementet i matrisen. För att öka brevnumret, tilldela ett variabelt $ m-värde 0, och sedan under cykelventiler ökar vi det per enhet $ M ++.

För att analysera rubrikerna av intresse för oss är två funktioner tillräckligt: \u200b\u200bimap_header och imap_fetch_overview. För att utföra var och en av dem, förutom lådan, måste du ange bokstavsnumret. I vårt fall kommer det att vara lika med $ M-variabeln.

imap_header returnerar ett objekt som ett resultat av utförandet som innehåller uttömmande information om brevets rubrik. Bland annat innehåller det här objektet en rad av, som innehåller fyra värden. Detta är personligt, ADL, brevlåda och värd. Vi är bara intresserade av brevlåda och värd. Att ersätta dem får vi den adress från vilken brevet skickades.

$ H \u003d imap_header ($ my_box, $ m); $ H \u003d $ h-\u003e från; Foreach ($ H som $ k \u003d\u003e $ v) ($ Mailbox \u003d $ v-\u003e brevlåda; $ värd \u003d $ v-\u003e värd; $ personlig \u003d $ v-\u003e personlig; $ email \u003d $ mailbox. "@". $ Värd;

iMAP_FETCH_OVERVIEW - Låter oss veta ämnet i brevet. För samma ändamål kan IMAP_HEADER användas, men av ett antal skäl kan det ibland inte fungera. Från den matris som returnerar den här funktionen behöver vi bara ämnet fält

$ s \u003d imap_fetch_overview ($ my_box, $ m); foreach ($ s som $ k \u003d\u003e $ v) $ subj \u003d $ v-\u003e ämne;

Vidare reduceras våra handlingar för att dra ut e-post från basen, och i händelse av att det har det, markera hela strängen med den här posten som eller raderas. Antag att efter att ha fyllt i postformuläret på webbplatsen är abonnenten tilldelad status 0, och efter att ha bekräftat prenumerationen ändras den till 1.

Om ($ SUBJ \u003d\u003d "Prenumerera") (Mysql_Query ("Uppdatera prenumerera Stat \u003d 1 var Email \u003d $ my_Email"); $ del \u003d imap_delete ($ my_box, $ m); mail ($ mail, $ add_sbj, $ add_text , $ Headers);) annars om ($ sURJ \u003d\u003d "unsubscribe") (mysql_query ("ta bort från prenumerera var e-post \u003d $ my_email"); $ del \u003d imap_delete ($ my_box, $ m); mail ($ email, $ del_sbj, $ del_text, $ rubriker);) annars ($ del \u003d imap_delete ($ my_box, $ m); mail ($ mail, $ er_sbj, $ er_text, $ rubriker);) Efter att ha utfört alla åtgärder, rengör man skriptet . $ CLEAR \u003d IMAP_EXPUNGE ($ MY_BOX);

Det här enkla programmet är bara en demonstration som du kan skriva inte bara dynamiskt föränderliga webbplatser, men även tjänster som inte är synliga alls.

Lista hela programmet med undantag för anslutningsparametrarna med databasen:

Inkludera "config.php"; // Anslutning från databas $ MY_BOX \u003d IMAP_OPEN ("(you.pop.host/pop3:110)", "Logga in", "Lösenord"); $ n \u003d imap_num_msg ($ my_box); $ m \u003d 0; $ add_text \u003d "Tack för att du bekräftar din prenumeration"; $ add_sbj \u003d "Du har lagt till!"; $ del_text \u003d "Du har tagits bort från postlistan."; $ del_sbj \u003d "Radera från listan"; $ err_text \u003d "Tyvärr men den här brevlådan används endast för att administrera posten"; $ err_sbj \u003d "fel"; $ Headers \u003d "Från: Prenumerera Robot X-Mailer: PHP4 Innehållstyp: Text / Plain; Charset \u003d Windows-1251"; om ($ n! \u003d 0) (medan ($ m ++< $n) { $h = imap_header($my_box, $m); $s = imap_fetch_overview($my_box, $m); $h = $h->fRÅN; Foreach ($ H som $ k \u003d\u003e $ v) ($ Mailbox \u003d $ v-\u003e brevlåda; $ värd \u003d $ v-\u003e värd; $ personlig \u003d $ v-\u003e personlig; $ email \u003d $ mailbox. "@". $ värd; $ my_email \u003d mysql_escape_string ($ email);) foreach ($ s som $ k \u003d\u003e $ v) $ subj \u003d $ v-\u003e ämne; Om ($ SUBJ \u003d\u003d "Prenumerera") (Mysql_Query ("Uppdatera tabelluppsättning Stat \u003d 1 var Email \u003d $ my_Email"); // print mysql_error (); $ del \u003d imap_delete ($ my_box, $ m); mail ($ E-post, $ add_sbj, $ add_text, $ rubriker);) annars om ($ subj \u003d\u003d "unsubscribe") (mysql_query ("ta bort från bordet där email \u003d $ my_email"); $ del \u003d imap_delete ($ my_box, $ m) ; Mail ($ e-post, $ del_sbj, $ del_text, $ rubriker);) annars ($ del \u003d imap_delete ($ open_box, $ m); mail ($ e-post, $ er_sbj, $ er_text, $ rubriker);)) $ CLEAR \u003d imap_expunge ($ my_box); )

I Listinge finns det inga detaljer, så som möjligt att konvertera från Win i Koi, kontrollera avsändarens brevlåda etc. Dessa är redan funktionella överskott som alla kan lägga till efter behov.