こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

携帯からの空メールの処理

こんにちは。今、PHP5.3で、携帯からの空メールを処理するプログラムを作っています。
具体的には、空メールが携帯から送られてくると、エイリアスでPHPプログラムに渡し、送信者に自動返信するというプログラムです。

現在、以下のようなプログラムを作っていますが、うまく動きません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<?php

require_once("/opt/lampp/lib/php/PEAR.php");
// PEAR::Mailライブラリ
require_once("/opt/lampp/lib/php/Mail.php");
// PEAR::Mail_mimeライブラリ
require_once("/opt/lampp/lib/php/Mail/mimeDecode.php");

$params['include_bodies'] = false;
$params['decode_bodies'] = false;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin");
$params['crlf'] = "\r\n";

//メールを解析する
$structure = Mail_mimeDecode::decode($params);
print_r($structure);

//送信元を取得する
$mail = $structure->headers['from'];
$mail = addslashes($mail);
$mail = str_replace('"','',$mail);

preg_match("/<.*>/", $mail,$str);
if($str[0]!=""){
$str=substr($str[0],1,strlen($str[0])-2);
}$mail = $str;

//送信データを設定する
$recipients = $mail;
$new_from = 'register@7ws.jp';
$subject = 'empty mail OK!';
$body ='登録が完了しました。';

$headers = "From:".$new_from;
//メールを送信する
$headers = array();
$headers['From'] = $new_from;
$headers['To'] = $recipients;
$headers['Subject'] = $subject;
$headers['Sender'] = $new_from;

$mail = Mail::factory('sendmail');
$result = $mail->send($recipients, $headers, $body);
?>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
参考にしたのは、http://www.phppro.jp/phptips/archives/vol35/1
と「PHP×携帯サイト デベロッパーズバイブル」です。

プログラムを実行しても、空メールの送信者のアドレスが取得できず、
送り先を空白のまま、メールを送信していまい、エラーとなります。
正常に送信者アドレスを取る方法をご存知の方が、いらっしゃいましたら、ご教授お願いします。
なお、$structure = Mail_mimeDecode::decode($params);の下で、
print_r($structure);を実行したところ、

print_r($structure);



(
[headers] => Array
(
[] =>
)

[ctype_primary] => text
[ctype_secondary] => plain
)

という表示なっていました。headersがArrayなのに空っぽなところに、
問題があるのではないかと思います。以上、よろしくお願いします。

投稿日時 - 2009-12-15 17:23:06

QNo.5524670

すぐに回答ほしいです

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

エイリアスの書き方に問題があるのではないでしょうか。
php://stdin から何も受け取れていないようです。

投稿日時 - 2009-12-16 07:03:50

補足

ご回答、ありがとうございます。
エイリアスの書き方の問題を切り分けるため、コマンドラインにて、
/opt/lampp/bin/php /opt/lampp/htdocs/****/****/empty_mail_v2.php < test_mail
という具合に、test_mailというファイルを用意して、実行しておりますが、
やっぱりうまくいきません。なお、test_mailファイルは、/var/spool/mailに入っていた、メールの実データをアドレスだけ変えて使用しています。

なにか、他に原因があるのでしょうか?
以上、よろしくお願いいたします。

投稿日時 - 2009-12-16 10:22:21

お礼

いままで、インターネットからメールを送れなかった関係で、
telnet localhost 25
で擬似的なメールセッションをおこなっていました。
その際、mail from:やrcpt to:は指定していたのですが、
Dataコマンドの後の、ヘッダFromやヘッダToをつけていませんでした。

この結果を元に、送信されたメールデータを、test_mailファイルとして
使用していたため、うまくいきませんでした。

ヘッダToやヘッダFromをつけたらうまくいきました。

ありがとうございました。

投稿日時 - 2009-12-16 14:35:54

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問