【最大10000ポイント】当たる!!質問投稿キャンペーン!

Apache 1.3.33
PHP Version 4.4.1

$header = "From:".$_from;
$header .= "Return-Path:".$_from;
のようにヘッダー部を設定し、mail関数を使っています。
$result = mail($_email, $subject, $message, $header);
しかし、Return-Pathが反映されていないようで、
メールが届かない場合などの、
「failure notice」メールが
Apache側で設定されているメールアドレスに
送信されてしまいます。

どのように設定すればよろしいのでしょうか?

またパラメータを使って
$header = "From:".$_from;
$para ="-f".$_from;
$result = mail($_email, $subject, $message, $header,$para)

上記のように記述してみたのですが、だめでした。

よろしくお願いいたします。

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

A 回答 (4件)

No.1回答者です



No.3回答者さんの言うように
mail()関数第4パラメータにReturn-Path をつけないと、
メールクライアントでのReturn-Pathにはサーバーの設定したメールアドレスになっていました。
逆に付けると、Return-Pathで指定したアドレスになりました
メールサーバーのログを見ると、
Return-Path を付けた場合には
msg aaaaa bytes from (Return-Pathのアドレス)
付けない場合には
msg aaaaa bytes from (サーバーのアドレス)
でした。これがEnvelopeFrom に相当

私のところの環境ではEnvelopeFrom に対してどうやら上書きするようです。

>SMTP server response: 451
私のところでは出なかったのでメールサーバーの環境によって違うのかもしれません。

参考にならなくて申し訳ないです
    • good
    • 0
この回答へのお礼

とんでもない。ありがとうございました。

お礼日時:2005/12/07 18:38

Return-Path: ヘッダは送信側でつけるヘッダではなく、最終的に受信するメールサーバーが EnvelopeFrom からつけるものです(そのサーバーの設定によりつけないこともある)。

また、メールサーバーのエラーメッセージはReturn-Pathヘッダをみてそこに返しているわけではなく、EnvelopeFromのアドレスに返しているので、送信側でReturn-Pathというヘッダを作っても無意味です。

ここまでは経験者・自信あり。以下は一般人・自信なし。

EnvelopeFrom は sendmail の -f オプションで設定できるはずですが、効かないということは、/etc/php.ini の sendmail_path ですでに -f が指定されているのではないでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
Return-Pathを設定してもだめですか。(-_-;)
php.iniはレンタルサーバですので変更できないから
だめですね。

お礼日時:2005/12/07 18:40

#1の方のmb_send_mailを単にmailにするだけで行きませんか?


第4引数が追加ヘッダーになっているので、そこに追加すれば良さそうな気がしますが・・・

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

ありがとうございます。
メールヘッダーを見ると

Return-Path: <****1@.co.jp>
・・・
Return-Path: ****2@.co.jp

と表示されています。
はじめに表示される
****1@.co.jpはApache側で設定されているメールアドレスで、
複数行下に表示されている
****2@.co.jpは実際に利用したいメールアドレスです。

上の
Return-Path: <****1@.co.jp>
を消したいのですが。

お礼日時:2005/12/07 09:19

使用している関数は違いますが以下のようにしてエラーメールが Return-Path: に指定したアドレスに返ってきます。



mb_send_mail($send_mail_to, "社内掲示板にメッセージが投稿されました", $message_body,
"From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
"Return-Path: $email\r\n" .
"Date: ".date("r")."\r\n" .
"Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
"X-Mailer: PHP/" . phpversion() . "\r\n");

$email にエラーが返る。

ちなみに PHP-4.3.11 です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私も以前mb_send_mail関数を使っていましたが、
バグがあるようなことが書いてあったので、
mail関数に変更しました。
上記のように変更し実行すると
Warning: mb_send_mail(): SMTP server response: 451 See http://pobox.com/~djb/docs/smtplf.html. in ****
のエラーが出てしまいます。

以前も出た気がします。

お礼日時:2005/12/06 18:03

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

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

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

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

QPHPsendmailにて送信元を変更

PHPのsendmailにて送信元を変更させたいのですが
現在
mb_send_mail($sendto,$subject,$text,"Form:送信元アドレス")
のようにしているのですが、反映されずサーバーのアドレスにて送信されてしまいます。
ini_set関数にてセットしてみても同じでした。
メールが返信された場合に当方のアドレスまで返信されるように当方のアドレスを送信元表示させたいのですが・・
sendmailの設定を変える必要があるのでしょうか?
なにか良い方法はありませんか?

Aベストアンサー

使い方には問題のないような気が…

>mb_send_mail($sendto,$subject,$text,"Form:送信元アドレス")

"Form" → "From" の綴りの間違いだけだったりして?

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qmb_send_mailで送ったエラーメールの行方

phpのmb_send_mail関数ですがデフォルト設定でsendmailを使ってメールを送信しているようです。エラーメールを送信した場合、エラーメールが普通に戻って来ません、どこにエラーメールが行ってるか教えてください。

エラーメール=アドレスが正しくないメールや送信時にエラーが出たメールアドレスなど

Aベストアンサー

sendmailラッパーを使っているだけなのでは。
メールサーバーがXmailとのことなので、PHPから見てラッパーが何であっても、やはりXmailが使われます。

で、エンベロープというのは言わば郵便手紙でいうところの封筒のようなものです(語弊があるかもしれませんが)。メールヘッダーではなく、送信時に付加されるもので、送信者などが記載されます。
おそらく、エラーメールの行き先、というよりデフォルトの送信者を、Xmailの設定で確認するのが早道だと思います。

QReturnPathが指定できない?

メール配信システム
http://www.ahref.org/cgi/acmailer/acmailer.html
を使用しているのですが
宛先不明アドレスは指定したアドレスに届き
不着メールとして処理される機能があるのですが
不着メールアドレスを入力しても、指定したアドレスにエラーメールが届きません。
サーバはさくらインターネットライトプランを使用しています。
どうすればReturnPathを指定できますでしょうか?
よろしくお願い致します。

Aベストアンサー

メールサーバ(MTA)がエラー時にエラーメールを返す先は、
Return-Path でも Errors-To でもなく、
メールの本文/ヘッダ外の「Envelope From」に指定したアドレスになります。

acmailer のスクリプトを見たところ、
MTA が qmail の場合は Envelope From を指定してますが、
MTA が sendmail の場合は Envelope From の指定をしていないようです。

試しに、システム設定で、「QMAIL」のチェックを入れてみてください。
さくらインターネットはMTAとして sendmail を使用していますので、
本来はこのチェックを入れてはいけないのでしょうけど、
スクリプトを見たかぎりでは、この設定は、上述の Envelope From の指定の有無のみに使われているようです。

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Qサーバーによってはmb_send_mailが実行できないこともあるのでしょうか

現在友人に頼まれて、PHPによるmb_send_mail関数を使ったメールフォームを作成しています。

一度私がレンタルしているサーバーで動作確認をして、その後、友人のレンタルしたサーバーにアップしてみましたが、
なぜか動作してくれません。
私のサーバーですと、何の問題もなく動作します。

こういったケースの場合に考えられるのは、
mb_send_mailの実行をサーバー側で拒否しているのでしょうか。

どうぞお助け下さい。

Aベストアンサー

sendmail_pathにパスが入っているのでsendmailは
使えます。

まず、動かない方のサーバーのphpinfoの上の方の
Configure Commandの中に--enable-mbstringって
入ってますか?

これが入ってればmbstring拡張モジュールが入っているということなので、動かない原因は別のところにあります。エラーメッセージやバージョンなど教えてもらえれば、何か原因がわかるかもしれません。

もし入っていなければ、参考URLのサイトさんで漢字コード変換のスクリプトを配布されていますのでこちらを使わせていただくことをおすすめします。

このスクリプトを使ったフォームメールスクリプトも配布されていますので、参考にしてみてはいかがでしょうか?

参考URL:http://www.spencernetwork.org/

Q宛先不明メールの行き先

宛先不明メールについて
以下の2点について教えてください。

1.宛先不明メールはどこに返されるのか
 (From?Reply-to?)

2.返した先も不明だった場合、
 そのメールはどうなるのか
 (偽装によるもの)

SPAMに対して宛先不明を返すソフト、
というのがあって、その辺りが気になっています。
もちろんこの対策が気休め程度なのは知っていますが。
よろしくお願いします。

Aベストアンサー

>エラーを返すサーバが自動でReturn-Pathを付けるから、
>最初にエラーを出した側に返ってお終い、ということになるのでしょうか?

MTAがsendmailの場合ですが、sendmail.cfで以下の様に設定されています。

# who (if anyone) should get extra copies of error messages
O PostmasterCopy=Postmaster

宛て先不明で返ってきたエラーメールの受取人が不明の場合、
さらに他のメールサーバに転送される事はありません。
PostmasterCopyで指定したPostmasterアカウントに配送されて終わりです。

アカウントPostmasterはaliasesファイルで

Postmaster : root

と、指定されている事が普通で、最終的にはrootアカウントにエラーメール
として配送されて終わりです。

Qfile_get_contents でリダイレクトを知りたい

file_get_contents(url) で、サイトのHTMLを取り込むことは問題なくでき、そのサイトにリダイレクト(Locationヘッダ?)が設定されていると、ちゃんとリダイレクト先のHTMLを取得することができるのですが、リダイレクトされたことや、リダイレクト先URLは、どのようにすれば知ることができるでしょうか。

得られたHTMLはリダイレクト先の内容なのに、私が作ったプログラムが把握しているURLはリダイレクト元のアドレスなので、不整合が起きてしまい困っています。

ポインタで結構ですので教えていただけると幸いです。

Aベストアンサー

ヘッダ情報が得られないと無理だと思います。
ソケット通信でヘッダ情報を取得すればLocationの場合にはヘッダに
HTTP/1.1 302 Found

Location: http://example.com/
が含まれるので判別できます。

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


人気Q&Aランキング