PHPimapが適用されます。 PHPのimapメール関数。 メールフォルダ

ゴロフナ / コリスナ情報

可能なzastosuvanimap関数の1つは、メールデーモンの作成です。これは、サブスクリプションとメールキャリアへのサブスクリプションのkeruvateです。 このタスクを実行するために、健全な、ブランチオフィスには2つの方法があります。 最初の手当は、koristuvachが側に行って彼の行動を確認したことで有罪であり、もう1つは、シートの強度を強化することです。 もう1つの方法は、ステージングスクリプトがcrondaemon-omによって定期的に実行されるようにすることです。 スルーチェーンは、最初の方法ほど人気が​​ありません。

しかし、覚えているように、バイコリストを使用する最も深刻な方法は別の方法です。 cronを使用できるものに、彼と一緒に急いでください。

さて、関数を理解するのは簡単ではありません。 リストの見出しを解析することで問題を克服できるため、スクリプトを処理できます。

vigadamyスクリプト自体のロボットアルゴリズムは不器用です。 デーモンはメールサーバーからデータをインストールし、新しいリストの存在を確認します。 葉っぱがないので、台本ロボットが付いています。 シートとして、最初のシートの見出しを分析する必要があります。 fromフィールドとsubjectフィールドが表示されます。 サブジェクトフィールドに2つの有効なヘッダーオプション(サブスクリプションまたはサブサブスクリプション)のいずれかが含まれている場合、fromフィールドの値を検証するか、アクティブになる(確認済み)か、テーブルから表示されるレコード。 どちらの場合も、フィールドに示されているアドレスで、スクリプトに関する追加情報を提供してください。 次のシートは次のシートで示されます。 主題が容認できるトピックに復讐しない場合、恩赦についてのリマインダーが強制され、シートも削除するように指定されます。 次のシートに進むPotimスクリプト。 すべての葉の分析が終了すると、ワインボックスはクリアされます。

スクリーンショットを表示するには、imap_open関数を使用します。 PHPシャードは、いくつかのプロトコルでロボットをサポートします。 ポップアップのポート110(標準)にpop3があります。 $my_box変更スクリプトを入力した結果を追加しましょう。

$ my_box = imap_open( "(you.pop.host/pop3:110)"、 "login"、 "password");

先に進んで、この変更がすべてのimap関数で実用的であることを確認しましょう。 葉の有無を確認するためのボックスを用意しました。 imap_num_msg関数は再検証を実行します。

$ n = imap_num_msg($ my_box);

その結果、箱の中の葉の数が変更されました。 数値はゼロより大きいか、(空のボックスのように)より高価になる可能性があります。 葉がある場合は、whileサイクルで葉を確認し、シートの数を1つずつ増やしていきます。 ボックスの最初のシートは、配列の最初の要素として、マザー番号0になることを考慮してください。 シートの数を増やすには、$ mの値を0に変更してから、サイクルのことを考えて、їїの値を1 $m++増やします。

ヘッダーを解析してクリックするには、imap_headerとimap_fetch_overviewの2つの関数で十分です。 それらのスキンケア、クリームスクリーンの場合、シート番号を表示する必要があります。 私たちの意見では、ワインのサイクルの途中で、$mが変化します。

imap_headerは、結果をシートヘッダーに関する情報を取得するオブジェクトに変換します。 2番目の真ん中で、復讐するオブジェクトは、ある意味を復讐するためのある種の配列です。 個人、adl、メールボックス、およびホスト。 私たちはそれらをtsіkavlyat少ないメールボックスとホストです。 їхを送信すると、シートの送信元のアドレスが取得されます。

$ h = imap_header($ my_box、$ m); $ h = $ h-> from; foreach($ h as $ k => $ v)($ mailbox = $ v-> mailbox; $ host = $ v-> host; $ personal = $ v-> personal; $ email =$mailbox。"@"。 $ host;

imap_fetch_overview-シートのテーマをフェッチできるようにします。 同じ目的で、vicorateとimap_headerを使用することは可能ですが、いくつかの理由により、使用できない場合があります。 関数を回転させる配列から、必要なのはサブジェクトフィールドだけです

$ s = imap_fetch_overview($ my_box、$ m); foreach($ s like $ k => $ v)$ subj = $ v-> subject;

さらに、私たちの活動は、電子メールがベースから勝ち取られるところまで実行され、そこで明白な場合は、行全体にのようなメモを付けるか、を参照してください。 サイトでサブスクリプションのフォームに記入した後、前払い者のステータスが0になり、サブスクリプションを確認した後、ワインが1に変更されたとします。

If($ subj == "subscribe")(mysql_query( "update subscribe set stat = 1 where email = $ my_email"); $ del = imap_delete($ my_box、$ m); mail($ email、$ add_sbj、$ add_text 、$ headers);)else if($ subj == "unsubscribe")(mysql_query( "delete from subscribe where email = $ my_email"); $ del = imap_delete($ my_box、$ m); mail($ email、$ del_sbj、$ del_text、$ headers);)else($ del = imap_delete($ my_box、$ m); mail($ email、$ err_sbj、$ err_text、$ headers);)すべてのスクリプトを入力すると、画面がクリアされます。 $ clear = imap_expunge($ my_box);

ダナ 最も単純なプログラム、PHPでは、動的に変化するサイトだけでなく、表示されないサービスも記述できるという事実のデモンストレーションのみです。

データベースとの接続のいくつかのパラメータに関するプログラムのシステムのリスト:

「config.php」を含める; //dbエントリ$my_box= imap_open( "(you.pop.host/pop3:110)"、 "login"、 "password"); $ n = imap_num_msg($ my_box); $ m = 0; $ add_text="前払いを確認するため"; $ add_sbj = "追加しました!"; $ del_text="あなたは消耗品のリストから削除されました。"; $ del_sbj="リストから削除"; $ err_text="配布の管理のためだけにメールボックス画面を送信してください"; $ err_sbj="エラー"; $ headers = "from:subscribe robot x-mailer:php4 content-type:text / plain; charset = windows-1251"; if($ n!= 0)(while($ m ++< $n) { $h = imap_header($my_box, $m); $s = imap_fetch_overview($my_box, $m); $h = $h->から; foreach($ h as $ k => $ v)($ mailbox = $ v-> mailbox; $ host = $ v-> host; $ personal = $ v-> personal; $ email =$mailbox。"@"。 $ host; $ my_email = mysql_escape_string($ email);)foreach($ s as $ k => $ v)$ subj = $ v-> subject; if($ subj == "subscribe")(mysql_query( "update table set stat = 1 where email = $ my_email"); // print mysql_error(); $ del = imap_delete($ my_box、$ m); mail($ email、$ add_sbj、$ add_text、$ headers);)else if($ subj == "unsubscribe")(mysql_query( "delete from table where email = $ my_email"); mail($ email、$ del_sbj、$ del_text、 $ headers);)else($ del = imap_delete($ open_box、$ m); mail($ email、$ err_sbj、$ err_text、$ headers);))$ clear = imap_expunge($ my_box); )。

リストには毎日の詳細があります。たとえば、winからkoiに変換することができます。 郵便のスクリーンショット最高経営責任者は薄すぎる。 革のような機能的な表面性は、必要に応じて追加することができます。

Webプログラムは、koristuvachの特別な電子メールを生成する場合があります。 現時点では、独自の信頼できる電子メールコードSquirrelMailまたはRoundcubeを作成できます。 あなたが何を得るかに関係なく、IMAPメールの仕事を知ることは黒くなります。

PHProzpovidaetsyaでIMAPを使用して練習する方法。 第一に、に接続するために必要な機能 サーバーに送信その読書は彷彿とさせます。 反対に、リモートサポートやプログラムの関与など、電子メールでの作業について話しましょう。

デモンストレーションする 機能性、ハッキングはコードを適用するので、ハッキングしてメールクライアントでスクリプトを実行できます。

Wikiに必要な機能のURL設定:

  • func-必要に応じて関数のタイプ(例:読み取り Eメール、メール画面を見て、リマインダーを参照してください)
  • folder-接続用のメールボックスフォルダーの名前(例:受信トレイ、受信トレイ、スパム)
  • uid –一意の電子メール識別子

パラメータはヘルプ用に取得できます$_GETおよびswitchはwikiに使用できます。

IMAPサーバーへの接続

IMAPサーバーとの接続を確立するには、以下に示すように、imap_connect()関数を使用します。

知る方法として、私はそのパスワードとサーバーに接続するために必要なパラメーターを持っています。 追加のパラメータについては、マニュアルで確認できます。

メール画面への道は一列に並んでおり、カーリーアーチのサーバーとポートを識別し、メールフォルダの名前を示しています。

フォルダの槍列の軸 エントリー郵便サービス:

  • Gmail(imap.gmail.com:993 / imap / ssl)受信トレイ
  • Yahoo(imap.mail.yahoo.com:993 / imap / ssl)INBOX
  • AOL(imap.aol.com:993 / imap / ssl)受信トレイ

一部のサーバーではSSLが有効になっていないため、SSL課金を省略する必要があります。 他のサーバーは、NOVALIDATE-CERTを承認する責任がある有効な証明書を獲得できます。

メールサーバーに接続しているので、このようなタイプのアクティビティに使用される機能に驚嘆することができます。

  • メールレコードにメール画面フォルダのリストを表示する
  • papacyからの電子メールのリストを確認する
  • 著者の電子メールを再検討する

メールフォルダ

エントリー , Nadislanі , スミスі スパム— qiフォルダーは、実際には皮膚のような形式の電子メールで使用でき、corystuvachsは多くの場合強力なフォルダーを作成できます。 これらのフォルダ内のメモを確認するには、接続行を変更する必要があります。 たとえば、前の行のzastosuvat "INBOX"(Vhіdnі)。 必要に応じて、スパムフォルダに接続し、スパム(スパム)のタグを付けて置き換えます。 Ale hocha tse can buti pererahovane yak スパム電子メールの物理的な記録では、まるでメールクライアントに驚嘆するかのように、バックグラウンドのフォルダの正しい名前が異なる場合があります。 imap_list()を使用して、クラウドレコード内の現在のすべてのフォルダーを再マップできます。

"; foreach($ folder as $ folder)($ folder = str_replace("(imap.gmail..php?folder="。$folder。"&func = view">"。$folder。 "";) エコー "";

imap_list()の出力パラメータとしてimap_open()を非推奨にして、リクエストにハンドルを渡すのは私たちの責任です。 また、パスを通過することについても有罪です(たとえば、INBOXなどのフォルダーなしで)。 3番目のパラメーターは、使用可能なフォルダーを要求します。

通知に関する通知

スキンフォルダには利用可能な電子メール通知のリストが含まれているので、電子メール画面で通知のリストを作成する方法を考えてみましょう。

ヘルプimap_num_msg()に利用できる少量のリマインダーを取得する必要があります。 次に、imap_header()関数を微調整して、スキンケアヘッダーの情報を取得できます。

残りの20枚の葉が必要だとしましょう。

($ numMessages-20); $ i--)($ header = imap_header($ imap、$ i); $ fromInfo = $ header-> from; $ replyInfo = $ header-> reply_to; $ details = array( "fromAddr" =>(isset($ )fromInfo-> mailbox)&& isset($ fromInfo-> host))?$fromInfo->mailbox。"@"。$fromInfo-> host: ""、 "fromName" => $ fromInfo-> personal: ""、 "replyAddr" =>(isset($ replyInfo-> mailbox)&& isset($ replyInfo-> host))?$replyInfo->mailbox。"@"。$replyInfo-> host: ""、 "replyName" =>( isset($ replyTo-> personal))?$ replyto-> personal: ""、 "subject" =>(isset($ header-> subject))?$ header-> subject: ""、 "udate" =>( isset($ header-> udate))?$ header-> udate: ""); $ uid = imap_uid($ imap、$ i); エコー "

    ";エコー"
  • タイプ:"。$details["fromName "];echo""。$details["fromAddr"]。
  • ";エコー"
  • 主題:"。$details[" subject "] ..php?folder="。 $folder。 "&id="。 $ uid ..php?folder="。$folder。"&uid="。$uid。"&func=delete">削除
  • ";エコー"
"; }

$ Imapは、必要な容量のbutivodkritiによるものです。 imap_num_msg()を差し引いて、リマインダーの数を変えて、残りの20枚の葉を調べることができます。 呼び出し番号と電子メール番号は、ヘッダーに関する情報を取得するためにimap_header()によって指定されます。この情報は、ディレクトリ名、電子メールアドレス、名前、件名などの発信者情報に転送できます。

外国番号形式の電子メールの番号は、通知の一意の識別子ではないことに注意してください。 郵送画面に½100の葉がある場合、残りの数は100になり、前の数は99になります。 番号100の下に通知が表示されたらすぐに、新しい通知を削除します。次の番号は100になります。

攻撃を特定するには、電子メールの一意の識別子を取得する必要があります。 スキンシートには、電子メールを送信するために使用できる一意の識別子であるUIDランクが含まれている場合があります。imap_uid()番号関数はUID固有であり、時間の経過とともに変化することはありません。

リマインダーのために再訪

右側では、電子メールを読むのはそれほど簡単ではありません。これまでのように、ミトゥルコラディアの手紙に単語を書く必要があります。 適応クラスには、ストック用に3つの機能があります。

エンコーディング)(ケース3:return imap_base64($ text);ケース4:return imap_qprint($ text);デフォルト:return $ text;))//マルチパートif($ structure-> type == 1)(foreach($ structure -> Parts as $ index => $ subStruct)($ prefix = ""; if($ partNumber)($ prefix = $partNumber。"。";)$ data = get_part($ imap、$ uid、$ mimetype、$ subStruct、$ prefix。($ index + 1))、if($ data)(return $ data;)))))return false; )function get_mime_type($ structure)($ primaryMimetype = array( "TEXT"、 "MULTIPART"、 "MESSAGE"、 "APPLICATION"、 "AUDIO"、 "IMAGE"、 "VIDEO"、 "OTHER"); if($ structure -> subtype)(return $ primaryMimetype [(int)$structure->type]。"/"。$structure->subtype;)return "TEXT / PLAIN";)

GetBody()関数は電子メールを受け取り、UIDとIMAPセッションを渡します。 真ん中の関数は、text / HTMLのようなコンテンツタイプのget_part()関数に変換されます。 電子メール通知の通常のテキストは読みやすくなっています。 このようにして、メールの途中にあるHTMLを理解しようとします。

ヘルプ関数imap_fetchstructure()の後に電子メールの構造を読んでみましょう。 FT_UIDを一貫して渡すのではなく、UIDを変更するようにライブラリ関数を変更しました。

ヘルプ関数get_mime_type()の電子メールのMIMEタイプも必要です。 ЄVіsіmMIMEタイプ。これは、この関数によって整数の形式でローテーションされます。

  • 0-テキスト
  • 1-マルチパート
  • 2-メッセージ
  • 3 –アプリケーション
  • 4-オーディオ
  • 5-画像
  • 6-ビデオ
  • 7-その他

MIMEタイプの追加の配列のために、実際のMIMEタイプの行に変換しています。

ウェアハウスの追加は多数のサブタイプを構成する可能性があるため、正しいmimeタイプのサブタイプが渡された場合、すべてのサブタイプ、数のバイコリスト部分、およびimap_fetchBody()サブタイプからの電子メールの取得を再帰的にトラバースします。

次に、mivikoristovuєmovіdpovіdnudekoduvannyavіdpovіdnoからkoduvannyaタイプpodomlennyaにvertaєmozmіst。 利用可能なコーディングタイプの最新リスト:

  • 0〜7ビット
  • 1〜8ビット
  • 2-バイナリ
  • 3-BASE64
  • 4-QUOTED-PRINTABLE
  • 5-その他

ヴィスノヴォク

IMAPサーバーへの接続の基本を確認し、使用可能なフォルダーの中央にリストを一覧表示し、電子メール通知を読み終えました。 メモの次の側面では、添付ファイルを処理するためのリモートサポートなど、メールクライアントの追加機能を実装するために使用できる機能について説明します。

数日前、PHPで小さなモジュールを作成するタスクがありました。これにより、入力を操作できるようになります。 Google Trochs POP3і IMAP.
Alevybіrbuv明らかなscho私はIMAPをより機能的で現代的なPOP3プロトコルに勝ち取ります。

次に、手を汚す必要があります。IMAPプロトコルの操作方法、Yandex/Googleメールサーバーからリーフを取得する方法です。

便利な仕事のために、私は図書館を選びました PhpImapシャードは、私に必要なすべてのタスクをすばやく簡単に実装することはできません。

メールサーバーへの接続。

これで、プロトコルとライブラリを選択した場合、メールサーバーへの接続を試みることができます。

IMAPプロトコルで完全なPHP操作を行うには、拡張機能を有効にする必要があります php_imap.dll / imap.so php.iniファイル内。

穂軸については、Yandexメールに接続してみてください。そうすれば、問題が最も少なくなります。

//ライブラリを含めるinclude( "/ phpImap / Mailbox.php"); include( "/ phpImap / IncomingMail.php"); //透明性のために、メールサーバーに接続するための定数を作成します。 define( "MAIL_IMAP_SERVER"、 "imap.yandex.ru"); define( "MAIL_IMAP_SERVER_PORT"、993); define( "MAIL_IMAP_LOGIN"、 ""); define( "MAIL_IMAP_PASS"、 "example_pass"); define( "MAIL_IMAP_PATH"、 "("。MAIL_IMAP_SERVER。":"。MAIL_IMAP_SERVER_PORT。"/ imap / ssl)INBOX"); $ mailbox = new PhpImap \ Mailbox(MAIL_IMAP_PATH、MAIL_IMAP_LOGIN、MAIL_IMAP_PASS、__DIR__); try($ mailbox-> getImapStream();)catch(Exception $ e)(die($ e-> getMessage());)

Yakmibachimoコンストラクタークラス メールボックス次の引数を受け入れます。

  • MAIL_IMAP_PATH-サーバーアドレス(MAIL_IMAP_SERVER)、接続ポート(MAIL_IMAP_SERVER_PORT)、接続タイプ(imap)を設定し、接続が暗号化されることを示します(ssl)。 カーリーアームの後、接続されるまで、この場合は入力通知(INBOX)まで、フォルダーを指定してください。
  • MAIL_IMAP_LOGIN-郵便のスクリーンショット、接続します。
  • MAIL_IMAP_PASS-パスワード(ほとんどの場合、パスワードは郵送されたスクリーンショットからのものです)。
  • __DIR__-添付ファイルとメール通知が保存されるフォルダまでずっと。

その後、私たちのつながりがこの方法で起こったとは信じられません getImapStream()接続の理由が発生しなかったかのように、プログラムは接続の理由をそれほど遠くない場所で非難します。

Yandexのメール設定では、IMAPプロトコルを介して接続できるようになっている可能性があることに注意してください。

それでは、Gmailメールに再接続しましょう。

Define( "MAIL_IMAP_SERVER"、 "imap.gmail.com"); define( "MAIL_IMAP_SERVER_PORT"、993); define( "MAIL_IMAP_LOGIN"、 ""); define( "MAIL_IMAP_PASS"、 "example_pass"); define( "MAIL_IMAP_PATH"、 "("。MAIL_IMAP_SERVER。":"。MAIL_IMAP_SERVER_PORT。"/ imap / ssl)INBOX");

実際のところ、フロント接続の前では実際には機能しませんが、サーバーに接続するときはすべての責任があります。
Tse問題pov'yazanaztim、scho in GmailロボットIMAPのロックが有効になっている。 [IMAPプロトコルの背後にあるアクセス]⇒[IMAPをオンにする]オプションの[リマインダーPOP/IMAP]タブの設定でオフにできます。

IMAPプロトコルでロボットを有効にした後、 アドオンパスワードを作成する。 これを行うには、このプロファイルに対して2要素認証を作成する必要があります。 その後、yogoの作成に進むことができます。 プログラムの新しいパスワードを作成する場合は、サーバーに接続するためにそのパスワードをMAIL_IMAP_PASS定数に入力する必要があります。

補遺パスワードを作成すると、電話をかけないとサーバーに接続できない場合がありますが、Gmailサービスが鳴るまでパスワードは停止しておらず、5〜60分借りることに注意してください。

データの収集

接続が成功した後、vikonatiはサーバーからのさらなる通知を求めることができます。 誰のために私たちは方法を勝ち取るでしょう searchMailBox(string $ criteria)実際、これはラッピング方法です imap_search。 ここで重要なのは、$ criteria引数が通知を必要とするための主要な基準であり、メール通知の詳細情報を削除する必要があるため、メソッド自体が要素識別子をローテーションすることです。

$ mailsIds = $ mailbox-> searchMailBox( "ALL");

ヤクヴィーはすでに推測しました、ここで私たちはすべての情報を取ります。
そして今、ジョークの他の同様に重要な基準でそれを理解しようとしましょう:

//3日以内のすべての通知。 $ mailsIds = $ mailbox-> searchMailBox( "SINCE" "。date(" d-M-Y "、strtotime("-3 day "))。" ""); //3日間未読の通知。 $ mailsIds = $ mailbox-> searchMailBox( "UNSEEN SINCE" ".date(" d-M-Y "、strtotime("-3 day "))。" ""); //TEXTヘッダーでそのようなステートメントのアラートを検索します。 $ mailsIds = $ mailbox-> searchMailBox( "TEXT"新しいメールボックス""); //BODYヘッダーでこの種の値を検索します。 $ mailsIds = $ mailbox-> searchMailBox( "BODY"情報メールボックス""); //管理者のメールを検索します。 $ mailsIds = $ mailbox-> searchMailBox( "FROM" ");//SUBJECTヘッダーの後の通知を削除します$mailsIds= $ mailbox-> searchMailBox(" SUBJECT"電話の更新を発行します"");

そのお尻は、冗談の勝利基準の基礎を親切に反映しています。

情報の撤回

これで、参照識別子の配列がある場合、それを処理する準備が整いました。

//残りの通知のIDを配列から取得します。 $ id = end($ mailsIds); //通知情報を取得するには、IncomingMailクラスのオブジェクトのインスタンスが必要です。 $ mail = $ mailbox-> getMail($ id); //Otrimuєєєєєєєєєєєєе添付ファイルは、voіdomlennya、yakschovіnєの前にあります。 $ mail-> getAttachments(); //メモを表示します。 echo $ mail-> textHtml;

Axes miyotrimalizvіdomlennyaz私たちのシートは問題なく挿入できます。

能力を追加しました。

このライブラリには、メールによる指示を処理するための基本的な方法もいくつかあります。

ヨガIDについて覚えておいてください。

$ mailbox-> saveMail($ id、$id。"。eml");

IDの未読として通知を復元します。

$ mailbox-> markMailAsUnread($ id);

ヨガIDの既読としてリマインダーをインストールします。

$ mailbox-> markMailAsRead($ id);

ヨガIDのリマインダーアイコンにインストールされます。

$ mailbox-> markMailAsImportant($ id);

ヨガIDのリマインダーが表示されます。

可能なzastosuvanimap関数の1つは、メールデーモンの作成です。これは、サブスクリプションとメールキャリアへのサブスクリプションのkeruvateです。 このタスクを実行するために、健全な、ブランチオフィスには2つの方法があります。 最初の手当は、koristuvachが側に行って彼の行動を確認したことで有罪であり、もう1つは、シートの強度を強化することです。 もう1つの方法は、ステージングスクリプトがcronデーモンによって定期的に実行されるようにすることです。 スルーチェーンは、最初の方法ほど人気が​​ありません。

しかし、覚えているように、バイコリストを使用する最も深刻な方法は別の方法です。 あなたがcrondを獲得する能力を持っている人に、彼と一緒に急いでください。

さて、関数を理解するのはそれほど簡単ではありません。 ロシア人民共和国で働いていたリュディナは、彼らと一緒に練習する方法を簡単に理解しています。 リストの見出しを解析することで問題を克服できるため、スクリプトを処理できます。

vigadamyスクリプト自体のロボットアルゴリズムは不器用です。 デーモンはメールサーバーからデータをインストールし、新しいリストの存在を確認します。 葉っぱがないので、台本ロボットが付いています。
シートとして、最初のシートの見出しを分析する必要があります。 fromフィールドとsubjectフィールドが表示されます。 サブジェクトフィールドに2つの有効なヘッダーオプション(サブスクリプションまたはサブサブスクリプション)のいずれかが含まれている場合、fromフィールドの値を検証するか、アクティブになる(確認済み)か、テーブルから表示されるレコード。 どちらの場合も、フィールドに示されているアドレスで、スクリプトに関する追加情報を提供してください。 次のシートは次のシートで示されます。 主題が容認できるトピックに復讐しない場合、恩赦についてのリマインダーが強制され、シートも削除するように指定されます。 次のシートに進むPotimスクリプト。
すべての葉の分析が終了すると、ワインボックスはクリアされます。

フローチャートを読んでもかまわないので、右に進みましょう。 メールボックスを開くには、imap_open関数を使用します。 RNRシャードは、多数のプロトコルでロボットをサポートします。ボックスを使用して、ロボットに選択されたプロトコルを明示的に示す必要があります。 私たちのものは110ポート(標準)にPOP3ポートを持っています。 $my_box変更スクリプトを入力した結果を追加しましょう。


先に進んで、この変更がすべてのimap関数で実用的であることを確認しましょう。 葉の有無を確認するためのボックスを用意しました。 imap_num_msg関数は再検証を実行します。

$ n = imap_num_msg($ my_box);

その結果、箱の中の葉の数が変更されました。 数値はゼロより大きいか、(空のボックスのように)より高価になる可能性があります。
葉がある場合は、whileサイクルで葉を確認し、シートの数を1つずつ増やしていきます。 ボックスの最初のシートは、配列の最初の要素と同様に、母番号0になることを考慮してください。
シートの数を増やすには、$ mの値を0に変更してから、サイクルの考え方として、$m++を1つ増やします。

ヘッダーを解析してクリックするには、imap_headerとimap_fetch_overviewの2つの関数で十分です。 それらのスキンケア、クリームスクリーンの場合、シート番号を表示する必要があります。 私たちの意見では、ワインのサイクルの途中で、$mが変化します。

imap_headerは結果をオブジェクトに変換して、シートヘッダーに関する抽出された情報を取得します。 2番目の真ん中で、復讐するオブジェクトは、ある意味を復讐するためのある種の配列です。 個人、adl、メールボックス、およびホスト。 私たちはそれらをtsіkavlyat少ないメールボックスとホストです。 їхを送信すると、シートの送信元のアドレスが取得されます。


$ h = $ h-> from;
a
foreach($ h as $ k => $ v)(
$ mailbox =$v->メールボックス;
$ host =$v->ホスト;
$ personal =$v->個人;
$ email =$mailbox。 ? @¬。 $ host;

imap_fetch_overview-シートのテーマをフェッチできるようにします。 同じ目的で、vicorateとimap_headerを使用することは可能ですが、いくつかの理由により、使用できない場合があります。 関数を回転させる配列から、必要なのはサブジェクトフィールドだけです


foreach($ s as $ k => $ v)(
$ subj =$v->件名;
}

さらに、私たちの作業は、電子メールがベースから勝ち取られるまで実行され、同時に、行全体に「perverenu」というレコードをマークするか、それを表示します。 サイトでサブスクリプションのフォームに記入した後、前払い者のステータスが0になり、サブスクリプションを確認した後、ワインが1に変更されたとします。

if($ subj == "SUBSCRIBE")(
mysql_query( "UPDATE subscribe SET stat = 1 WHERE email = $ my_email");

}
mysql_query( "DELETE FROM subscribe WHERE email = $ my_email");
$ del = imap_delete($ my_box、$ m);
}
そうしないと(
$ del = imap_delete($ my_box、$ m);
}

上で述べたように、vikonannyaの後、すべてのスクリプトがボックスをクリアします。


最も単純なプログラムが与えられています。これは、PHPで動的に変化するサイトだけでなく、表示されないサービスも記述できるという事実のデモンストレーション以上のものです。 明らかに、シェルのスクリプトを作成するとき、pHPは競合他社のPerlの前で停滞しませんが、それ以下ではありません...

データベース(db.php)との接続のいくつかのパラメーターを含むプログラムの設定のリスト:

「db.php」を含める;
$ my_box = imap_open( "(you.pop.host/pop3:110)"、 "login"、 "password");
$ n = imap_num_msg($ my_box);
$ m = 0;
$ add_text = "

サブスクリプションの確認が必要です」;
$ add_sbj = "追加しました!" ;
$ del_text = "

Vibachte、aletsyaの郵便スクリーンショット
tіlkiadministruvannyarozsilki";
$ err_sbj="エラー";
$ headers = 差出人:サブスクライブロボット

Xmailer:PHP4

コンテンツタイプ:テキスト/プレーン; charset = UTF-8
" ;
if($ n!= 0)(
while($ m ++< $n ) {
$ h = imap_header($ my_box、$ m);
$ s = imap_fetch_overview($ my_box、$ m);
$ h = $ h-> from;
foreach($ h as $ k => $ v)(
$ mailbox =$v->メールボックス;
$ host =$v->ホスト;
$ personal =$v->個人;
$ email =$mailbox。 「@」。 $ host;
$ my_email = mysql_escape_string($ email);
}
foreach($ s as $ k => $ v)(
$ subj =$v->件名;
}
if($ subj == "SUBSCRIBE")(
mysql_query( "UPDATE table SET stat = 1 WHERE email = $ my_email");
// mysql_error();を出力します
$ del = imap_delete($ my_box、$ m);
メール($ email、$ add_sbj、$ add_text、$ headers);
}
elseif($ subj == "UNSUBSCRIBE")(
mysql_query( "DELETE FROM table WHERE email = $ my_email");
$ del = imap_delete($ my_box、$ m);
メール($ email、$ del_sbj、$ del_text、$ headers);
}
そうしないと(
$ del = imap_delete($ open_box、$ m);
mail($ email、$ err_sbj、$ err_text、$ headers);
}
}
$ clear = imap_expunge($ my_box);
}
?>


電子メールは情報を交換するための最も重要なツールであり、仕事で勝利したかのように、状況にこだわって歌います。シートがメールに送信され、必要なデータをきしむように受信する必要があります。 ちなみに、Yandexについて話しましょう-この記事では、読者の皆様、スクリーンショットからシートを取得する方法を教えてください。シートに添付ファイルがある場合は、オプションを整理します-結果として、それに対する遠い操作のためのzavantazhit。

私自身zzimzavdannyamzіtknuvsyadositは長い間、そしてnayavnostіの小さなdosvіduでさえ、必要な結果を達成するためにメールプログラムYandexvytrativの豊富な時間と神経で働きます。 私の最初の許しは、多くのWeb小売業者と同様に、ネットで同様の株を集中的に検索し始めましたが、Yandexの非常に助け(追加の助け)でスピードを上げることはありませんでした。 したがって、基本的な情報は十分ではありませんが、この種のスクリプトを作成するために重要です(詳細は以下を参照)。 その時、行われたことの本質であるスクリプトを書く必要がありました:商品の価格からxls形式の商品のリストをYandexに送信するとき、それを完了する必要がありました(データを解析して解析する)インターネットストアのデータベースから、結果に応じて、ここでオンにし、オンにします)。

まず、スクリプトを作成する前に行う必要があること-アクションの計画に名前を付けましょう。これは9つのポイントで構成されています。

  1. メールプロトコルを介したアクセスを許可するメッセージを送信できます。
  2. NamіtimoPHPプログラムの構造そのものが、ファイルのコーディングにとって重要です。
  3. IMAPメールプロトコルとその機能をよく理解してください。
  4. ログインとアカウントパスワードを介してYandexに接続し、どの段階でもご容赦いただけます。
  5. シートの頭を切りましょう。
  6. シートのその実行可能な本体を取り除きます。
  7. ファイルの添付に注意してください。
  8. 視覚化されたロボットの視覚化。
  9. ブドウの木を切りましょう。

トピックはボリュームですが、すべてを可能な限りコンパクトで明確にするように努めます。 お母さん、やってみましょう。

Nalashtuvannya posti

以下のスクリーンショットに示すように、メールボックスに移動してセットアップに移動しましょう。



これで、IMAPおよびPOP3プロトコルを介してメールで多くの作業を行いました。


ここには絵のように絵を描く人がたくさんいますが、私は一緒に、そしてアクセスできれば何度も固執します。 そのために、別の設定がある場合は、スクリーンショットにチェックマークを付けて、IMAPプロトコルを介したアクセスを許可します。

プログラム構造їїコーディング

このアプリケーションでは、プログラムの構造を折りたたむことはなく、シャードは必要ありませんが、必要なものだけを追加します(私はSublime Textエディターで作業します)。


  • tmp-シートからファイルを挿入するyakuzavantazhuvatememo内のフォルダーなので、悪臭を放ちます。
  • .htaccess-Apacheサーバーのようなサーバー部分の構成。
  • Functions.php-ここに関数を追加します。
  • main.css-スタイルファイル;
  • index.php-プログラムのエントリポイント。

UTF-8をエンコードし、すぐに次の行を含む.htaccessファイルをロードします。

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

IMAPプロトコル

最初のポイントに目を向けると、POP3プロトコルを介してYandexを使用することもできることは明らかです。 なぜIMAP自体なのか? Zih 2チャンネルIMAPє新しい代替POP3、また、vinは低いかもしれません(їх生き残ることは可能です、skoristavshisvіkіpedієyu)、しかし同時にバイブレーターでそれはそれらより少なく追加されました、schoвінnovіshiy。 特定のシートの選択については特に気にしません。 実際のところ、POP3プロトコルを無効にする必要がある場合は、IMAPの前に必要なすべての機能が新しいプロトコルで機能します。

追加のIMAPプロトコルについてはYandexメールに接続してください

メールに接続するには、メールのログイン、パスワード、メールサーバーのアドレスの3つのパラメータを知る必要があります。 2つのパラメーターに問題がないため、もう1つはYandexで知られています。 tseについて(ビニールのように私は問題を抱えています)私はもっと多くのアプリケーションで書いていますが、表示の3番目のパラメーターは間違っており、私自身を明らかにするために、すでに接続の段階で彼らは許しを非難しています-tse、少なくとも、受け入れられない。 しばらくは回らないので、Yandex側に直接メッセージを送ります- メールプログラムの設定。 接続に必要なもの:


これで、コード自体に直接ジャンプできます。

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)"; //ファイルタイプのリスト$mail_filetypes= array( "MSWORD"); $ connection = imap_open($ mail_imap、$ mail_login、$ mail_password); if(!$ connection)(echo( "Mailpardon-"。$mail_login); exit;)else($ msg_num = imap_num_msg($ connection); $ mails_data = array(); for($ i = 1; $ i<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

追加のヘッダーにUTF-8エンコーディングを追加し、パードンを含める必要があります。 すでに述べたように、functions.phpファイルを含め、設定を指定します。 $ mail_filetypes配列には、必要なファイル形式があります。 そのため、特定のファイルをチェックして選択する必要がないことを確認するために行われました。 これは、IMAP-potが遠くにあるかのように、ヘルプ関数imap_open()の背後に送信され、遠くない場合はfalseに送信されます(または、許しを増やす必要がありますが、そうではありません)。 ヘルプ関数imap_close()のスレッドを使用して作業を完了し、їійідніднанняインジケーターを渡します。 Mіzhtsimiの2つの関数は、最も賢い演算子です。

ヘルプimap_num_msg()を遠方から呼び出すと、送信するリーフの数と配列を追加することがわかります。この配列に、ストリームから必要なすべてのデータを配置します。 ダリは、革のシートがその数(番号は1のようなもの)のオクレモのために処理されるというサイクルに従います。

ヘッダートリム

シートヘッダーを削除するには、imap_header()関数を高速化する必要があります。別のパラメーターはシート番号です。

//シートヘッダー$msg_header= imap_header($ connection、$ i);

この段階で、データが必要なオブジェクトを取得し、$mails_data配列に保存します。 シートの1つの軸バット:

このスクリーンショットでは、すべてのデータが複製されていることは明らかですが、それらは特別な役割を果たしておらず、より便利なものはより困難です。 さらに重要なのは、これらのシートをコーディングすることです。 あなたはそのようになることができ、現時点ではあなたがコントロールする必要があります。 これは状況そのものであり、シートのタイトルと添付ファイルがあります。

$ mails_data [$ i] ["time"] = time($ msg_header-> MailDate); $ mails_data [$ i] ["date"] = $ msg_header-> MailDate; foreach($ msg_header-> to as $ data)($ mails_data [$ i] ["to"] = $data->mailbox。"@"。$data->host;)foreach($ msg_header-> from as $ data)($ mails_data [$ i] ["from"] = $data->mailbox。"@"。$data->host;)

タイムスタンプ、シートが取り下げられた日付、電子メールアドレス、および権利所有者を配列で考慮し、それらによってシートの削除に渡されます。 そのために、functions.phpファイルに3つの関数を追加し始める必要があります。

Function check_utf8($ charset)(if(strtolower($ charset)!= "utf-8")(return false;)return true;)function convert_to_utf8($ in_charset、$ str)(return iconv(strtolower($ in_charset)、 "utf-8"、$ str);)function get_imap_title($ str)($ mime = imap_mime_header_decode($ str); $ title = ""; foreach($ mime as $ key => $ m)(if(!check_utf8 )($ m-> charset))($title。=convert_to_utf8($ m-> charset、$ m-> text);)else($title。=$ m-> text;))return $ title; )。

私が言う名前は、私が思うに、vartoは残りの関数を説明します。 imap_mime_header_decode()がїїをデコードするのに役立つコーディング行が必要です。その結果、オブジェクトの配列が回転し、任意の数の累乗のスキン(エンコード)およびテキスト(トピックごとのテキスト)が表示されます。 Daliはすべて単純です。ループで、コードを再コーディングし、UTF-8に設定して、トピックを1つの見出しに接着し、向きを変えます。

次に、index.phpファイルを見て、最後のパラメーターを取得しましょう。

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

これで、シートの見出しが完成します。

シート本体のプラツィユエモ

シートの変更されたデータから配列を形成するために段階的に進み、次に、本体を削除するために、2つの機能でスピードアップする必要があります。

//リーフボディ$msg_structure= imap_fetchstructure($ connection、$ i); $ msg_body = imap_fetchbody($ connection、$ i、1);

$ msg_structureの最初の変更には、リーフ構造があります。オブジェクト全体で、基本情報の大部分を知ることができます。以下の表現オブジェクトの一部の例です。

私たちのタスクを達成するために重要なこと:

  • type –シートタイトルの最初のタイプ。メールの内容に応じて、0から7に変更できます(シートタイトルにある独自のタイプのコンテンツのためのスキンディジット)。
  • エンコーディング–ボディ転送のコーディング、0から5に変更(0 – 7BIT、1 – 8BIT、2 – BINARY、3 – BASE64、4 – QUOTED-PRINTABLE、5 – OTHER);
  • パーツ–文字のパーツの配列。オブジェクトの構造が互いに等しいことを反映しています。

Trochyは、より多くのrazglyanayak_stパーツを報告します。 まず、言う必要があるのは、その配列のゼロ中央に、シート自体のテキストと一致する情報があり、まず、添付ファイルがあるということです。 また、明示的ビューと暗黙的ビューのコーディングのタイプとパラメーターがスキンオブジェクトに示されます。

シートの構造は少しzavgodnoに投資することができますが、chotirioxに関してはいくつかの変動がありました-5が等しい場合、再帰関数を作成する必要があるようです。

別のimap_fetchbody()関数は、シートの一部のみをフェッチし、そのほとんどがエンコードされています。

次に、シートの本文の一般化されたバージョンを保存する方法で、変更を追加します。

$ body = "";

関数.phpファイルを見て、再帰関数を書いてみましょう。

関数recursive_search($ structure)($ encoding = ""; if($ structure-> subtype == "HTML" || $ structure-> type == 0)(if($ structure-> parameters-> attribute == " charset ")($ charset = $ structure-> parameters-> value;)return array(" encoding "=> $ structure-> encoding、" charset "=> strtolower($ charset)、" subtype "=> $ structure- > subtype);)else(if(isset($ structure-> components))()return recursive_search($ structure-> components); charset = $ structure-> parameters-> value;)return array( "encoding" => $ structure-> encoding、 "charset" => strtolower($ charset)、 "subtype" => $ structure-> subtype);)

recursive_search()関数は、シートの構造という1つのパラメーターを受け入れ、その後、累乗を変更して、encoding、charset、subtypeの3つのパラメーターを取ります。 再帰からの出発点は、中心がゼロのパーツの品質の入力です。 ここで説明することはあまりありません。コードから何が想定されているかを理解したと思います。

将来必要になるので、シートの本文を変換するための関数をもう1つ追加しましょう。

関数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、ケース1:$ body = imap_8bit($ msg_body);;)

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

さらに、再帰からデータを取得したときに、転送を段階的に再エンコードし、その後、適切なパラメーターを使用してstructure_encoding()関数を呼び出します。 残りのスマートオペレーターでは、UTF-8で実行可能なものが保護されており、すべての操作を行った後でも、コードが表示され、再コード化されます。

間で失われた:

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

シートの本文には、単純なテキストと独自のスタイルのHTMLレイアウトの両方を含めることができます。 BASE64でコーディングされているため、レンダリング中にレイアウトが機能しませんでした。

添付ファイル

Axis、プログラムの作成の最後までスムーズに登ります。

//ファイルを挿入しますif(isset($ msg_structure-> components))(for($ j = 1、$ f = 2; $ j< count($msg_structure->部品); $ j ++、$ f ++)(if(in_array($ msg_structure-> components [$ j]-> subtype、$ mail_filetypes))($ mails_data [$ i] ["attachs"] [$ j] ["type"] = $ msg_structure-> components [$ j]-> subtype; $ mails_data [$ i] ["attachs"] [$ j] ["size"] = $ msg_structure-> components [$ j]-> bytes; $ i] ["attachs"] [$ j] ["name"] = get_imap_title($ msg_structure-> components [$ j]-> parameters-> value); $ mails_data [$ i] ["attachs"] [$ j] [ "file"] = structure_encoding($ msg_structure-> components [$ j]-> encoding、imap_fetchbody($ connection、$ i、$ f)); file_put_contents( "tmp /"。iconv( "utf-8")、 " cp1251 "、$ mails_data [$ i] ["attachs "] [$ j] ["name "])、$ mails_data [$ i] ["attachs "] [$ j] ["file "]);)

添付ファイルの処理のためのShmatok、yakyvіdpovіdaєはそれほど豊富ではありません、そして今なぜそうなのですか? ファイルを使った作業の原理はシートの本体を使った作業と似ていますが、この段階はパーツの配列で同じものから修復されます。 タイプのリストを見て、非標準を追加することを忘れないでください。 単純な関数file_put_contents()を使用するために、ファイルをサーバーのtmpフォルダーに保存します。

結果が欲しい!

作業の過程で、$ mails_dataデータから配列を作成しました。視覚化のために、すでにそれを直接操作しています。 この記事では、メールにあるテストシートを作成しました。その結果、私たちに何が起こったのか疑問に思いましょう。


ある種の軸が配列を離れるのにほぼ責任がありますが、残念ながら、私は特別な理由でファイルをファイルに添付しました。 次に、HTMLマークアップに移りましょう。

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

Yandex Post(Vhіdnі)|

葉の数:

葉はありません
$ mail):?>
ティムチャスマーク:
日付:
誰に:
タイプ:
主題:
Base64シート:
添付ファイル:
$ attach):?>
タイプ:
Rozmir(バイト単位):
名前:
体:

結果として、悪臭は特別な役割を果たさないため、ここではスタイルを追加しません。


そして、tmpフォルダーのサーバー上にファイルがあります。

ヴィスノヴォク

統計のすべての段階を完了すると、信頼できる結果が得られますが、すべてを構築できるほど単純ではありません-ウォーターストーン、vrakhovuvatを実行する必要があります。 特定のタスクのスクリプトを作成するときは、すべての段階でコーディングに注意する必要があります。シートは別のメールから送信される可能性があり、スキンには独自のニュアンスがあります。 したがって、Yandexメールとそのドキュメントが定期的に更新されるようにすることが非常に重要になります。これにより、メールプログラムでの作業に異なるポイントが生じる可能性があります。 私が持っているすべてのものについて、私は幸運に基づいてあなたをサポートします、Yandexメールのより大きな低バージョンで作業しているときに記事が与えられました。

アタッチメントからシートを取り外そうとしないでください(
ファイルを含むメールを強制する方法-それでも-シートのテキストが消えます

親切にするのを手伝ってください

それは私に夜明けしました...あなたがYandexからYandexにメールを送るならば、それからすべてが消えます...
整理
エール軸なぜ他のファイルがこのスクリプトが受け入れないクリムワードをファイルするのか理解できませんでした...ipdf i zhpgipngを置く人を指示するMSWORDの行があります-通常は単語のみを読んで選択します....そのような

©2022androidas.ru-Androidのすべて