人に聞けない痔の悩み、これでスッキリ >>

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

何かいい方法がございましたらお教えいただければと思います。

このQ&Aに関連する最新のQ&A

A 回答 (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()をコールするようにします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/28 11:50

imap_overview_info()はヘッダ情報の「概要」を取得する関数なので、ヘッダ情報がすべて返されるわけではありません。



メールアドレスまで解析された形でヘッダ情報を取得したい場合には、imap_headerinfo()を使った方が楽だと思います。imap_headerinfo()を使えば、返り値を$valに入れた場合には次のようにすればアドレスが取得できます。

 $val->from[0]->mailbox."@".$val->from[0]->host

imap_fetch_overview()で取得したfromの値をPEARのMail_RFC822::parseAddressList()を使って解析させるという方法もなくはないのですが、それなら最初から解析済みの値を返してくれる関数を使った方がおそらく早いと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。以下の方法で試してみました。
$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)で調べたところ、ヘッダー情報は取得できているものの、配列から抜き出せません。なにがまちがえているんでしょうか?

お礼日時:2007/06/27 21:35

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/23 21:56

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング