私の cPanel ホスティングでは、メールの受信トレイをスクリプトにパイプできることはわかっていますが、やりたいことは次のとおりです。
- hi@hi.com に送信
- mail.php にパイプする
- mail.php は件名と .txt 添付ファイルを読み取ります
- 件名と .txt 添付ファイルの内容はデータベースに保存されます
簡単なPHPでこれを行う方法はありますか?
PECL mailparse ライブラリphp-mime-mail-parser
に依存する PHP ライブラリが存在します。それらをインストールしたら、目的を達成するためのコードは非常に簡単です。
<?php
require_once 'MimeMailParser.class.php';
$parser = new MimeMailParser();
$parser->setStream(STDIN);
$subject = $parser->getHeader('subject');
$attachment_content = false;
foreach ($parser->getAttachments() as $attachment) {
$extension = pathinfo($attachment->filename, PATHINFO_EXTENSION);
if ($extension == "txt") {
$attachment_content = $attachment->content;
break;
}
}
// adapt to what ever database you are using
$sth = $mysqli->prepare("INSERT INTO mails (subject, attachment) VALUES (:subject, :attachment)");
$sth->bindParam(':subject', $subject, PDO::PARAM_STR);
$sth->bindParam(':attachment', $attachment_content, PDO::PARAM_STR);
$sth->execute();
から読み取るように、メールをスクリプトにパイプできますSTDIN
。setStream
に変更して、ファイルから読み取ることもできますsetPath
。ライブラリのドキュメントを参照してください。
おそらく、次のことを行う必要があります。
CLI で実行可能な PHP スクリプトを作成します (PHP バイナリを指すスクリプトの先頭に #! 宣言を追加し、その実行権限を設定します)。
そのスクリプトを取得して、php://stdin から生のメールを読み取ります (file_get_contents が最も簡単です)。
PEAR::Mail::Mime::Decode のようなものを使用して、メールをパーツにデコードするスクリプトを取得するか、便利な Zend Framework コンポーネントがあると思います)。
デコードされたメッセージから添付ファイルと件名を読み取り、通常どおり保存します
最後に exit(0) を使用して、クリーンな終了であることを CLI に伝えます。その他の exit() ステータスがあると、メールがバウンスされる可能性があります。