• ベストアンサー

imap_fetch_overviewからメールアドレスの抽出

imap_fetch_overviewでメールのヘッダーを取得し、メールアドレスだけを抽出したいと考えております。 $val->from;でfromは抽出できたのですが、名前などを設定されていた場合に、メールアドレスだけを抽出できませんでした。 何かいい方法がございましたらお教えいただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • Rayderl
  • ベストアンサー率83% (40/48)
回答No.3

すみません、imap_fetch_overview()とimap_headerinfo()では返り値の仕様が違いますね。ですから、置き換え可能な関数というわけではありません。 imap_headerinfo()ではsequenceではなくメッセージ番号を指定してひとつだけのメール情報を取得するので、次のようにすればメールアドレスが取れるはずです。 $mail1 =imap_headerinfo($_imap,1); $host=$mail1->from[0]->host; $mailbox=$mail1->from[0]->mailbox; 引き数をループで回すのでなく、ループの中でimap_headerinfo()をコールするようにします。

puzzleman
質問者

お礼

大変たすかりました^^ 動作を確認したところ、問題なく利用できました。何度もご回答いただきまして、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Rayderl
  • ベストアンサー率83% (40/48)
回答No.2

imap_overview_info()はヘッダ情報の「概要」を取得する関数なので、ヘッダ情報がすべて返されるわけではありません。 メールアドレスまで解析された形でヘッダ情報を取得したい場合には、imap_headerinfo()を使った方が楽だと思います。imap_headerinfo()を使えば、返り値を$valに入れた場合には次のようにすればアドレスが取得できます。  $val->from[0]->mailbox."@".$val->from[0]->host imap_fetch_overview()で取得したfromの値をPEARのMail_RFC822::parseAddressList()を使って解析させるという方法もなくはないのですが、それなら最初から解析済みの値を返してくれる関数を使った方がおそらく早いと思います。

puzzleman
質問者

お礼

ご回答ありがとうございます。以下の方法で試してみました。 $mail1 =imap_headerinfo($_imap,1); foreach ($mail1 as $val) { $host=$val->from[0]->host; $mailbox=$val->from[0]->mailbox; } print($mailbox."@".$host); とprintで確認みたところ、表示できませんでした。 imap_fetch_overviewをheaderinfoに変えただけのため、どこが原因かわかりません。print_r($mail1)で調べたところ、ヘッダー情報は取得できているものの、配列から抜き出せません。なにがまちがえているんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • widoww
  • ベストアンサー率20% (33/159)
回答No.1

正規表現で抜き出してはいかがですか?

puzzleman
質問者

お礼

ご回答ありがとうございます 表示名などが設定されていた場合、正規表現だけでは取得できませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpのimap関数で新規メールをチェック

    OSがLinuxのMTAがqmailのサーバーで、新規メールのみをphpでチェックしたいです。 /(ユーザーのホームディレクトリ)/Maildir/newの中のみをチェックしてデータベースにinsertしたいのですが、おそらくimap_open関数だとMaildir全てをチェックしにいっているので/Maildir/cur内にあるメールもinsertの対象になってしまいます。newだけを見に行く方法はないでしょうか?新規メールをチェックと言う点ではimap_fetch_overviewのrecentフラグが使えそうな感じがしたのですが、いまいち使い方が分からないです。 ご教授いただけたら幸いです。よろしくおねがいいたします。

    • 締切済み
    • PHP
  • IMAPアクセス側のメールアドレスが変わっていない

    Yahoo!メールのIMAPアクセスの利用について。Yahoo!カスタマーサービスに問い合わせしたが、良く意味が解りません。 パソコン初心者なので、良く解らないのですが、諸事情がありYahoo!メールのIMAP??を初めて使う事になって、登録の仕方が良く解らないでそのまま登録したら、Yahoo!Japan、IDの名前で登録されてしまったので、直ぐにメールアドレスを変更して、その後、Yahoo!メールのIMAPを利用しようとしたら、前のメールアドレスのままで、変わっていませんでした。 メールアドレスを変更した後、事情があり直ぐに新しいメールアドレスを使いたいのですが、良くヘルプを読んでみたら、変更の処理が完了するまで約5日間かかります(休日を除く)。その間、変更前のメールアドレスにYahoo!デリバーが配信されることもあります。と書いてありました。前々回のメールで、問い合わせして聞いたら、Yahoo!メールメールアドレス変更手続き完了のお知らせのメールが来ると言うので、待っていたら来ました。それから、IMAP??アクセスを利用しようと思っても、前のメールアドレスのままで、変更されていないので、もう一度問い合わせしたら、 現在のYahoo!メールアドレスは、Yahoo!メールにログインすることでご確認いただけます。下記ページより、ご利用のYahoo! JAPAN IDとパスワードでログインし、右上に表示されるYahoo!メールアドレスをご確認ください。と、確認したら、変更後のメールアドレスが、表示されていました。 私はIMAP??アクセスのご利用したいのですが、Yahoo!メールは変わっているのにIMAPメールのメールアドレスが以前のままで変わっていません変更後のメールアドレスに設定変更するには、どうすれば良いのですか?いろいろYahoo!のヘルプを読んで見てみましたが、どれも、変更後のメールアドレスになっているので、やり方が解りません。設定の仕方を教えて下さい。 また、前回のYahooカスタマーサービスの回答で、その時意味が良く解らなかったのですが、回答に、なお、メールソフトやメールアプリでYahoo!メールを送受信している場合Yahoo!メールアドレスを変更しても、メールソフトやメールアプリ側に設定しているYahoo!メールアドレスは自動的には変更されません。お客様ご自身で、新しいYahoo!メールアドレスを設定し直す必要があります。 とも書いてありました。私は、パソコン(Windows8.1)を使っていて、Outlookは登録だけはしているのですが、Outlookは、今現在使っていなく、OCNメールを使っています。パソコン初心者で、良く意味が解らないのですが、他のメールソフトや、アプリなどが、Yahoo!メールに登録した、IMAPと何で関係あるのですか?OCN側のメールを設定変更しないといけないのですか?設定の仕方があるのなら教えて下さい。IMAPアクセス側のメールアドレスが変更の仕方が解らないで、困っています。パソコン初心者なので、是非解り易い回答宜しくお願いします。

  • ExchengeとImapのアドレスを同じにしたい

    iPhone5ユーザーです。 デコメーラーというアプリをDLしたのですが、使い勝手が悪く削除したら、メールがExchengeとImapの二つ出来てしまいました。(以前まではExchengeのみでした) 新着メールがImapの方に届くのをExchengeに届くようにしたく、調べてみしたらアドレスを変える方法しか出てこなかったのでアドレス変更したら、Imapのアドレスのみ変更されました。 Exchengeのアカウントは前のアドレスのままなので、サーバーに接続できず、過去のメールが見れなくなってしまいました。 Imapにメールが届くのはいいんですが、Exchangeのフォルダに見れないと困るメールがあって… ExchengeのアドレスをImapと同じアドレスに変更するにはどうしたらよいでしょうか? 因みにgmailやiCloudは一切使っておらず、auの@ezweb~のアドレスです。 あと、少し機械に疎いので、わかりやすく説明して頂けると幸いです。 よろしくお願いします。

  • iPhone yahooメール POP IMAP 

    iPhone6sを利用しています。 yahooメールの設定を行っていて、IMAP設定がうまく出来ないので教えて下さい。 yahooメールのアカウントは2つあり、それぞれAとBとします。 Aは昔から使っているアドレスでBは1年ほど前から使っているアドレスです。 Aを設定するとPOPの設定になりBを設定するとIMAPの設定になります。 AもIMAPで設定したいのですが、Googleで調べてもなかなかヒットせず 困っています。 POPで設定されてしまうAメールアドレスをIMAPで設定する方法を教えて下さい。 以上、よろしくお願い致します。

  • IMAPの迷惑メール対策

    IMAP(iphoneのアドレス)の迷惑メール対策について教えてください。 smsとmmsについて迷惑メール対策は出来たのですが IMAPについては、設定はどこでやるのでしょうか? smsとmmsについてはMy softbank内で設定できましたが IMAPについては設定が出来ません。 どなたか教えて頂きたいです。 お願いいたします。

  • メールの特定にphpを使っているのですが、From欄のアドレスを取得す

    メールの特定にphpを使っているのですが、From欄のアドレスを取得するために、 if (eregi("From:[ \t]*([^\r\n]+)", $head, $freg)) { としていましたが、GmailやYahooメールだと、ヘッダーにDomainKey-Signatureがあり、その中のfrom:がヒットしてしまいます(Fromのメールアドレスが取得できない)。上手く取得する方法はありませんでしょうか?

    • ベストアンサー
    • PHP
  • メールサーバー⇒アドレス抽出

    下記のようにメールサーバーにアクセスし、アドレスを抽出しようと思ったのですが思い通りに値が帰ってきません。タイトルは正常に抽出できたのですが、アドレスはどうもうまくいきません。致命的なミスはないと思うのですがどこが間違っているのでしょうか… 宜しくお願いします。 function check_mail($login_id, $login_pwd, $host) { //戻り値生成 $ret = array(); ・・・途中省略・・・ /* 送信者アドレスの抽出 */ if (eregi("From:[ \t]*([^\r\n]+)", $head, $freg)) { $from = addr_search($freg[1]); } elseif (eregi("Reply-To:[ \t]*([^\r\n]+)", $head, $freg)) { $from = addr_search($freg[1]); } elseif (eregi("Return-Path:[ \t]*([^\r\n]+)", $head, $freg)) {  $from = addr_search($freg[1]); } */ //アドレスを格納 $ret[] = $from; 途中省略 ----------- /* メールアドレスを抽出する */ function addr_search($addr) { if (eregi("[-!#$%&\'*+\\./0-9A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+", $addr, $fromreg)) { return $fromreg[0]; } else { return false; } }

    • ベストアンサー
    • PHP
  • 2つのMacのMailをIMAPで同じにしたい

    2つのMacを所有しており、それぞれに入っているメール受信ソフトのMailの状態を IMPで同じにしておきたいのですが、うまくいく方法を教えてください。 (現在はPOPで使用。) 所有しているのは、 Mac1:MacPro(2008)/OS10.9/Mail7.3 Mac2:MacBookPro(2014)/OS10.9/Mail7.3 です。(Mac2の方はこれから使用します。) Mac1で使っているアドレスは、 ・プロバイダーのアドレス ・Gmailのアドレス で、それをMailで送受信しています。 Mac2でも同じようになっているようにしたいです。 自分なりに調べてみて分かったのは、 方法A:片方のMacの、ライブラリの「Mail」ファイルを、もう片方へコピーする。 方法B:送受信の方法をIMAP形式にする。 です。 方法Aのファイルコピーの方法も考えたのですが、ファイルの容量が4.39GBあります。 差分コピーという方法もあるようですが、手間のことでいうとあまり現実的ではないと考えました。 できれば方法BのIMAPの方法で上手くできればと思っております。 しかし、以前Gmailの方のアドレスをIMAPにしていた際に、知識不足だったせいで、 ネット上のアカウントを削除したとたん、メールソフト上の送受信メールも全て消してしまいました。 ということで、質問なのですが、 ・今回は、プロバイダーのアドレスにしろ、Gmailのアドレスにしろ、大元を解約することになっても、 送受信したメールをそのままにしておきたいと思っています。 これは絶対にクリアしておきたいです。 ・受信したメールを種類ごとにフォルダ分けしているのですが、その状態も同じにできるでしょうか。 ・送信したメール履歴はやはり同じするにするのは無理でしょうか 無理なら送信する際に自分にも送る設定にする事を考えています。 (自分側に受信されたら自動的にファルダに入る設定にして邪魔にならないようにしたいです。) いろいろとすみませんが、いい方法を教えてください。 よろしくお願いします。

  • 【OutlookExpress】メールアドレスを抽出したい。

    こんにちは OutlookExpressで受信したメールの本文(オーダーフォーム)からメールアドレスの部分を 抽出したいのですが可能でしょうか。 また、受信したメールの「送信者」のアドレスを抽出することは可能でしょうか。 それぞれ数百通有るので途方に暮れています。 良い方法を教えてください。

  • IMAPをブラウザで受信

    学校のネットワーク設定でPOP、IMAPが弾かれます。 iPhoneのメールアドレスをパソコンから利用したいのですがIMAPをブラウザから利用する方法はあるでしょうか? httpアクセスは受け付けるようなので何かアイディアがあればお願いします。