POP情報取得で転送元のアドレスを知りたい - PHPプロ!Q&A掲示板

2801

  • 0P

POP情報取得で転送元のアドレスを知りたい

質問日時 / 2010年7月6日 12:32    回答数 / 7件

Questioner:  yukihiro2010  このエントリーをはてなブックマークに追加 

キーワード / POP受信    写メ    転送メール   

はじめて質問致します。どうかよろしくお願いします。

携帯で撮影した画像を添付してメールを送信します。

そのメンバーが100人ぐらいいて、プログラムで毎回全部の

溜まっているメールを取り込むには時間がかかるため

一つのメールを設置して、100人分のメールボックスから自動的に

ひとつのメールへ転送するようにします。

その場合、送信元のメールアドレスと、100人分のメールのアドレス(つまり転送元アドレス)

を取得したいのです。

正規表現もあまり得意ではないので、転送元のアドレスの取得方法をおしえてほしいのですが。

今、Let’s PHP 様の 写メ BBSを利用してテストしております。

http://php.s3.to/bbs/bbs7.php

(let's PHPには質問するところが見当たりませんでした)

転送元以外のアドレスはすでに取得しております。一つ正規表現を入れて取得すればいいとは

思うのですがよくわかりません。

今ソースの途中ですがこのように入れています。

****************************************************

// サブジェクトの抽出
if (eregi("\nSubject:[ \t]*([^\r\n]+)", $head, $subreg)) {
$subject = $subreg[1];
while (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)", $subject, $regs)) {
$subject = $regs[1] . base64_decode($regs[2]) . $regs[3];
}
while (eregi("(.*)=\?iso-2022-jp\?Q\?([^\?]+)\?=(.*)", $subject, $regs)) {
$subject = $regs[1] . quoted_printable_decode($regs[2]) . $regs[3];
}
$subject = htmlspecialchars($this->convert($subject));

// 拒否件名
foreach ($this->deny["subj"] as $dsubj) {
if (stristr($subject, $dsubj))
$write = false;
        }
}
// 送信者アドレスの抽出
if (eregi("From:[ \t]*([^\n]+)", $head, $freg)) {
$from = $this->addr_search($freg[1]);
} elseif (eregi("Reply-To:[ \t]*([^\r\n]+)", $head, $freg)) {
$from = $this->addr_search($freg[1]);
} elseif (eregi("Return-Path:[ \t]*([^\r\n]+)", $head, $freg)) {
$from = $this->addr_search($freg[1]);
}

******************* 仮にいれましたが取得できません******************************

// 送信元メールアドレスの取得
if (eregi("^Delivered-To:[ \t]*([^\n]+)",  $head, $freg)){
print "forward="."<br>\n";
$forward = $this->addr_search($freg[1]);
}else{
print "foprward 取得なし<br>\n";
}
******************************************************************************

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimixえっと・・。何をどうしようとしているのか、ちょっと
 ┗A01-1yukihiro2010>100人のメンバーに各々専用の送信先メールアドレスを
  ┗A01-1-1shimixまったくの未検証ですが、Fromと同様に取得出来ません
   ┣A01-1-1-1yukihiro2010ご対応有難う御座います。 テストしてみます。また結
   ┣A01-1-1-2yukihiro2010正常にとれました。replaceの必要も御座いませんでし
   ┗A01-1-1-3yukihiro2010すみませんこの掲示板が有償(ポイント購入)であるこ
    ┗A01-1-1-3-1shimixあ、いやいや・・。ポイントは不要ですよ。ポイントが

回答一覧

並び替え:

A01
answerershimix [7月6日 13:21]

えっと・・。何をどうしようとしているのか、ちょっと読み取れません。


「携帯で撮影した画像をメールする」メンバーが100人いるのでしょうか?で、送信先(受け取りアドレス)は一つで、そのアカウントからPOPでメールを取得しているということですか?でも、それだとDelivered-Toヘッダが付加される要素がありませんよね。

100人のメンバーに各々専用の送信先メールアドレスを割り当てておいて、それを(そのメールサーバの機能で)ひとつのアドレスに転送している・・ということでしょうか?もしそうであれば、Delivered-Toヘッダは転送先のアドレスが「入っているかもしれない」ということですよね。転送したメールのメールヘッダは確認されていますか?普通はメールサーバでの転送であれば、Toは書き替えずに転送先(前述した「ひとつの」メールアドレス)をDelivered-Toに設定して送ると思いますが・・。


いずれにしても、もう少し詳しく(というかわかりやすく)説明お願いします。

#phpでプログラミングする以前に調べておかないといけないことが多いように思います。
#メールサーバでの転送ヘッダなどは実際のメールデータで確認するしかありません。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryukihiro2010 [7月6日 13:49]

>100人のメンバーに各々専用の送信先メールアドレスを割り当てておいて、それを(そのメールサーバの機能>で)ひとつのアドレスに転送している・・

はいそのとおりです。toのところにメールアドレスがはいって
おりました。

メール転送テストした情報を取り出しました。

to の情報を取得すればいいんですね・・。
from のところは写メBBSで取得していますのでtoの
情報を取得する方法が分ればいいということになりますね。

方法が分りませんのでご教授のほどよろしくお願いします。


メール情報の一部取り出しました。実メールアドレスは
???? などに変えています。

To: <?????@?????.co.jp>

このメールアドレスを取得すればいいと理解しました。


----------------------------------
Return-Path: <fffff@fffff.com>
X-Original-To: aaaa@aaaaa.co.jp
Delivered-To: aaaa@aaaaa.co.jp
----------------------------------
Received: from mta505.mail.kks.jjjjj.co.jp (mta505.mail.kks.jjjjj.co.jp [???.???.??.?????])
by zzzz.zzzz.com (Postfix) with SMTP id 9EFB9A6D570
for <aaaa@aaaaa.co.jp>; Sat,  3 Jul 2010 13:48:04 +0900 (JST)
X-jjjjj-Forwarded: from fffff@fffff.co.jp to aaaa@aaaaa.co.jp
X-Originating-IP: [???.??.??.?]

省略

----------------------------------
From: =?iso-2022-jp?B?GyRCOUJePBsoQiAbJEI5LDQyGyhC?= <fffff@fffff.com>
To: <?????@?????.co.jp>
----------------------------------
Subject: =?iso-2022-jp?B?a2lub2tvGyRCJE4kPyRhJE4bKEI=?=
 =?iso-2022-jp?B?GyRCJUYlOSVIJEdFPkF3JDckXiQ5ISMbKEI=?= 
Date: Sat, 3 Jul 2010 04:48:04 +0000
Importance: Normal

省略


MIME-Version: 1.0

省略

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [7月6日 13:56]

まったくの未検証ですが、Fromと同様に取得出来ませんでしたか?

  1. if (eregi("To:[ \t]*([^\n]+)", $head, $treg)) {
  2. $to = $this->addr_search($treg[1]);

「<」や「>」は個別に(str_replaceでも使って)取り除けばいいんじゃないでしょうか

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyeryukihiro2010 [7月6日 14:02]

ご対応有難う御座います。
テストしてみます。また結果報告させて頂きます。

この意見に回答する

ツリーへ TOPへ

A01-1-1-2
replyeryukihiro2010 [7月6日 15:39]

正常にとれました。replaceの必要も御座いませんでした。

お忙しい中対応誠に有難う御座いました。

感謝申し上げます。

この意見に回答する

ツリーへ TOPへ

A01-1-1-3
replyeryukihiro2010 [7月6日 15:44]

すみませんこの掲示板が有償(ポイント購入)であることを
理解せずに書き込みしてしまいました。まだポイントを購入
しておりませんので明日にでも銀行振り込みで振り込んだ後
対応させて頂きます。しばらくお待ち願います。

この意見に回答する

ツリーへ TOPへ

A01-1-1-3-1
replyershimix [7月6日 16:03]

あ、いやいや・・。ポイントは不要ですよ。ポイントがあってもなくても関係なくレスは付きますからww

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)