Semakan Advanced Email Parcer - perisian untuk mengautomasikan pemprosesan e-mel. Kami mengeluarkan surat dari mel. Kami bekerja dengan protokol IMAP


Setiap orang yang menggunakan e-mel (dan ini adalah majoriti pengguna Internet) cuba meletakkan mesej masuk dengan cara yang mudah untuk bekerja dengan mereka, supaya mereka dapat mencari mesej yang mereka perlukan dengan cepat dan mudah. Untuk tujuan ini dalam peti mel sedang dicipta folder tambahan dan bergantung pada klien e-mel yang digunakan, e-mel masuk diisih dalam satu cara atau yang lain. Selalunya, pemprosesan dijalankan mengikut alamat pos, mengikut senarai mel yang dilanggan oleh pengguna. Anda boleh mengisih mengikut subjek mesej, kata kunci. Tetapi semua ini dilakukan dalam program mel Oh.

Tetapi syarikat Pemasaran Tweek bercadang untuk menggunakan skim yang sama, tetapi memperluaskan kemungkinan penggunaannya. DALAM Penyelesaian lanjutan E-mel Parcer(AEP) pemprosesan surat-menyurat masuk dilakukan di luar klien mel, tetapi melalui penggunaan Kawalan ActiveX ia menjadi mungkin untuk menyepadukan program dengan mana-mana program yang menyokong teknologi ini. Integrasi dijalankan menggunakan bahasa skrip berdasarkan teknologi Microsoft Active Scripting. Kebanyakan bahasa skrip boleh digunakan, termasuk JScript dan VBScript.

Dengan program ini anda boleh mengautomasikan beberapa operasi rutin. Sebagai contoh, anda boleh mengautomasikan:

  • memproses borang pesanan dan soal selidik yang dihantar melalui e-mel;
  • mengisi pangkalan data pesanan;
  • menyusun dan mengubah hala aliran mel;
  • menyusun senarai mel, mengekalkan pelbagai statistik;
  • penciptaan perkhidmatan respons automatik, robot e-mel;
  • sandarkan mesej e-mel penting.

Program ini boleh berfungsi dalam dua mod utama - mod perantara, apabila AEP bertindak sebagai pemproses perantaraan di antara muka pelayan mel kedua-dua pelanggan dan dalam mod pengumpul, di mana program bersambung secara bebas ke pelayan mel dan, bergantung pada tetapan akaun memproses mesej dan memadam atau meninggalkannya pada pelayan (bergantung pada tetapan akaun anda). Apabila menyambung sebagai perantara, sambungan klien mel dikonfigurasikan semula. Tetapan baharu serupa dengan tetapan semasa bekerja dengan penapis spam, apabila pelanggan menyambung bukan ke pelayan, tetapi ke pemproses perantaraan. (Saya tertanya-tanya bagaimana untuk memasang kedua-dua parser dan penapis spam dalam kes ini?)

Mesej yang diterima oleh AEP diproses menggunakan senarai peraturan yang dibentuk daripada penapis dan komponen pemprosesan. Penapis dilaksanakan secara berurutan dan menentukan sama ada mesej akan diproses atau tidak. Mesej yang berada di bawah salah satu peraturan diletakkan dalam baris gilir, yang pemprosesannya bermula selepas semua mesej baharu dimuat turun dari pelayan mel. Hasil pemprosesan kemudian boleh dilihat dalam log, yang merekodkan semua peristiwa.

Memproses komponen mengekstrak, mengubah suai dan menyimpan data khusus daripada mesej. Semasa pemprosesan, adalah mungkin untuk menyimpan data dalam fail luaran, pindahkan ke program lain, memproses menggunakan skrip, menukar menggunakan templat. Untuk menjana peraturan dan komponen, pembina khas digunakan, yang juga menyediakan penyahpepijatan berdasarkan data ujian (ia boleh dijana dalam bentuk fail atau penyahpepijatan boleh dilakukan pada mesej masuk).

Urutan pembentukan peraturan ditunjukkan dengan sangat terperinci di tapak web pembangun dalam bentuk lawatan dalam talian. Sayang sekali ia tidak disertakan dalam dokumentasi, maka ia akan menjadi lebih mudah untuk digunakan dan lebih mudah untuk menguasai persediaan. Namun begitu, mari kita lihat bagaimana peraturan itu dibentuk.

Contohnya, cara membuat senarai mel berdasarkan mesej masuk. Mari buat peraturan baharu dan beri nama. Perkara pertama yang perlu anda lakukan ialah proses mesej masuk. Kami akan menganggap bahawa hanya responden yang menghantar surat dengan tajuk tertentu sahaja dimasukkan ke dalam senarai mel. Oleh itu, penapis pertama perlu dikonfigurasikan untuk memilih huruf dengan pengepala ini. Mari tambahkan penapis (Penapis Subjek) pada peraturan dan dalam sifat, dalam medan Mengandungi, tambah subjek yang diperlukan.

Daripada mesej yang akan dipilih oleh penapis ini, adalah perlu untuk memilih nama dan alamat pengirim. Untuk melakukan ini, kami menggunakan fungsi pensampelan (Line Parcer). Kami menambahnya dengan seret dan lepas mudah diperbuat daripada kayu fungsi yang tersedia ke dalam peraturan yang dihasilkan. Perlu ada dua fungsi: satu akan memproses medan yang mengandungi nama pengirim, yang kedua akan memproses medan dengan alamatnya (Nama Pengirim dan E-mel Pengirim). Data yang dipilih akan disimpan ke pembolehubah yang anda tentukan. Kini mereka perlu diselamatkan.

Untuk menyimpan data yang diterima kami gunakan Fungsi fail Penulis. Mari tambahkannya pada peraturan dengan cara yang sama seperti fungsi sebelumnya. Sekarang anda perlu mengkonfigurasi sifatnya. Ini termasuk nama fail di mana maklumat akan ditulis. Dalam templat untuk merekod maklumat, kami akan memasukkan nama pembolehubah yang mengandungi data yang diperlukan. Anda perlu menamatkan baris dengan pembolehubah dengan pulangan pengangkutan ke entri seterusnya bermula dengan baris baru. Dan pilih pilihan - tulis kepada fail baharu atau tambah pada yang sedia ada. (Jika ia baharu, anda boleh menetapkan awalan untuk membentuk nama fail yang unik.)

Yang tinggal hanyalah untuk memeriksa sama ada peraturan disediakan dengan betul. Untuk melakukan ini, buat fail dengan mesej ujian dan melalui panel kawalan, muat turunnya ke peraturan (ia akan muncul dalam bahagian Mesej Nyahpepijat). Anda kini boleh menjalankan proses ujian dan melihat keputusan dalam log nyahpepijat. Keputusan ini akan membantu anda menentukan dengan jelas sama ada terdapat ralat dalam peraturan anda atau tidak. Jika tiada ralat, maka peraturan boleh digunakan untuk memproses mel masuk. Jika anda tidak mempunyai satu peraturan, tetapi beberapa, maka mesej yang sama boleh diproses oleh beberapa peraturan. Untuk memberikan pilihan ini, tandai item Teruskan Dengan Peraturan Seterusnya dalam sifat peraturan.

Anda juga boleh membuat peraturan untuk memproses lampiran - untuk menyimpannya secara automatik. Pemprosesan masuk dilakukan berdasarkan analisis pengepala mesej, yang dalam kes lampiran mesti mengandungi perkataan multipart. Untuk menyimpan lampiran ke cakera ada fungsi khas- Penulis Lampiran. Komponen ini membolehkan anda menentukan senarai pembolehubah di mana nama fail yang disimpan akan diletakkan, serta folder di mana ia akan disimpan. Untuk mengelakkan fail dengan nama yang sama daripada muncul, anda boleh menambah tarikh dan masa pada nama fail. Data ini akan diambil pada masa lampiran disimpan ke cakera.

Sebagai pemprosesan tambahan Anda boleh menentukan fail yang ingin anda simpan. Sebagai contoh, ini mestilah fail dengan sambungan tertentu. Untuk melakukan ini, anda perlu menggunakan fungsi DeleteFile pada FileSystemObject. Objek ini dicipta dan digunakan dalam kod Komponen JScript.

Anda juga boleh membuat peraturan untuk membalas permintaan responden. Contohnya, jika mereka meminta dokumentasi tertentu. Marilah kita tentukan bahawa untuk ini subjek surat mesti mempunyai format tertentu, dan surat itu sendiri mesti dihantar ke alamat tertentu. Oleh itu, pertama sekali, kami memilih surat ke alamat ini, dan kemudian kami menapis mesej mengikut subjeknya. (Untuk menapis mengikut alamat, gunakan Penapis E-mel Penerima.)

Langkah seterusnya ialah menentukan alamat pengirim (sama seperti yang diterangkan di atas). Seterusnya, daripada subjek mesej, anda perlu memilih nama dokumen yang diminta oleh pengguna. Kami menyimpan data ini dalam pembolehubah yang kami tentukan. Untuk menghantar respons, gunakan fungsi Pengirim SMTP (tetapi sebelum itu, anda juga mesti menyemak nama dokumen yang diminta untuk memastikan ketepatannya, yang boleh dilakukan menggunakan fungsi Syarat Mudah).

Untuk fungsi Pengirim SMTP, dalam sifatnya kami akan menunjukkan subjek surat dan teks yang akan dihantar. Dokumentasi yang diminta oleh responden akan dihantar sebagai lampiran. Jika pengguna anda boleh meminta dokumentasi yang berbeza, maka untuk menghantar setiap daripada mereka anda perlu mencipta fungsi pemprosesannya sendiri. Ini boleh dilakukan dengan menyalin pemprosesan pertama yang dibuat dan melaraskan sifatnya.

Contoh-contoh yang dilaksanakan menggunakan program telah dibentangkan di sini. Tetapi anda boleh membuat pilihan lain. Program ini mempunyai pelbagai keupayaan dan pelbagai fungsi. Walaupun dibandingkan dengan menyediakan pengendali mesej dalam pelanggan mel menyediakan AEP adalah lebih sukar, kerana di sini ia masih lebih tertumpu kepada pengaturcara, dan bukan kepada pengguna biasa. Tetapi kerana program ini bertujuan untuk digunakan dalam syarikat, mungkin ada beberapa Pentadbir Sistem yang boleh mengkonfigurasi sistem ini.

» Skrip Sendmail PHP

PHPSendMail

Untuk menggunakan borang, anda hanya perlu memasukkan tetapan e-mel anda dan itu sahaja. Secara umum, skrip sedia untuk digunakan dan borang ini maklum balas untuk tapak dalam HTML dengan pemproses PHP, sesuai untuk tapak kecil, tapak kad perniagaan.

| Dimuat turun: kali

PHP Mudah Hantar Mel

Dengan skrip PHP yang sangat MUDAH ini, pelawat laman web anda akan dapat menghantar e-mel terus kepada anda melalui borang maklum balas.

| Dimuat turun: kali

Skrip PHP + AJAX untuk menghantar borang ke E-mel

Skrip universal untuk menghantar data dari borang ke e-mel. Skrip ini sesuai untuk tapak seperti Halaman arahan, tapak kad perniagaan, dsb.

| Dimuat turun: kali

PHP Mailer Akhir dengan captcha

Skrip memaparkan borang dan, apabila anda mengisi medan yang diperlukan, menghantar mesej ke e-mel anda. Skrip mempunyai perlindungan terbina dalam terhadap robot: sebelum menghantar surat anda mesti memasukkan captcha.

| Dimuat turun: kali

Mel Borang GentleSource

Anda mempunyai dua pilihan untuk dipilih: sama ada pengguna, menggunakan ubah hala, pergi ke Halaman Terima Kasih dengan teks anda, atau pengguna ditunjukkan maklumat bahawa mesej telah berjaya dihantar.

| Dimuat turun: kali

Mel Mikro

Micro Mailer tidak besar Skrip PHP, yang membolehkan anda dan pelawat tapak web anda menghantar e-mel kepada mana-mana penerima.

| Dimuat turun: kali

Web4you-FM

Web4you-FM Menghantar surat dari tapak web anda. Ciri-ciri: 1 - Pilih penerima dan bilangan yang akan ada (dari 1 hingga 4). 2 - Pastikan borang telah diisi dengan betul. Kepada siapa. Nama, hanya huruf...

| v.1.0 | Dimuat turun: kali

Borang Hubungan PHP Ringan

Skrip untuk menghantar mel melalui borang maklum balas adalah sangat mudah sehinggakan orang yang tidak tahu PHP/HTML pun boleh menggunakan program ini tanpa kesukaran...

| Dimuat turun: kali

DodosMail

DodosMail mudah digunakan Pemasangan PHP skrip yang membolehkan anda menghantar surat melalui borang maklum balas di tapak web anda. Anda hanya perlu memuat naik fail php.

| v.2.5 | Dimuat turun: kali

Borang Hubungan PHP

Skrip Hubungan PHP Borang termasuk fungsi berikut: 1) fungsi pencegahan spam. Pengguna mesti masuk kod keselamatan, juga dikenali sebagai captcha.

| Dimuat turun: kali

Hubungan TPCS (borang e-mel)

Skrip Kenalan TPCS ini akan membolehkan pelawat anda menghubungi anda melalui borang maklum balas. Semua maklumat akan dihantar kepada anda melalui e-mel.

| Dimuat turun: kali

Pengirim maklum balas

Pengirim maklum balas mengubah hala semua maklumat daripada borang maklum balas di tapak web anda terus ke e-mel anda. Skrip kecil ini memproses semua permintaan dengan cepat.

| v.1.2 | Dimuat turun: kali

Borang Hubungan PHP Mudah

Sederhana tetapi PHP selamat skrip untuk menghubungi juruweb menggunakan borang maklum balas dengan pengesahan kod (CAPTCHA) untuk mengelakkan spam.

| v.2.1 | Dimuat turun: kali

Borang Hubungan PHP (dengan pengesahan imej)

Borang hubungan, yang menghalang spam dengan meminta pengguna memasukkan kod keselamatan daripada imej. Jika anda menggunakan secara mutlak bentuk mudah maklum balas, lambat laun spammer akan mencari cara untuk menghantar iklan kepada anda secara automatik.

| Dimuat turun: kali

Mel Borang CW3

Skrip ini sangat mudah untuk dipasang dan dikonfigurasikan penampilan tapak anda. Anda boleh menukar saiz borang maklum balas dan teks mesej yang dipaparkan apabila surat berjaya dihantar.

| v.3.30 | Dimuat turun: kali

Borang Hubungan reCAPTCHA

Skrip percuma ini PHP terbalik komunikasi, menjadikannya lebih mudah untuk menerima surat atau maklum balas daripada pelawat anda. Pelawat anda, anda hanya perlu mengisi segala-galanya Ruangan wajib hubungi...

| v.1.4 | Dimuat turun: kali

phMailer

phMailer sangat PHP mudah skrip maklum balas yang menyokong fungsi lampiran fail terima kasih kepada fungsi mel() terbina dalam bahasa PHP.


E-mel- ini adalah alat yang paling penting untuk bertukar-tukar maklumat, dan jika anda menggunakannya untuk kerja, anda mungkin menghadapi situasi: surat tiba dalam mel yang mengandungi data yang diperlukan untuk diproses oleh skrip. Kami akan bercakap tentang mel Yandex - dalam artikel ini saya akan berkongsi dengan anda, pembaca yang dihormati, pengalaman saya tentang cara mengeluarkan surat dari peti mel, kami juga akan melihat pilihan apabila surat mengandungi fail yang dilampirkan - bagaimana untuk mengesannya dan akhirnya memuat turunnya untuk manipulasi selanjutnya dengannya.

Saya sendiri menghadapi masalah ini agak lama dahulu, dan kemudian, walaupun saya mempunyai sedikit pengalaman bekerja dengan program e-mel Yandex, saya menghabiskan banyak masa dan saraf untuk mencapai hasil yang diperlukan. Kesilapan pertama saya ialah, seperti kebanyakan pembangun web, saya mula mencari secara intensif contoh serupa di Internet, tetapi tidak menggunakan bantuan Yandex itu sendiri. Ya, terdapat maklumat berguna di sana, walaupun ia sangat kecil, tetapi ia cukup penting untuk menulis skrip jenis ini (lebih lanjut mengenai ini di bawah). Pada masa itu, adalah perlu untuk menulis skrip, intipatinya ialah: surat dihantar ke mel Yandex pelanggan dengan senarai harga barang dalam format xls sekali sehari, ia perlu diproses (dihuraikan dan dibandingkan dengan data daripada pangkalan data kedai dalam talian dan, bergantung pada hasilnya, sesuatu harus dikemas kini di suatu tempat, dilumpuhkan atau didayakan).

Dan perkara pertama yang akan kami lakukan sebelum menulis skrip ialah menggariskan pelan tindakan kami, yang akan terdiri daripada sembilan perkara:

  1. Mari kita konfigurasikan mel untuk mendapatkan akses melalui protokol mel;
  2. Mari kita gariskan struktur PHP aplikasi dan memutuskan pengekodan fail;
  3. Jom berkenalan protokol pos IMAP dan keupayaannya;
  4. Mari sambung ke mel Yandex menggunakan log masuk dan kata laluan akaun anda dan menjejaki ralat pada peringkat ini;
  5. Mari kita proses tajuk surat;
  6. Kami akan menerima dan memproses badan surat itu;
  7. Terima dan simpan fail yang dilampirkan;
  8. Visualisasikan kerja yang dilakukan;
  9. Mari buat kesimpulan.

Topik ini agak besar, tetapi saya akan cuba membentangkan semuanya sepadat dan sejelas mungkin. Mari kita mulakan.

Tetapan mel

Pergi ke mel anda dan pergi ke tetapan, seperti yang ditunjukkan dalam tangkapan skrin di bawah:



Sekarang kita berada dalam tetapan mel melalui protokol IMAP dan POP3:


Di sini, ramai yang akan melihat gambar seperti dalam imej di atas, tetapi saya telah menemui, lebih daripada sekali, apabila akses dilumpuhkan. Oleh itu, jika tetapan anda berbeza, tandai kotak seperti dalam tangkapan skrin; bagi kami, perkara utama ialah membenarkan akses melalui protokol IMAP.

Struktur aplikasi dan pengekodannya

Dalam contoh ini kita tidak akan mencipta struktur kompleks aplikasi, kerana ia tidak diperlukan, tetapi kami hanya akan menambah apa yang perlu (saya bekerja dalam editor Teks Sublime):


  • tmp – folder di mana kami akan memuat turun fail yang dilampirkan dari surat itu, jika ada;
  • .htaccess – menyediakan bahagian pelayan, jika anda ada pelayan apache;
  • functions.php – kami akan menambah fungsi kami di sini;
  • main.css – fail gaya;
  • index.php – titik masuk aplikasi;

Kami akan menggunakan pengekodan UTF-8 dan oleh itu segera mengisi fail .htaccess dengan baris berikut:

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

Protokol IMAP

Kembali ke titik pertama, anda dapat melihat bahawa anda juga boleh bekerja dengan mel Yandex melalui protokol POP3. Jadi mengapa IMAP? Daripada kedua-duanya, IMAP adalah yang lebih baru dan alternatif kepada POP3, oleh itu ia mempunyai beberapa kelebihan (anda boleh mengkajinya menggunakan Wikipedia), tetapi dalam kes kami pilihan itu hanya dipengaruhi oleh fakta bahawa ia lebih baru. Secara peribadi, saya tidak nampak banyak perbezaan apa yang perlu digunakan di bawah tugas tertentu menerima surat. Jika atas sebab tertentu anda perlu menggunakan protokol POP3, maka semua fungsi yang digunakan untuk IMAP akan berfungsi untuknya.

Menyambung ke mel Yandex menggunakan protokol IMAP

Untuk menyambung ke mel, kita perlu mengetahui tiga parameter: log masuk mel, kata laluan dan alamat pelayan melnya. Jika tidak ada masalah dengan dua parameter, maka yang kedua boleh didapati dalam bantuan Yandex. Saya menulis tentang ini (masalah yang timbul untuk saya) di atas dan menulis di Internet banyak contoh di mana parameter ketiga dinyatakan secara tidak betul dan, bayangkan, bahawa ralat sudah berlaku pada peringkat sambungan - ini, sekurang-kurangnya, tidak menyenangkan . Saya tidak akan bermain-main dan akan segera memberikan pautan terus ke halaman Yandex - menyediakan program e-mel. Inilah yang perlu kita sambungkan:


Kini anda boleh pergi terus ke kod itu sendiri:

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)"; // Senarai jenis fail yang diambil kira $mail_filetypes = array("MSWORD"); $connection = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection)( echo("Ralat menyambung ke mel - ".$mail_login); exit; )else( $msg_num = imap_num_msg($connection); $mails_data = array(); for($i = 1; $ i<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Pertama sekali, kami juga menentukan pengekodan UTF-8 menggunakan pengepala dan melumpuhkan paparan ralat. Kami menyambungkan fail functions.php dan nyatakan tetapan yang dibincangkan di atas. Dalam tatasusunan $mail_filetypes kami menentukan format fail yang kami perlukan. Ia telah memutuskan untuk melakukan ini untuk membuang sampah yang tidak perlu dan menerima fail tertentu. Sambungan ke mel dibuat menggunakan fungsi imap_open(), yang, jika berjaya, mengembalikan aliran IMAP, dan jika tidak berjaya, mengembalikan palsu (tetapi jika anda mendayakan paparan ralat, ini tidak berlaku). Kami selesai bekerja dengan strim menggunakan fungsi imap_close() dengan menghantarnya penunjuk sambungan. Di antara kedua-dua fungsi ini terdapat pernyataan bersyarat biasa.

Jika sambungan berjaya, menggunakan imap_num_msg() kami mengetahui bilangan huruf dalam mel dan menambah tatasusunan di mana kami akan meletakkan semua data yang diperlukan daripada strim. Seterusnya datang kitaran di mana setiap huruf akan diproses mengikut nombornya (penomboran bermula dari 1) secara berasingan.

Memproses tajuk surat

Untuk mendapatkan pengepala surat, anda perlu menggunakan fungsi imap_header(), parameter kedua ialah nombor huruf:

// Pengepala surat $msg_header = imap_header($connection, $i);

Pada peringkat ini, kami akan menerima objek dari mana kami akan mengekstrak data yang kami perlukan, menyimpannya dalam tatasusunan $mails_data. Berikut adalah contoh salah satu huruf:

Tangkapan skrin ini menunjukkan bahawa semua data diduplikasi, tetapi ini tidak memainkan peranan khas, kami menggunakan yang lebih mudah. Lebih penting ialah pengekodan baris subjek surat itu. Ia boleh jadi apa sahaja dan detik ini mesti dikawal. Keadaan yang sama berlaku pada badan surat dan fail yang dilampirkan.

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

Kami menyimpan dalam tatasusunan kami: cap waktu, tarikh penerimaan surat, e-mel penerima dan pengirim dan teruskan untuk menerima subjek surat. Untuk melakukan ini, kita perlu terlebih dahulu menambah tiga fungsi pada fail functions.php:

Fungsi 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); ) fungsi 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; ) ) kembalikan $title; )

Nama-namanya adalah jelas dan saya fikir ia berbaloi untuk menerangkan fungsi terakhir sahaja. Ia memerlukan rentetan yang dikodkan dan menggunakan imap_mime_header_decode() untuk menyahkodnya, menghasilkan tatasusunan objek, masing-masing mempunyai dua sifat: charset dan teks. Kemudian semuanya mudah: semak pengekodan dalam gelung, tukarkannya kepada UTF-8 dan gabungkan topik menjadi satu pengepala dan kembalikannya.

Sekarang mari kita kembali ke fail index.php dan tarik keluar parameter terakhir:

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

Ini melengkapkan pemprosesan pengepala e-mel.

Bekerja dengan badan surat itu

Kami terus secara beransur-ansur membentuk tatasusunan kami dengan data yang diproses surat dan kini untuk mendapatkan badan kami perlu menggunakan dua fungsi:

// Badan e-mel $msg_structure = imap_fetchstructure($connection, $i); $msg_body = imap_fetchbody($connection, $i, 1);

Pembolehubah pertama $msg_structure mengandungi struktur huruf - ini ialah objek di mana anda boleh mencari jisim informasi berguna, contoh bahagian objek ini dibentangkan di bawah:

Apa yang penting untuk menyelesaikan masalah kita:

  • jenis – jenis utama badan surat, bergantung pada apa yang datang kepada kami melalui mel, ia boleh berbeza dari 0 hingga 7 (setiap nombor menunjukkan jenis kandungannya sendiri yang terletak di dalam badan surat);
  • pengekodan – pengekodan pemindahan badan, berbeza dari 0 hingga 5 (0 - 7BIT, 1 - 8BIT, 2 - BINARI, 3 - BASE64, 4 - PETIKAN-CETAK, 5 - LAIN-LAIN);
  • bahagian – susunan bahagian huruf yang sepadan dengan struktur objek pada tahap yang lebih tinggi.

Mari kita lihat lebih dekat pada harta bahagian. Perkara pertama yang perlu dikatakan ialah dalam sel sifar tatasusunan ini terdapat maklumat yang sepadan dengan teks surat itu, dan bermula dari yang pertama - ke fail yang dilampirkan. Juga, dalam setiap objek jenis ditunjukkan dan dalam parameter pengekodan ditunjukkan secara eksplisit dan tersirat.

Struktur surat itu boleh bersarang seperti yang dikehendaki, sekurang-kurangnya saya mempunyai kes apabila ia mencapai empat atau lima peringkat, jadi untuk memecahkannya, seperti yang mereka katakan, kita perlu menulis fungsi rekursif pada masa hadapan.

Fungsi kedua imap_fetchbody() mengambil bahagian tertentu mesej, selalunya dalam bentuk yang dikodkan.

Sekarang mari kita tambahkan pembolehubah di mana kita akan menyimpan versi diproses badan surat itu:

$badan = "";

Mari kembali ke fail functions.php dan tulis fungsi rekursif:

Fungsi 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- >subjenis); )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); ) ) )

Fungsi recursive_search() mengambil satu parameter - struktur huruf, di mana ia menyemak sifat secara berurutan dan mendapat tiga parameter: pengekodan, set aksara, subjenis. Titik keluar dari rekursi ialah ketiadaan harta bahagian dengan sifar sel. Tiada apa-apa lagi untuk dijelaskan di sini; Saya fikir ia jelas daripada kod apa yang berlaku dan bagaimana.

Mari tambah satu lagi fungsi untuk menukar badan surat, yang akan kita perlukan kemudian:

Fungsi 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); break; case 1: $body = imap_8bit($msg_body); break; case 0: $body = $msg_body; break; lalai: $body = ""; break; ) return $body ;)

$data_rekursif = carian_rekursif($struktur_msg); 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($ data_rekursif["pengekodan"] == 2)( $body = structure_encoding($rekursif_data["encoding"], $msg_body); ) if(!check_utf8($recursive_data["charset"]))( $body = convert_to_utf8($ recursive_data["charset"], $msg_body); )

Selepas kami menerima data daripada rekursi, kami menyemak pengekodan pemindahan secara beransur-ansur dan, bergantung pada ini, panggil fungsi structure_encoding() dengan parameter yang sesuai. Pada yang terakhir pengendali bersyarat Kami mengambil kira bahawa kami bekerja dalam UTF-8 dan jika selepas semua manipulasi kami mendapat pengekodan yang berbeza, kami akan mengekodnya semula.

Ia kekal untuk melukis garisan:

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

Badan surat itu mungkin mengandungi, seperti teks kosong, dan penanda HTML dengan gaya tersendiri. Kami mengekod dalam BASE64 supaya semasa visualisasi reka letak kami tidak akan berubah.

Fail yang dilampirkan

Di sini kami secara beransur-ansur menghampiri penghujung penulisan permohonan kami:

// Fail dilampirkan if(isset($msg_structure->parts))( for($j = 1, $f = 2; $j< count($msg_structure->bahagian); $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]->bait; $mails_data[ $i]["attachs"][$j]["name"] = get_imap_title($msg_structure->parts[$j]->parameters->value); $mails_data[$i]["attachs"][$ j]["fail"] = 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]["fail"]); ) ) )

Sekeping yang bertanggungjawab untuk memproses fail yang dilampirkan adalah lebih kecil, dan sekarang - mengapa sebenarnya demikian. Prinsip bekerja dengan fail adalah serupa dengan bekerja dengan badan surat, cuma kita mulakan peringkat ini dengan memasukkannya ke dalam tatasusunan harta bahagian. Jangan lupa untuk menapis yang tidak perlu dengan menyemak senarai jenis. Menggunakan fungsi file_put_contents() mudah, kami menyimpan fail kami ke pelayan kami dalam folder tmp.

Saya mahu melihat hasilnya!

Dalam proses kerja, kami telah membentuk tatasusunan dengan data $mails_data, dan untuk visualisasi kami sudah akan bekerja secara langsung dengannya. Dalam artikel ini saya menggunakan surat ujian yang ada dalam mel saya, mari lihat apa yang kami dapat pada akhirnya:


Ini kira-kira rupa susunan anda, malangnya, saya terpaksa menyembunyikan kandungan fail dengan alasan peribadi. Sekarang mari kita beralih kepada kami Penanda HTML:

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

Mel Yandex (Peti Masuk) |

Bilangan huruf:

tiada surat
$mel):?>
Cap masa:
Tarikh:
Kepada siapa:
Daripada:
Subjek:
Surat dalam asas64:
Fail yang dilampirkan:
$attach):?>
Jenis:
Saiz (dalam bait):
nama:
Badan:


Saya tidak akan menambah gaya di sini, kerana mereka tidak memainkan peranan istimewa, akhirnya:


Dan pada pelayan dalam folder tmp anda akan mempunyai fail.

Kesimpulan

Setelah menyelesaikan semua langkah dari artikel, anda akan mencapai hasil yang diingini, tetapi semuanya tidak semudah yang disangka - terdapat perangkap yang perlu diambil kira. Apabila menulis skrip untuk tugas tertentu, anda perlu memantau pengekodan pada semua peringkat; surat boleh datang dari akaun e-mel yang berbeza, setiap satunya mungkin mempunyai nuansa tersendiri. Ia juga penting untuk mengambil kira bahawa mel Yandex dan dokumentasinya dikemas kini secara berkala, jadi pelbagai sub-item mungkin muncul untuk bekerja dengan program mel. Itu sahaja untuk saya, saya harap anda mendapati artikel ini berguna apabila bekerja dengan versi peringkat rendah mel Yandex.

Tidak dapat menerima e-mel dengan lampiran(
jika mel dihantar dengan fail - mana-mana fail - maka teks surat itu hilang

tolong saya

Sudah jelas... jika anda memindahkan mel dari Yandex ke Yandex, maka semuanya akan berjaya...
semacam memikirkannya
tetapi tidak jelas mengapa skrip ini tidak menerima fail lain selain Word... terdapat baris MSWORD di sebelahnya, dipisahkan dengan koma, dan meletakkan pdf dan zhpg dan png - hanya Word membaca dan menyimpan seperti biasa.... sesuatu seperti ini