web-dev-qa-db-ja.com

PHP)からメールとその添付ファイルを取得する方法

私は友人の結婚式のためにフォトギャラリーウェブアプリを書いています、そして彼らはゲストが彼らがその日に撮ったデジタル写真を提出するためのフォトギャラリーを望んでいます。

すべてのオプションを評価した後、ユーザーにとって最も簡単な方法は、使い慣れたインターフェイス(メール)を使用して、写真を添付ファイルとして送信することです。

メールボックスを作成しましたが、ギャラリーシステムに追加するための自動処理のために、これらの添付ファイルを接続して取得する必要があります。しかし、どのように?これを行うために見たチュートリアルやプレハブクラスはありますか?

17
Oli

どのMTAを使用していますか? postfix + maildropを使用する場合、特定のメッセージをPHPスクリプトを介してパイプし、受信メールを処理する)フィルタリングルールを作成できます(google for maildrop and xfilter)。

3
Armin Ronacher

以前はこれをたくさん行っていましたが、コードが見つかりません。これが私が見つけた縮小版です。それはあなたを正しい道に導くはずです。私は以前、このタイプのスクリプトをcronジョブから実行していました。申し訳ありませんが、最終バージョンが見つかりません。 ;(

// Open pop mailbox
if (!$mbox = imap_open ("{localhost:110/pop3/notls}INBOX", "user", "tester")) {
  die ('Cannot connect/check pop mail! Exiting');
}

if ($hdr = imap_check($mbox)) {
  $msgCount = $hdr->Nmsgs;
} else {
  echo "Failed to get mail";
  exit;
}

$MN=$msgCount;
$overview=imap_fetch_overview($mbox,"1:$MN",0);

for ($X = 1; $X <= $MN; $X++) {

  $file = imap_fetchbody($mbox, $X, 1);

  imap_delete($mbox, $X);
}

imap_expunge($mbox);
imap_close($mbox);

幸運を!

10
DreamWerx

この目的のために専用のメールボックスを作成している場合、フィルタリングメカニズムを使用することはほぼ間違いなくあなたが望むものではありません。代わりに、メールボックスをアプリケーションへのパイプにし、アプリケーションでstdinからのメッセージを読み取り、本文を解析し、MIMEで本文を解析して添付ファイルを取得する必要があります。

メールボックスをパイプにすることは、sendmail、postfix、qmailなど、私が知っているすべての一般的なUNIXベースのMTAによってサポートされています。通常、次のようにエイリアスファイルで定義します。


#sendmailまたはpostfix構文
msgsubmit: "|/usr/bin/php〜path/to/example.php"

次に、msgsubmit @へのメールは、配信のためにphpプログラムにルーティングされます。

これには、IMAPサーバーやMTA以外のサーバーが有効であることに依存しないという利点があり、宛先ホストのMTAを制御できる限り正常に機能します。システム上のすべてのメッセージをスクリプトで検査したい場合は、フィルタリングが必要ですが、そうではないと思います。

コピーをメールボックスのどこかに保存したい場合(悪い考えではありません)、次のように、エイリアスを定義して複数のアドレスに移動します。


msgsubmit: "| /usr/bin/php ~path/to/example.php", msgsubmit-box

またはpostfix仮想フォーマット:


msgsubmit
    "| /usr/bin/php ~path/to/example.php"
    msgsubmit-box

6
Daniel Papasian

Googleの Picasa Web Albums の使用を検討しましたか?写真を送信してオンラインで共有するためのメールアドレスを設定できます。次に、これらの写真のRSSフィードを取得できます。これは、ほとんどのプログラマーがMTAよりもよく知っています。

6
Liam

MIMEメッセージパーサーが必要だと思います。

私は以前に これ を使用しましたが、非常に大きな添付ファイル(つまり、デジタルカメラから取得する可能性のある2〜3 MBのファイル)ではテストしていませんが、正常に動作しているようです。

POP3/IMAPメールボックスを読み取るためのシステムはすでにありますか?同じサイトにPOP3でも動作する 別のクラス があります(IMAPもあると思います)-しかし、かなりの量をダウンロードする場合は、いくつかのCを調査することをお勧めします1つは純粋なPHPだと私は信じているので、ベースのソリューション。

1
user7094

Majordomoは、電子メールを処理する代わりになる可能性がありますが、添付ファイルの処理にはいくつかの制限があります。

0
paulo lellis