みなさん。宜しくお願いいたします。
現在、PHP3.0を使用して「プログラムからのメール配信」の処理を作成しています。ここで困ったことに、「存在しないメールアドレス(入力間違いなど・・)にメール配信」した場合、当然、届かないのですが「届かなかったよ!(address unknow・・?)」みたいな情報を「プログラムで指定したメールアドレス」に返信させたいのですが、どのように記述するのか分かりません。(多分・・PHP上で記述する「ヘッター情報のパラメータ部分」に問題ありと考えていますが・・)

誰か教えてください・・サンプルがあれば大変うれしいです。

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

A 回答 (5件)

このスペースでは詳しく書けないのですが、envelope from を指定しない場合、phpから送信されたメールの from (この from はメールのヘッダにある from ではありません。

smtp session での from です。)は、apache のユーザー、つまり大半の apache では、nobody となっているはずです。

で、結果として、nobody, MAILER-DEAEMON, postmaster, root のいづれかにかえってきているんでしょう。

もういちど、sendmail の -f オプションを確かめてみては?

# 別に、情報の出し惜しみをしているわけではないです。:-)
# こういったプログラムを書く場合「関数があるから」ではなく、メールが送信
# されるプロセスを知っておいたほうがよいからです。
# ちなみに、y-boss さんの求めている「そのものズバリのサンプル」
# はしっかり検索すればありますよ。
# php のメーリングリストを検索してみては?
    • good
    • 0
この回答へのお礼

アドバイス・・大変有難うございます。頑張って調べてみます。

お礼日時:2001/11/07 08:48

すいません。

チャチャになるかもしれませんが :-)

Reply-To: は、返信のアドレスであって、y-boss さんのおっしゃっている届かなかった場合の戻りアドレスは、 Return-Path: ではなかったでしょうか?(Errors-to: もあったと思いますが、あれはすでに時代遅れですよね?たしか。)

で、sendmail の -f オプションは envelope from を指定して送るオプションですので、結果として、Return-Path: がそのアドレスになるはずです。
Host unknown, User unknown 等々のエラーがそのアドレスに戻ってきます。

たとえ、追加ヘッダ情報(mail関数の第4引数)に Return-Path: を書いたとしても、envelope from が指定されていなければ効力は持たなかったような気がします。

で、私の環境では、wrap script を用意して envelope from を追加するようにしているわけであります。

PHP 4.0.5 から、第5引数としてコマンドラインパラメーターを指定できるようになって、便利になったな。と感じております。

# すいません。チャチャでしたね。

この回答への補足

//$mail_buf : 送信先メールアドレス格納
//$mailtitle : 件名格納
//$msgbuf : メール本文格納
//$headers : ヘッダ格納

$headers = "From: " . $e_mail . "\n";
$headers .= "X-Sender: " . $e_mail ."\n";
$headers .= "X-Mailer: PHP3 Engine\n"; // メイラー
//$headers .= "X-Priority: 1\n"; // 緊急メッセージ!
$headers .= "Return-Path: " . $e_mail . "\n"; // エラー時の返信先
$headers .= "Reply-To: " . $e_mail;

//mail送信
$rtn1=mail("$mail_buf", "$meiltitle", "$msgbuf","$headers");

※こんなロジックになっているのですが・・・?

補足日時:2001/11/06 10:57
    • good
    • 0
この回答へのお礼

色々と有難うございます。日夜頑張っております。本当に皆さん詳しいですね~(尊敬です)ところで、mail関数にて皆様が言われていることを実際にやってはみたのですが「???(戻ってこない)」のです。この文章で気になったのは、「たとえ、追加ヘッダ情報(mail関数の第4引数)に Return-Path・・・・」なのですが、この「envelope from 」なるものもヘッダー情報として記述するのですか?またまた、Sendmailの難しい指定の中に隠れているのですか?教えてください!

お礼日時:2001/11/06 10:48

wrap scriptを作る、というのはsendmailやqmailなどのMTAプログラムを呼び出し、それにメール本文を渡すことで送信するメール本文をより詳細に指定することです。


これ以上の事をしようとするとMTAを使わず、自身でSMTPを話しメールを送信する必要が生じます。

なお、PHP3のMail関数でもHeader情報操作できますんでtujigeさんのかかれてる方法を使わなくでも大丈夫です(^^;

なお参考URLのレファレンスを見ると第4引数に拡張ヘッダを記述するので・・・

mail("送信先メールアドレス", "Subject", "本文",
"Reply-To: 戻り先アドレス");

と記述すればReply-Toに記述したアドレスにErrorメールが戻ってくるはずです(相手のMTAがまともならば、という注釈付ですが。NTT DocomoはFromヘッダのみしか見てなかった可能性あり)。

>プログラム作るなぁ~
とはいいませんが、(最初はみんな何も知りませんし)まずは社内にサンドボックス程度は作れる程度の知識は身につけてから、にした方がよいでしょう。
いきなり外部のサーバに向けて実験では正気を疑われても文句は言えません。

なお、あまり自信がないのであれば、この辺外注にしちゃったほうがよいと思います。なにせ、相手はInternetでつながった世界中のサーバ、ということなんで下手打つと自分だけでなく外のサーバにも迷惑がかかりますので。
そのトラブルが元で会社の信用度とかも落ちる、ということも上に説明しておけば外注にすることも考えさせやすいかもしれません。

とりあえず、自分たちで何とかするのであれば・・・DNSによる名前解決の原理、メール配送原理、RFC822、SMTPによるメール配送手続き、あたりは最低限の知識として身につけておきましょう。
すでに立ち上がってるサーバの設定がなされているのであれば、その管理者に聞けばどのような本を読めばいいかぐらいは聞き出せるでしょう。

参考URL:http://www.php.net/manual/ja/function.mail.php
    • good
    • 0
この回答へのお礼

外注ですよね~考えたのですよ!それも・・残念ながら「そこらへんの事ができる開発屋」が身近にいなかったのです・・また、「高いし・・・」ってなことで、自力での開発になってしまいました・・トホホ!再度、挑戦いたします。

お礼日時:2001/11/06 10:54

Unix系か、Win系かわからないので外しているかも知れませんが、php3を使用されているなら、MTA の wrap script を書くのが手っ取り早いです。


で、その script へむけて、php3.ini の sendmail_path を記述する。

sendmail なら、-f オプションをつけてあげればいいです。

ただ、alfeim さんもおっしゃっているように、RFC を一度読んだほうがよいかと。
mail 関数を使用しない方法でメールを送信できるようになれば、-f オプションの意味が理解できると思いますよ。

ちなみに、PHP 4.0.5 以上なら mail 関数の引数にパラメータを渡せるようになっています。
    • good
    • 0
この回答へのお礼

ご協力!大変有難うございます。お話にあるように「RFC」なるものを読んでは見ているのですが???(サッパリ)です・・トホホ!でも、頑張っています。それでですが
・「MTA の wrap script を書くのが手っ取り早いです。で、その script へむけて、php3.ini の sendmail_path を記述する。 」

この言葉が今現在理解ができていません。(勉強不足・・パンチ)情けないばかりで、こんなもんも知らんかったら「プログラム作るなぁ~」と言われそうなの覚悟で・・・教えてください。どうやって、記述するのですか?おしえて~

お礼日時:2001/11/05 17:19

http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f …

但し物が古いので最新版では異なっている可能性があります。

4.4.4. FROM / SENDER / REPLY-TOの自動利用

このあたりが参考になるかと。(機械翻訳っぽい臭いがしますので原文を用意する事をオススメします)
もっとも勧告を守らない無作法なサーバもありますので有名なサーバ群でテスト下方が良いと思いますが。

ちなみにこいつ(RFC822)をまじめに守ると一部携帯ユーザにメール出せません(笑)
    • good
    • 0
この回答へのお礼

お礼の旨が遅くなりまして、大変すみませんでした。有難うございます。今回のシステムは「社内(社外も含め)社員の連絡システム」として作成しているものです。残念なことにこのシステムに携わっているのが「技術オンチ」の私と新人2名での開発体制で、全然前に進まないのが現状です。alfeimさん。実を言いますと、上記資料を読んだのですが、「サッパリ」わかりませんでした・・・トホホ!大変ご迷惑かとは存じますが、「PHP3.0で記述したサンプル」みたいなものを教えていただけませんか?宜しくお願いいたします。

お礼日時:2001/11/05 09:38

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qプログラムの記述のあるPHPファイルをHTML化

こんばんは。お世話になってます。
タイトルにあるように、PHPファイルをHTMLファイルとして別名で設置させるコードを考えているのですが、どのようにしたら良いのかが、全く分かりません。
例えば・・

~basic.php~
<html>
<head>
<title></title>
</head>
<body>
<?php
//DB接続
//データ呼び出し
while($row = mysql_fetch_array($result)){
 ・
 ・
}
?>
</body>
</html>

という基本となるphpファイルを設置しておき、問合せ結果をhtmlファイルとして別名で保存していきたいと考えているのですが、具体的にどのようなアルゴリズム?となるのでしょうか?

本を見ながら、PEARにも挑戦してみましたが、コマンドでインストールが完了したはずですが、本や多くのサイトで紹介されているように、C:/PHP/PEAR/HTML というディレクトリが確認できずに、PEARの利用は難しいのかな?と・・。

PEARのアドバイスも頂戴出来たら幸いですが、本題の通り、上記質問のようなPHPファイルを別名でのHTMLファイルとして保存させるための流れをお教えいただければと思います。

お忙しいとは思いますが、宜しくお願い致します。。

こんばんは。お世話になってます。
タイトルにあるように、PHPファイルをHTMLファイルとして別名で設置させるコードを考えているのですが、どのようにしたら良いのかが、全く分かりません。
例えば・・

~basic.php~
<html>
<head>
<title></title>
</head>
<body>
<?php
//DB接続
//データ呼び出し
while($row = mysql_fetch_array($result)){
 ・
 ・
}
?>
</body>
</html>

という基本となるphpファイルを設置しておき、問合せ結果をhtmlファイルとして別名で保存していきたいと考え...続きを読む

Aベストアンサー

> 例えば、1の<html>タグ全体を変数に入れる場合・・・
現在のPHPがブラウザに対して送り出しているHTMLを全て確定したところを前から順に1つの変数に追加してゆく形に書き直してください。
最後にechoに与えれば今まで通りの出力になりますしfputsに与えればファイルとして書き出せます。

<html>
<head>
<title></title>
</head>
<body>
<?php
//DB接続
//データ呼び出し
while($row = mysql_fetch_array($result)){
 ・
 ・
}
?>
</body>
</html>



<?php
$html="<html><head><title></title></head><body>";
//DB接続
//データ呼び出し
while($row = mysql_fetch_array($result)){
 ・
 ・
}
$html&="</body></html>";
echo $html;
?>

と言った感じですね。
このechoの部分を
$fp=fopen("ファイル名","w");
fputs($fp,$html);
fclose($fp);
と言った感じにすればファイルに書き出せます。

> 例えば、1の<html>タグ全体を変数に入れる場合・・・
現在のPHPがブラウザに対して送り出しているHTMLを全て確定したところを前から順に1つの変数に追加してゆく形に書き直してください。
最後にechoに与えれば今まで通りの出力になりますしfputsに与えればファイルとして書き出せます。

<html>
<head>
<title></title>
</head>
<body>
<?php
//DB接続
//データ呼び出し
while($row = mysql_fetch_array($result)){
 ・
 ・
}
?>
</body>
</html>



<?php
$html="<html><head><ti...続きを読む

QPHPによるSQL文の中にPHP処理を記述するには

PHP内のSQL発行部分の

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
        `FIELD_C`
    ) values (
        `{$DATA[1]}`,
        `{$DATA[2]}`,
        `{$DATA[3]}`
    )
";

このようなクエリを

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
        `FIELD_C`
    ) values (
        `{$DATA[($i++)]}`,
        `{$DATA[($i++)]}`,
        `{$DATA[($i++)]}`
    )
";

のような感じにしたいのですが
うまくいきません。

どうすれば、クエリー文の中で$i++等の処理を
含まさせることができるでしょうか?

PHP内のSQL発行部分の

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
        `FIELD_C`
    ) values (
        `{$DATA[1]}`,
        `{$DATA[2]}`,
        `{$DATA[3]}`
    )
";

このようなクエリを

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
      ...続きを読む

Aベストアンサー

以下ソースは実際に試してはいないので、
動作の保証はありませんが、PHPの変数などを、
文字列内に含める場合には、[.](ドット)を使用して、
"12".$i."45"のように繋げると良いと思います。

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
        `FIELD_C`
    ) values (
        `".$DATA[$i++]."`,
        `".$DATA[$i++]."`,
        `".$DATA[$i++]."`
    )
";

また、if文などをはさみたい場合は、

$i = 1;
$QUERY = "SELCT * FROM test";
if( $i ){
$QUERY.= "WHERE flag = 1";
} else {
$QUERY.= "WHERE flag = 0";
}

のように、[.]を使用して文字列の内容を繋ぐことが出来ます。

以下ソースは実際に試してはいないので、
動作の保証はありませんが、PHPの変数などを、
文字列内に含める場合には、[.](ドット)を使用して、
"12".$i."45"のように繋げると良いと思います。

$QUERY="
    INSERT
    INTO
        TABLE
    (
        `FIELD_A`,
        `FIELD_B`,
        `FIELD_C`
    ) values (
        `".$DATA[$i++]."`,
        `".$DATA[$i++]."`,
        `".$DATA[$i++]."`
   ...続きを読む

QこのようなPHPでメールを送信するプログラムを書いてみたのですがメールが送信できません。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body><?php
$title = $_post['title'];
$email =$_post['email'];
$message =$_post['message'];
$result = mb_send_mail('siawaseXXX@gmail.com',$title,$massage,$email);
If ($result){
echo'you have send mail';
}else{
echo'failed';

}
?>
</body>
</html>

Aベストアンサー

私の環境(レンタルサーバ)では上記のコードでちゃんとメールを送信できました。

環境は自分のPCなどですか?
その場合はphp.iniなどをいじらないとmb_send_mailは利用できません。

「mb_send_mail xampp」などで検索して設定方法などを調べて下さい。
http://techacademy.jp/magazine/4129

###

あと考えられるのは、
・単純にPOSTで値を取得できていない。
・迷惑メールのほうに届いている。
などでしょうか。

QPHPでincludeから取り込んだphpファイル内の相対パスの記述方法について

階層の異なる場所にあるphpスクリプトファイル内に記述してあるticker.phpを参照するとします。

--"sample.php"
<?php
include_once(dirname(__FILE__) . "/../ticker.php");
?>
------------

--"../ticker.php"
// ※一部割愛
<embed src="ticker.swf">
------------

と、このように何の変更も加えない状態だと、ticker.php内に記述しているembedファイルがsample.phpフォルダにあると見なされ、swfファイルの読み込みに失敗します。この「ticker.swf」をきちんと参照できるようにしたいのですが、最適な方法はございますでしょうか。

Aベストアンサー

私の場合は、include 元の、実行 php 側に相対パスのdefine を行っています。

例)以下2つの実行 php と 1つのライブラリphp があった場合
public_html/sample.php ----------- 実行php(1)
public_html/test/sample.php ----- 実行php(2)
public_html/lib/ticker.php ----- ライブラリphp

■実行php(1)側
define('TOP_DIR', './');
include_once(dirname(TOP_DIR.'lib/ticker.php');

■実行php(2)側
define('TOP_DIR', '../');
include_once(dirname(TOP_DIR.'lib/ticker.php');

■ライブラリphp側
<embed src="<?php echo TOP_DIR?>ticker.swf">

QPHP3で作ったプログラムをPHP4、PHP5で動作させる事は可能ですか

PHP3で作ったプログラムをPHP4、PHP5で動かすことは可能でしょうか?例えばあるサイトがPHP3を未だに使用していたとします。もしPHP4,5でPHP3時に書いたプログラムが動けばいいのですが、動作はするでしょうか?もし動かなければ少しずつチューニングしていくより、一気に4,5で書き直した方がはやいでしょうか?

Aベストアンサー

1. 動くかどうか?
 物によるでしょうね
 具体的に判断するには やはり自分のPC上にApache+php5を入れて
 目的のphpを動かしてみるのが良いかと?
windowsでしたら Apache+PHP+MySqlが一度にインストールできる
 XAMPP http://phpspot.net/php/pgXAMPP.html
 Vertrigo http://japanese.osstrans.net/software/vertrigo.html
  が便利です
   (より確実なテストを行うなら目的のサーバーと同じ環境
    例えば CentosなどのLinuxでTEST用サーバーを立てた方がBESTですが)

2. php4や5書き換え?
もはやPHP4もサポート終了ですので PHP5で書き換えた方が良いかと思われます。
http://www.phppro.jp/news/403


人気Q&Aランキング

おすすめ情報