Kami mengeluarkan surat dari pos. Kami bekerja dengan protokol IMAP. Tinjauan Advanced Email Parcer - program untuk mengotomatisasi pemrosesan email

» Skrip PHP Sendmail

PHPSendMail

Untuk menggunakan formulir, Anda hanya perlu memasukkan pengaturan email Anda dan selesai. Secara umum script sudah siap digunakan dan berbentuk ini masukan untuk situs HTML dengan prosesor PHP, ideal untuk situs kecil, situs kartu nama.

| Diunduh: kali

PHP Sederhana Kirim Email

Dengan script PHP yang sangat MUDAH ini, pengunjung website Anda akan dapat mengirimkan email langsung kepada Anda melalui form feedback.

| Diunduh: kali

Skrip PHP + AJAX untuk mengirim formulir ke E-mail

Skrip universal untuk mengirim data dari formulir ke email. Script ini ideal untuk situs seperti Halaman Arahan, situs kartu nama, dll.

| Diunduh: kali

Final PHP Mailer dengan captcha

Script menampilkan formulir dan, ketika Anda mengisi kolom yang diperlukan, mengirimkan pesan ke email Anda. Skrip ini memiliki perlindungan bawaan terhadap robot: sebelum mengirim surat, Anda harus memasukkan captcha.

| Diunduh: kali

Surat Formulir GentleSource

Anda memiliki dua opsi untuk dipilih: pengguna, menggunakan pengalihan, membuka Halaman Terima Kasih dengan teks Anda, atau pengguna diperlihatkan informasi bahwa pesan berhasil dikirim.

| Diunduh: kali

Surat Mikro

Micro Mailer tidak besar skrip PHP, yang memungkinkan Anda dan pengunjung situs web Anda mengirim email ke penerima mana pun.

| Diunduh: kali

Web4you-FM

Web4you-FM Mengirim surat dari situs web Anda. Fitur: 1 - Pilih penerima dan berapa jumlahnya (dari 1 hingga 4). 2 - Periksa apakah formulir telah diisi dengan benar. Kepada siapa. Nama, hanya huruf...

| v.1.0 | Diunduh: kali

Formulir Kontak PHP Ringan

Skrip untuk mengirim email melalui formulir umpan balik sangat sederhana sehingga bahkan orang yang tidak mengetahui PHP/HTML dapat menggunakan program ini tanpa kesulitan...

| Diunduh: kali

DodosMail

DodosMail mudah digunakan instalasi PHP skrip yang memungkinkan Anda mengirim surat melalui formulir umpan balik di situs web Anda. Anda hanya perlu mengunggah file php.

| v.2.5 | Diunduh: kali

Formulir Kontak PHP

Skrip Formulir Kontak PHP mencakup fungsi-fungsi berikut: 1) fungsi pencegahan spam. Pengguna harus masuk kode keamanan, juga dikenal sebagai captcha.

| Diunduh: kali

Kontak TPCS (formulir email)

Skrip Kontak TPCS ini akan memungkinkan pengunjung Anda menghubungi Anda melalui formulir umpan balik. Semua informasi akan dikirimkan kepada Anda melalui email.

| Diunduh: kali

Surat umpan balik

Mailer umpan balik mengalihkan semua informasi dari formulir umpan balik di situs web Anda langsung ke email Anda. Skrip kecil ini memproses semua permintaan dengan sangat cepat.

| v.1.2 | Diunduh: kali

Formulir Kontak PHP Mudah

Skrip PHP sederhana namun aman untuk menghubungi webmaster menggunakan formulir umpan balik dengan verifikasi kode (CAPTCHA) untuk mencegah spam.

| v.2.1 | Diunduh: kali

Formulir Kontak PHP (dengan verifikasi gambar)

Formulir kontak, yang mencegah spam dengan meminta pengguna memasukkan kode keamanan dari gambar. Jika Anda menggunakan secara mutlak bentuk sederhana umpan balik, cepat atau lambat spammer akan menemukan cara untuk mengirimi Anda iklan secara otomatis.

| Diunduh: kali

Surat Formulir CW3

Scriptnya sangat mudah untuk diinstal dan dikonfigurasi penampilan situs Anda. Anda dapat mengubah ukuran formulir umpan balik dan teks pesan yang ditampilkan ketika surat berhasil dikirim.

| v.3.30 | Diunduh: kali

Formulir Kontak reCAPTCHA

Skrip gratis ini PHP terbalik komunikasi, membuatnya lebih mudah untuk menerima surat atau umpan balik dari pengunjung Anda. Pengunjung Anda, Anda hanya perlu mengisi semuanya bidang yang diperlukan kontak...

| v.1.4 | Diunduh: kali

phMailer

phMailer sangat PHP sederhana skrip umpan balik yang mendukung fungsi lampiran file berkat fungsi mail() bawaan bahasa PHP.


Setiap orang yang menggunakan email (dan ini adalah mayoritas pengguna Internet) mencoba menempatkan pesan masuk sedemikian rupa sehingga nyaman untuk digunakan, sehingga mereka dapat dengan cepat dan mudah menemukan pesan yang mereka butuhkan. Untuk tujuan ini di kotak surat sedang dibuat folder tambahan dan bergantung pada klien email yang digunakan, email masuk diurutkan dengan satu atau lain cara. Paling sering, pemrosesan dilakukan sesuai dengan alamat pos, menurut milis tempat pengguna berlangganan. Anda dapat mengurutkan berdasarkan subjek pesan, kata kunci. Tapi semua ini dilakukan di program surat Oh.

Namun perusahaan Tweek Marketing mengusulkan untuk menggunakan skema serupa, namun memperluas kemungkinan penerapannya. DI DALAM Solusi tingkat lanjut Pemrosesan email Parcer (AEP) dari korespondensi masuk dilakukan di luar klien email, tetapi melalui penggunaan Kontrol ActiveX menjadi mungkin untuk mengintegrasikan program dengan program apa pun yang mendukung teknologi ini. Integrasi dilakukan dengan menggunakan bahasa skrip berdasarkan teknologi Microsoft Active Scripting. Sebagian besar bahasa scripting dapat digunakan, termasuk JScript dan VBScript.

Dengan program ini Anda dapat mengotomatiskan beberapa operasi rutin. Misalnya, Anda dapat mengotomatiskan:

  • memproses formulir pemesanan dan kuesioner yang dikirim melalui email;
  • mengisi database pesanan;
  • menyortir dan mengarahkan aliran surat;
  • menyusun milis, memelihara berbagai statistik;
  • pembuatan layanan respons otomatis, robot email;
  • cadangan pesan email penting.

Program ini dapat bekerja dalam dua mode utama - mode perantara, ketika AEP bertindak sebagai prosesor perantara pada antarmuka server surat baik klien maupun mode kolektor, di mana program terhubung secara mandiri ke server email dan, bergantung pada pengaturan akun memproses pesan dan menghapus atau meninggalkannya di server (tergantung pada pengaturan akun Anda). Saat menyambung sebagai perantara, sambungan klien email dikonfigurasi ulang. Pengaturan baru mirip dengan pengaturan saat bekerja dengan filter spam, saat klien terhubung bukan ke server, tetapi ke prosesor perantara. (Saya ingin tahu bagaimana cara memasang parser dan filter spam dalam kasus ini?)

Pesan yang diterima oleh AEP diproses menggunakan daftar aturan yang dibentuk dari filter dan komponen pemrosesan. Filter dijalankan secara berurutan dan menentukan apakah suatu pesan akan diproses atau tidak. Pesan-pesan yang termasuk dalam salah satu aturan ditempatkan dalam antrian, yang pemrosesannya dimulai setelah semua pesan baru diunduh dari server email. Hasil pengolahan nantinya dapat dilihat dalam log dimana semua kejadian dicatat.

Komponen pemrosesan mengekstrak, memodifikasi, dan menyimpan data tertentu dari pesan. Selama pemrosesan, dimungkinkan untuk menyimpan data file eksternal, transfer ke program lain, pemrosesan menggunakan skrip, perubahan menggunakan templat. Untuk menghasilkan aturan dan komponen, konstruktor khusus digunakan, yang juga menyediakan debugging berdasarkan data pengujian (dapat dihasilkan dalam bentuk file atau debugging dapat dilakukan pada pesan masuk).

Urutan pembentukan aturan ditampilkan dengan sangat detail di situs pengembang dalam bentuk tur online. Sangat disayangkan bahwa ini tidak disertakan dalam dokumentasi, sehingga akan lebih mudah untuk digunakan dan akan lebih mudah untuk menguasai pengaturannya. Namun demikian, mari kita lihat bagaimana aturan tersebut terbentuk.

Misalnya saja cara membuat milis berdasarkan pesan masuk. Mari buat aturan baru dan beri nama. Hal pertama yang perlu Anda lakukan adalah proses pesan masuk. Kita asumsikan hanya responden yang mengirimkan surat dengan judul tertentu yang dimasukkan ke dalam milis. Oleh karena itu, filter pertama perlu dikonfigurasi untuk memilih huruf dengan header ini. Mari tambahkan filter (Filter Subjek) ke aturan dan di properti, di bidang Berisi, tambahkan subjek yang diperlukan.

Dari pesan-pesan yang akan dipilih oleh filter ini, perlu untuk memilih nama dan alamat pengirim. Untuk melakukan ini, kami menggunakan fungsi sampling (Line Parcer). Tambahkan hanya dengan menyeretnya dari pohon fungsi yang tersedia ke dalam aturan yang dihasilkan. Seharusnya ada dua fungsi: satu akan memproses bidang yang berisi nama pengirim, yang kedua akan memproses bidang dengan alamatnya (Nama Pengirim dan Email Pengirim). Data yang dipilih akan disimpan ke variabel yang Anda tentukan. Sekarang mereka perlu diselamatkan.

Untuk menyimpan data yang diterima, kami menggunakan Fungsi berkas Penulis. Mari tambahkan ke aturan dengan cara yang sama seperti fungsi sebelumnya. Sekarang Anda perlu mengkonfigurasi propertinya. Ini termasuk nama file di mana informasi tersebut akan ditulis. Pada template pencatatan informasi, kita akan memasukkan nama-nama variabel yang berisi data yang dibutuhkan. Anda harus mengakhiri baris dengan variabel dengan carriage return agar entri berikutnya dimulai dengan baris baru. Dan pilih opsi - tulis ke berkas baru atau menambah yang sudah ada. (Jika yang baru, maka Anda dapat menetapkan awalan untuk pembentukannya nama yang unik mengajukan.)

Yang tersisa hanyalah memeriksa apakah aturan tersebut disiapkan dengan benar. Untuk melakukan ini, buat file dengan pesan tes dan melalui panel kontrol, unduh ke aturan (mereka akan muncul di bagian Pesan Debug). Anda sekarang dapat menjalankan proses pengujian dan melihat hasilnya di log debug. Hasil ini akan membantu Anda menentukan dengan jelas apakah ada kesalahan dalam aturan Anda atau tidak. Jika tidak ada kesalahan, maka aturan tersebut dapat digunakan untuk memproses surat masuk. Jika Anda tidak memiliki satu aturan, tetapi beberapa, maka pesan yang sama dapat diproses sesuai dengan beberapa aturan. Untuk memberikan opsi ini, centang item Lanjutkan Dengan Aturan Berikutnya di properti aturan.

Anda juga dapat membuat aturan untuk memproses lampiran - untuk menyimpannya secara otomatis. Pemrosesan yang masuk dilakukan berdasarkan analisis header pesan, yang dalam hal lampiran harus mengandung kata multipart. Untuk menyimpan lampiran ke disk ada fungsi khusus- Penulis Lampiran. Komponen ini memungkinkan Anda menentukan daftar variabel di mana nama file yang disimpan akan ditempatkan, serta folder di mana file tersebut akan disimpan. Untuk mencegah munculnya file dengan nama yang sama, Anda dapat menambahkan tanggal dan waktu ke nama file. Data ini akan diambil pada saat lampiran disimpan ke disk.

Sebagai pemrosesan tambahan Anda dapat menentukan file mana yang ingin Anda simpan. Misalnya, ini harus berupa file dengan ekstensi tertentu. Untuk melakukan ini, Anda perlu menggunakan fungsi DeleteFile dari FileSystemObject. Objek ini dibuat dan digunakan dalam kode Komponen JScript.

Anda juga dapat membuat aturan untuk menanggapi permintaan responden. Misalnya, jika mereka meminta dokumentasi tertentu. Mari kita tentukan bahwa untuk itu subjek surat harus mempunyai format tertentu, dan surat itu sendiri harus dikirim ke alamat tertentu. Oleh karena itu, pertama-tama, kami memilih surat ke alamat ini, lalu kami memfilter pesan berdasarkan subjeknya. (Untuk memfilter berdasarkan alamat, gunakan Filter Email Penerima.)

Langkah selanjutnya adalah menentukan alamat pengirim (mirip dengan yang dijelaskan di atas). Selanjutnya, dari subjek pesan, Anda perlu memilih nama dokumen yang diminta pengguna. Kami menyimpan data ini dalam variabel yang kami definisikan. Untuk mengirim respons, gunakan fungsi SMTP Sender (tetapi sebelum itu, Anda juga harus memeriksa kebenaran nama dokumen yang diminta, yang dapat dilakukan menggunakan fungsi Kondisi Sederhana).

Untuk fungsi SMTP Sender, pada propertinya kita akan menunjukkan subjek surat dan teks yang akan dikirim. Dokumentasi yang diminta oleh responden akan dikirimkan sebagai lampiran. Jika pengguna Anda dapat meminta dokumentasi yang berbeda, maka untuk mengirimkan masing-masing dokumentasi tersebut, Anda perlu membuat fungsi pemrosesannya sendiri. Hal ini dapat dilakukan dengan menyalin pemrosesan yang pertama kali dibuat dan menyesuaikan propertinya.

Contoh implementasi penggunaan program disajikan di sini. Tapi Anda bisa memikirkan opsi lain. Program ini memiliki kemampuan yang cukup beragam dan fungsi yang beragam. Meskipun dibandingkan dengan menyiapkan penangan pesan di klien email pengaturan AEP lebih sulit, karena disini masih lebih fokus pada programmer, bukan pada pengguna biasa. Tapi karena program ini ditujukan untuk digunakan di perusahaan, mungkin ada beberapa administrator sistem siapa yang dapat mengkonfigurasi sistem ini.


E-mail- ini adalah alat paling penting untuk bertukar informasi, dan jika Anda menggunakannya untuk bekerja, Anda mungkin menghadapi situasi: sebuah surat tiba di surat berisi data yang diperlukan untuk diproses oleh skrip. Kami akan berbicara tentang surat Yandex - dalam artikel ini saya akan berbagi dengan Anda, para pembaca yang budiman, pengalaman saya tentang cara mengeluarkan surat dari kotak surat, kami juga akan melihat opsi ketika surat berisi file terlampir - cara mendeteksinya dan akhirnya mengunduhnya untuk manipulasi lebih lanjut.

Saya sendiri menghadapi masalah ini sejak lama, dan kemudian, meskipun saya memiliki sedikit pengalaman bekerja dengan program email Yandex, saya menghabiskan banyak waktu dan tenaga untuk mencapai hasil yang diinginkan. Kesalahan pertama saya adalah, seperti banyak pengembang web, saya mulai mencari contoh serupa secara intensif di Internet, tetapi tidak menggunakan bantuan Yandex itu sendiri. Ya, ada informasi yang berguna di sana, meskipun sangat kecil, tetapi cukup penting untuk menulis skrip semacam ini (selengkapnya di bawah). Pada saat itu, perlu untuk menulis naskah, yang intinya adalah: surat dikirim ke surat Yandex pelanggan dengan daftar harga barang di format xls sekali sehari, itu harus diproses (diurai dan dibandingkan dengan data dari database toko online dan, tergantung hasilnya, sesuatu harus diperbarui di suatu tempat, dinonaktifkan atau diaktifkan).

Dan hal pertama yang akan kita lakukan sebelum menulis naskah adalah menguraikan rencana tindakan kita, yang terdiri dari sembilan poin:

  1. Mari konfigurasikan email untuk mendapatkan akses melalui protokol email;
  2. Mari kita uraikan struktur aplikasi PHP dan tentukan pengkodean file;
  3. Mari kita bertemu protokol pos IMAP dan kemampuannya;
  4. Mari terhubung ke email Yandex menggunakan login akun dan kata sandi Anda dan lacak kesalahan pada tahap ini;
  5. Mari kita proses header suratnya;
  6. Kami akan menerima dan memproses isi surat;
  7. Menerima dan menyimpan file lampiran;
  8. Visualisasikan pekerjaan yang dilakukan;
  9. Mari kita menarik kesimpulan.

Topiknya cukup banyak, namun saya akan mencoba menyajikan semuanya sekompak dan sejelas mungkin. Mari kita mulai.

Pengaturan surat

Buka email Anda dan buka pengaturan, seperti yang ditunjukkan pada gambar di bawah:



Sekarang kita berada di pengaturan email melalui protokol IMAP dan POP3:


Di sini, banyak yang akan melihat gambar seperti pada gambar di atas, tetapi saya telah menemui, lebih dari sekali, ketika akses dinonaktifkan. Oleh karena itu, jika pengaturan Anda berbeda, centang kotak seperti pada tangkapan layar, bagi kami, yang utama adalah mengizinkan akses melalui protokol IMAP.

Struktur aplikasi dan pengkodeannya

Dalam contoh ini, kami tidak akan membuat struktur aplikasi yang rumit karena tidak diperlukan, tetapi kami hanya akan menambahkan apa yang diperlukan (saya bekerja di editor Sublime Text):


  • tmp – folder tempat kita akan mengunduh file lampiran dari surat tersebut, jika ada;
  • .htaccess – menyiapkan sisi server, jika ada server apache;
  • function.php – kami akan menambahkan fungsi kami di sini;
  • main.css – file gaya;
  • index.php – titik masuk aplikasi;

Kami akan menggunakan pengkodean UTF-8 dan oleh karena itu segera mengisi file .htaccess dengan baris berikut:

TambahkanDefaultCharset utf-8 TambahkanCharset utf-8 * CharsetSourceEnc utf-8 CharsetDefault utf-8

protokol IMAP

Kembali ke poin pertama, Anda dapat melihat bahwa Anda juga dapat bekerja dengan surat Yandex melalui protokol POP3. Jadi mengapa IMAP? Dari keduanya, IMAP adalah yang lebih baru dan merupakan alternatif dari POP3, oleh karena itu ia memiliki sejumlah keunggulan (Anda dapat mempelajarinya menggunakan Wikipedia), tetapi dalam kasus kami pilihannya hanya dipengaruhi oleh fakta bahwa IMAP lebih baru. Secara pribadi, saya tidak melihat banyak perbedaan apa yang harus digunakan tugas tertentu menerima surat. Jika karena alasan tertentu Anda perlu menggunakan protokol POP3, maka semua fungsi yang berlaku untuk IMAP akan berfungsi.

Menghubungkan ke surat Yandex menggunakan protokol IMAP

Untuk terhubung ke email, kita perlu mengetahui tiga parameter: login email, kata sandinya, dan alamat server email. Jika tidak ada masalah dengan dua parameter, maka yang kedua dapat ditemukan di bantuan Yandex. Saya menulis tentang ini (masalah yang muncul bagi saya) di atas dan menulis di Internet banyak contoh di mana parameter ketiga ditentukan secara tidak benar dan, bayangkan, kesalahan sudah terjadi pada tahap koneksi - ini, setidaknya, tidak menyenangkan . Saya tidak akan bertele-tele dan akan segera memberikan tautan langsung ke halaman Yandex - menyiapkan program email. Inilah yang perlu kita sambungkan:


Sekarang Anda dapat langsung menuju ke kode itu sendiri:

Header("Tipe Konten: teks/html; charset=utf-8"); kesalahan_pelaporan(0); require_once("fungsi.php"); $mail_login = "yandex_mail"; $mail_password = "kata_mail_password"; $mail_imap = "(imap.yandex.ru:993/imap/ssl)"; // Daftar jenis file yang diperhitungkan $mail_filetypes = array("MSWORD"); $koneksi = imap_open($mail_imap, $mail_login, $mail_password); if(!$koneksi)( echo("Kesalahan saat menyambung ke email - ".$mail_login); keluar; )else( $msg_num = imap_num_msg($koneksi); $mails_data = array(); for($i = 1; $ Saya<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Pertama-tama, kami juga menentukan pengkodean UTF-8 menggunakan header dan menonaktifkan tampilan kesalahan. Kami menghubungkan file function.php dan menentukan pengaturan yang dibahas di atas. Dalam array $mail_filetypes kita menentukan format file yang kita perlukan. Diputuskan untuk melakukan ini untuk membuang sampah yang tidak perlu dan menerima file tertentu. Sambungan ke email dibuat menggunakan fungsi imap_open(), yang, jika berhasil, mengembalikan aliran IMAP, dan jika tidak berhasil, mengembalikan false (tetapi jika Anda mengaktifkan tampilan kesalahan, hal ini tidak terjadi). Kita menyelesaikan pekerjaan dengan stream menggunakan fungsi imap_close() dengan meneruskannya sebagai indikator koneksi. Di antara kedua fungsi ini terdapat pernyataan kondisional reguler.

Jika koneksi berhasil, dengan menggunakan imap_num_msg() kita mengetahui jumlah huruf dalam email dan menambahkan array di mana kita akan menempatkan semua data yang kita perlukan dari aliran. Berikutnya adalah siklus dimana setiap huruf akan diproses nomornya (penomoran dimulai dari 1) secara terpisah.

Memproses header surat

Untuk mendapatkan header surat, Anda perlu menggunakan fungsi imap_header(), parameter kedua adalah nomor surat:

// Header surat $msg_header = imap_header($koneksi, $i);

Pada tahap ini, kita akan menerima sebuah objek dari mana kita akan mengekstrak data yang kita perlukan, menyimpannya dalam array $mails_data. Berikut ini contoh salah satu suratnya:

Tangkapan layar ini menunjukkan bahwa semua data diduplikasi, tetapi ini tidak memainkan peran khusus, kami menggunakan apa yang lebih nyaman. Yang jauh lebih penting adalah pengkodean baris subjek surat itu. Bisa apa saja dan momen ini harus dikontrol. Situasi yang sama berlaku untuk isi surat dan lampirannya.

$mails_data[$i]["time"] = waktu($msg_header->MailDate); $mails_data[$i]["date"] = $msg_header->MailDate; foreach($msg_header->ke sebagai $data)( $mails_data[$i]["to"] = $data->kotak surat."@".$data->host; ) foreach($msg_header->dari sebagai $ data)( $mails_data[$i]["dari"] = $data->kotak surat."@".$data->host; )

Kami menyimpan dalam susunan kami: stempel waktu, tanggal penerimaan surat, email penerima dan pengirim dan melanjutkan untuk menerima subjek surat. Untuk melakukan ini, pertama-tama kita perlu menambahkan tiga fungsi ke file function.php:

Fungsi check_utf8($charset)( if(strtolower($charset) != "utf-8")( return false; ) return true; ) fungsi 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 sebagai $key => $m)( if(!check_utf8 ($m->rangkaian karakter))( $judul .= convert_to_utf8($m->rangkaian karakter, $m->teks); )else( $judul .= $m->teks; ) ) kembalikan $judul )

Nama-namanya sudah cukup jelas dan menurut saya ada baiknya menjelaskan fungsi terakhir saja. Dibutuhkan string yang dikodekan dan menggunakan imap_mime_header_decode() untuk memecahkan kodenya, menghasilkan array objek, masing-masing dengan dua properti: charset dan teks. Maka semuanya menjadi sederhana: memeriksa pengkodean dalam satu lingkaran, mengubahnya menjadi UTF-8 dan menggabungkan topik menjadi satu header dan mengembalikannya.

Sekarang mari kita kembali ke file index.php dan mengeluarkan parameter terakhir:

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

Ini menyelesaikan pemrosesan header email.

Bekerja dengan isi surat

Kami terus secara bertahap membentuk array kami dengan data surat yang diproses dan sekarang untuk mendapatkan isi surat kami perlu menggunakan dua fungsi:

// Isi email $msg_structure = imap_fetchstructure($koneksi, $i); $msg_body = imap_fetchbody($koneksi, $i, 1);

Variabel pertama $msg_structure berisi struktur huruf - ini adalah objek di mana Anda dapat menemukan massanya informasi yang berguna, contoh bagian dari objek ini disajikan di bawah ini:

Yang penting untuk menyelesaikan masalah kita:

  • jenis – jenis utama isi surat, tergantung pada apa yang sampai kepada kami melalui surat, dapat bervariasi dari 0 hingga 7 (setiap angka menunjukkan jenis isinya sendiri yang terletak di badan surat);
  • pengkodean – pengkodean transfer tubuh, bervariasi dari 0 hingga 5 (0 - 7BIT, 1 - 8BIT, 2 - BINARY, 3 - BASE64, 4 - QUOTED-PRINTABLE, 5 - LAINNYA);
  • bagian – susunan bagian huruf yang sesuai dengan struktur objek pada tingkat yang lebih tinggi.

Mari kita lihat lebih dekat properti bagiannya. Hal pertama yang perlu dikatakan adalah bahwa di sel nol array ini terdapat informasi yang sesuai persis dengan teks surat, dan mulai dari yang pertama - hingga file terlampir. Selain itu, di setiap objek tipenya ditunjukkan dan dalam parameter pengkodeannya ditunjukkan secara eksplisit dan implisit.

Struktur suratnya bisa disarangkan sesuai keinginan, setidaknya saya punya kasus ketika mencapai empat atau lima level, jadi untuk memecahnya, seperti yang mereka katakan, kita perlu menulis fungsi rekursif di masa depan.

Fungsi kedua imap_fetchbody() mengambil bagian tertentu dari pesan, paling sering dalam bentuk yang dikodekan.

Sekarang mari tambahkan variabel ke mana kita akan menyimpan versi isi surat yang telah diproses:

$badan = "";

Mari kembali ke file function.php dan menulis fungsi rekursif:

Fungsi pencarian_rekursif($struktur)( $encoding = ""; if($struktur->subtipe == "HTML" || $struktur->tipe == 0)( if($struktur->parameter->atribut == " charset")( $charset = $struktur->parameter->nilai; ) return array("encoding" => $struktur->encoding, "charset" => strtolower($charset), "subtipe" => $struktur- >subtipe); )else( if(isset($struktur->bagian))( return recursive_search($struktur->bagian); )else( if($struktur->parameter->atribut == "rangkaian karakter")( $ charset = $struktur->parameter->nilai; ) return array("pengkodean" => $struktur->pengkodean, "charset" => strtolower($charset), "subtipe" => $struktur->subtipe ) ) )

Fungsi recursive_search() mengambil satu parameter - struktur huruf, yang secara berurutan memeriksa properti dan mendapatkan tiga parameter: pengkodean, rangkaian karakter, subtipe. Titik keluar dari rekursi adalah tidak adanya properti parts dengan sel nol. Tidak ada lagi yang perlu dijelaskan di sini; menurut saya sudah jelas dari kode apa yang terjadi dan bagaimana caranya.

Mari tambahkan satu fungsi lagi untuk mengubah isi surat, yang nanti kita perlukan:

Fungsi struktur_encoding($encoding, $msg_body)( switch((int) $encoding)( kasus 4: $body = imap_qprint($msg_body); break; kasus 3: $body = imap_base64($msg_body); break; kasus 2: $tubuh = imap_binary($msg_body); kasus 1: $tubuh = imap_8bit; kasus 0: $tubuh istirahat ;

$recursive_data = pencarian_rekursif($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1)( $body = $msg_body; ) if($recursive_data["encoding"] == 4)( $body = struktur_encoding($recursive_data["encoding"], $msg_body); if($recursive_data["encoding"] == 3)( $body = struktur_encoding($recursive_data["encoding"], $msg_body); ) if($ recursive_data ["pengkodean"] == 2)( $body = Structure_encoding($recursive_data["encoding"], $msg_body); ) if(!check_utf8($recursive_data["charset"]))( $body = convert_to_utf8($ recursive_data ["rangkaian karakter"], $msg_body )

Setelah kami menerima data dari rekursi, kami secara bertahap memeriksa pengkodean transfer dan, bergantung pada ini, memanggil fungsi Structure_encoding() dengan parameter yang sesuai. Yang terakhir operator bersyarat Kami memperhitungkan bahwa kami bekerja di UTF-8 dan jika setelah semua manipulasi kami mendapatkan pengkodean yang berbeda, kami akan menyandi ulangnya.

Tetap menarik garis:

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

Badan surat dapat berisi teks biasa dan markup HTML dengan gayanya sendiri. Kami mengkodekan dalam BASE64 sehingga selama visualisasi tata letak kami tidak akan terpengaruh.

File terlampir

Di sini kita secara bertahap mendekati akhir penulisan aplikasi kita:

// File terlampir if(isset($msg_structure->parts))( for($j = 1, $f = 2; $j< count($msg_structure->bagian); $j++, $f++)( if(in_array($msg_structure->parts[$j]->subtipe, $mail_filetypes))( $mails_data[$i]["attachs"][$j]["type"] = $msg_struktur->bagian[$j]->subtipe; $mails_data[$i]["lampirkan"][$j]["ukuran"] = $msg_struktur->bagian[$j]->byte[; ]["melampirkan"][$j]["nama"] = get_imap_title($msg_structure->bagian[$j]->parameter->nilai); $mails_data[$i]["melampirkan"][$ j] ["file"] = struktur_encoding($msg_struktur->bagian[$j]->pengkodean, imap_fetchbody($koneksi, $i, $f)); file_put_contents("tmp/".iconv("utf-8" , " cp1251", $mails_data[$i]["melampirkan"][$j]["nama"]), $mails_data[$i]["melampirkan"][$j]["file"] ) ) )

Bagian yang bertanggung jawab untuk memproses file terlampir jauh lebih kecil, dan sekarang - mengapa demikian. Prinsip bekerja dengan file mirip dengan bekerja dengan isi surat, hanya saja kita memulai tahap ini dengan menempatkannya di array properti parts. Jangan lupa untuk menyaring yang tidak perlu dengan memeriksa daftar jenisnya. Menggunakan fungsi file_put_contents() sederhana, kami menyimpan file kami ke server kami di folder tmp.

Saya ingin melihat hasilnya!

Dalam proses pengerjaannya, kita telah membentuk array dengan data $mails_data, dan untuk visualisasinya kita sudah langsung mengerjakannya. Pada artikel ini saya menggunakan surat ujian, yang ada di email saya, mari kita lihat apa yang kita dapatkan pada akhirnya:


Ini kira-kira seperti apa tampilan array Anda, sayangnya, saya harus menyembunyikan konten file tersebut alasan pribadi. Sekarang mari kita beralih ke kita markup HTML:

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

Surat Yandex (Kotak Masuk) |

Jumlah huruf:

tidak ada surat
$mail):?>
Stempel waktu:
Tanggal:
Kepada siapa:
Dari:
Subjek:
Surat di base64:
File terlampir:
$lampirkan):?>
Jenis:
Ukuran (dalam byte):
Nama:
Tubuh:

Saya tidak akan menambahkan gaya di sini, karena pada akhirnya mereka tidak memainkan peran khusus:


Dan di server di folder tmp Anda akan memiliki file.

Kesimpulan

Setelah menyelesaikan semua langkah dalam artikel, Anda akan mencapai hasil yang diinginkan, tetapi semuanya tidak sesederhana kelihatannya - ada kendala yang perlu diperhitungkan. Saat menulis skrip untuk tugas tertentu, Anda perlu memantau pengkodean di semua tahap; surat dapat berasal dari akun email yang berbeda, yang masing-masing mungkin memiliki nuansa tersendiri. Penting juga untuk mempertimbangkan bahwa surat Yandex dan dokumentasinya diperbarui secara berkala, sehingga berbagai sub-item untuk bekerja dengan program email mungkin muncul. Itu saja untuk saya, saya harap artikel ini bermanfaat bagi Anda saat bekerja dengan surat Yandex versi tingkat rendah.

Tidak dapat menerima email dengan lampiran(
jika surat dikirim dengan file – file apa saja – maka teks surat tersebut hilang

Tolong bantu

Jelas... jika Anda mentransfer email dari Yandex ke Yandex, maka semuanya berhasil...
semacam menemukan jawabannya
tetapi tidak jelas mengapa skrip ini tidak menerima file lain selain Word... ada baris MSWORD di sebelahnya, dipisahkan dengan koma, dan meletakkan pdf dan zhpg dan png - hanya Word yang membaca dan menyimpan secara normal.... sesuatu seperti ini

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat