OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

mail関数を使用した場合のエラー情報取得方法

  • すぐに回答を!
  • 質問No.161235
  • 閲覧数240
  • ありがとう数10
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 88% (16/18)

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

誰か教えてください・・サンプルがあれば大変うれしいです。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル7

ベストアンサー率 68% (13/19)

このスペースでは詳しく書けないのですが、envelope from を指定しない場合、phpから送信されたメールの from (この from はメールのヘッダにある from ではありません。smtp session での from です。)は、apache のユーザー、つまり大半の apache では、nobody となっているはずです。

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

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

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

お礼率 88% (16/18)

アドバイス・・大変有難うございます。頑張って調べてみます。
投稿日時 - 2001-11-07 08:48:35
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル11

ベストアンサー率 58% (114/195)

http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc822j.html 但し物が古いので最新版では異なっている可能性があります。 4.4.4. FROM / SENDER / REPLY-TOの自動利用 このあたりが参考になるかと。(機械翻訳っぽい臭いがしますので原文を用意する事をオススメします) もっとも勧告を守らない無作法なサー ...続きを読む
http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc822j.html

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

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

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

ちなみにこいつ(RFC822)をまじめに守ると一部携帯ユーザにメール出せません(笑)
お礼コメント
y-boss

お礼率 88% (16/18)

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

ベストアンサー率 68% (13/19)

Unix系か、Win系かわからないので外しているかも知れませんが、php3を使用されているなら、MTA の wrap script を書くのが手っ取り早いです。 で、その script へむけて、php3.ini の sendmail_path を記述する。 sendmail なら、-f オプションをつけてあげればいいです。 ただ、alfeim さんもおっしゃっているように、RFC を一度読 ...続きを読む
Unix系か、Win系かわからないので外しているかも知れませんが、php3を使用されているなら、MTA の wrap script を書くのが手っ取り早いです。
で、その script へむけて、php3.ini の sendmail_path を記述する。

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

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

ちなみに、PHP 4.0.5 以上なら mail 関数の引数にパラメータを渡せるようになっています。
お礼コメント
y-boss

お礼率 88% (16/18)

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

この言葉が今現在理解ができていません。(勉強不足・・パンチ)情けないばかりで、こんなもんも知らんかったら「プログラム作るなぁ~」と言われそうなの覚悟で・・・教えてください。どうやって、記述するのですか?おしえて~
投稿日時 - 2001-11-05 17:19:06
  • 回答No.3
レベル11

ベストアンサー率 58% (114/195)

wrap scriptを作る、というのはsendmailやqmailなどのMTAプログラムを呼び出し、それにメール本文を渡すことで送信するメール本文をより詳細に指定することです。 これ以上の事をしようとするとMTAを使わず、自身でSMTPを話しメールを送信する必要が生じます。 なお、PHP3のMail関数でもHeader情報操作できますんでtujigeさんのかかれてる方法を使わなくでも大丈夫です( ...続きを読む
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によるメール配送手続き、あたりは最低限の知識として身につけておきましょう。
すでに立ち上がってるサーバの設定がなされているのであれば、その管理者に聞けばどのような本を読めばいいかぐらいは聞き出せるでしょう。
お礼コメント
y-boss

お礼率 88% (16/18)

外注ですよね~考えたのですよ!それも・・残念ながら「そこらへんの事ができる開発屋」が身近にいなかったのです・・また、「高いし・・・」ってなことで、自力での開発になってしまいました・・トホホ!再度、挑戦いたします。
投稿日時 - 2001-11-06 10:54:50
  • 回答No.4
レベル7

ベストアンサー率 68% (13/19)

すいません。チャチャになるかもしれませんが :-) Reply-To: は、返信のアドレスであって、y-boss さんのおっしゃっている届かなかった場合の戻りアドレスは、 Return-Path: ではなかったでしょうか?(Errors-to: もあったと思いますが、あれはすでに時代遅れですよね?たしか。) で、sendmail の -f オプションは envelope from を指定して送 ...続きを読む
すいません。チャチャになるかもしれませんが :-)

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引数としてコマンドラインパラメーターを指定できるようになって、便利になったな。と感じております。

# すいません。チャチャでしたね。
補足コメント
y-boss

お礼率 88% (16/18)

//$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:48
お礼コメント
y-boss

お礼率 88% (16/18)

色々と有難うございます。日夜頑張っております。本当に皆さん詳しいですね~(尊敬です)ところで、mail関数にて皆様が言われていることを実際にやってはみたのですが「???(戻ってこない)」のです。この文章で気になったのは、「たとえ、追加ヘッダ情報(mail関数の第4引数)に Return-Path・・・・」なのですが、この「envelope from 」なるものもヘッダー情報として記述するのですか?またまた、Sendmailの難しい指定の中に隠れているのですか?教えてください!
投稿日時 - 2001-11-06 10:48:18
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ