• ベストアンサー

mail関数を使った場合のReturn-Pathは?

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) 上記のように記述してみたのですが、だめでした。 よろしくお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
回答No.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 私のところでは出なかったのでメールサーバーの環境によって違うのかもしれません。 参考にならなくて申し訳ないです

rabu_chihaha
質問者

お礼

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

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

Return-Path: ヘッダは送信側でつけるヘッダではなく、最終的に受信するメールサーバーが EnvelopeFrom からつけるものです(そのサーバーの設定によりつけないこともある)。また、メールサーバーのエラーメッセージはReturn-Pathヘッダをみてそこに返しているわけではなく、EnvelopeFromのアドレスに返しているので、送信側でReturn-Pathというヘッダを作っても無意味です。 ここまでは経験者・自信あり。以下は一般人・自信なし。 EnvelopeFrom は sendmail の -f オプションで設定できるはずですが、効かないということは、/etc/php.ini の sendmail_path ですでに -f が指定されているのではないでしょうか?

rabu_chihaha
質問者

お礼

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

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

#1の方のmb_send_mailを単にmailにするだけで行きませんか? 第4引数が追加ヘッダーになっているので、そこに追加すれば良さそうな気がしますが・・・

参考URL:
http://www.php.net/manual/ja/function.mail.php
rabu_chihaha
質問者

お礼

ありがとうございます。 メールヘッダーを見ると Return-Path: <****1@.co.jp> ・・・ Return-Path: ****2@.co.jp と表示されています。 はじめに表示される ****1@.co.jpはApache側で設定されているメールアドレスで、 複数行下に表示されている ****2@.co.jpは実際に利用したいメールアドレスです。 上の Return-Path: <****1@.co.jp> を消したいのですが。

回答No.1

使用している関数は違いますが以下のようにしてエラーメールが 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 です。

rabu_chihaha
質問者

お礼

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

関連するQ&A

  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP
  • フォームメールでメールを扱う場合のReturn-pathの設定について

    ちょっと初歩的な質問かもしれませんが、困っていますので教えて下さい。 メアド非公開型の掲示板などでは、フォームメールが必須です。 で、フォームメールがエラーになった場合のエラーメールの送り先、 つまり、Return-pathについて質問させて下さい。 (Return-pathの設定の仕方は分かっています。) 1.管理人に戻す設定--第三者(管理人)が差出人のメール内容を見れる状態ができてしまう。 2.差出人に戻す設定--受取人のメールアドレスが、差出人に公開される。 上記の方法それぞれに欠点があります。 普通は、1の方法を採用しているようですが、チョット問題があるように思いま す。ことわり書きを入れて、2の方法を採用するというのはどんなものでしょうか? 3番目の選択肢として、Return-pathを設定しないで、エラーメールを受け取らない設定と言うのはどうでしょうか? エラーになったかどうかは分からない代わり に、1、2の欠点をカバーできます。ただ、Return-pathを空設定にすると、取り扱いを拒否するサーバーもあるとききますが、そのあたりはどうなのでしょうか? 宜しくお願いいたします。

  • Return-Path のデフォルト設定はどこですか?

    Vine Linuxの自宅サーバでCGIやPHPのメール自動送信スクリプト(メールフォームやメルマガやブログのコメントなどなど・・・)で、Return-Pathを設定しないで送信すると、なぜかReturn-Pathがrootならまだ良いのですがそのスクリプトとは全く関係ない普通のユーザーのメールアドレスが設定されてしまいます・・・ちなみに普通のユーザーは自分1人だけなので自分のプライベートアドレスなわけですが・・・ もちろんスクリプトを使用しない通常のメール送信のReturn-Pathは全く問題なくFromのアドレスが適用されます。 CGIのスクリプトの中をのぞいてsendmailの送信部分にオプション -f でReturn-Pathアドレスを指定すれば問題なかったのですが、他にも色々メール送信部分があるのですべて直すのは難しく根本的なところを直したいのですが、どこにReturn-Path のデフォルト設定(指定しない場合の設定)はあるのでしょうか?・・・こんな設定をした記憶はないのですが・・・せめてプライベートアドレス以外にしたいのですが・・・・ サーバのメールソフトは送信サーバにPostfix SMTP-AUTH、 受信サーバにcourier-imapを使用していますが、CGI でのメール送信はPostfix互換?のsendmailで行っています。 以上よろしくお願いします。

  • メールが上手く飛びません

    初めて質問させていただきます。PHP初心者です。 下記のコードで退会者連絡を社内にメールで流そうとしているのですが、 Toアドレスがどうやってもおかしなアドレスに勝手になってしまい 原因がわからずじまいになってしまって困っております・・・。 コードの次にエラーの内容について記述しておきます。 ↓ココからコード -------------------------------------------------------------- <?php $mailname = $_POST["名前"]; $mailemail= $_POST["email"]; $mailreason = $_POST["退会理由"]; $carbon = $_POST["carbon"]; ?> <?php mb_language(”Japanese”); mb_internal_encoding(”SJIS”); mb_detect_order(”ASCII, JIS, UTF-8, EUC-JP, SJIS”); //宛先設定 $to = ($carbon); //サブジェクト設定 $subject = stripslashes($_POST["名前"])."様よりお知らせメール停止処理申し込みが届きました。"; //メッセージ送信準備 $from = "aaa@aaa.com"; $header = "From: $from"; $msg = <<<EOF {$mailname}様よりお知らせメール停止処理申し込みが届きました。 ----------------------------------------------- [名前] {$mailname} [email] {$mailemail} [退会理由] {$mailreason } ----------------------------------------------- EOF; // メール を送信 $r = mb_send_mail($to, $subject, $msg, $header); if($r) { //echo ”メール送信成功”; }else{ //echo ”メール送信失敗”; } ?> ちなみに、 //宛先設定 $to = ($carbon); の後ろでechoをさせて中身を確認しても、 意図しているアドレスが入っているのは確認しています。。。 -------------------------------------------------------------- このコードで送ってみると、 例えば $carbon の中に「yuko8320_code@yahoo.jp」というアドレスが入ったとして、エラーメッセージを見てみると何故か、 「yuko8320_code@yahoo.yahoo.jp, jp@yahoo.jp」というアドレス宛に送ろうとしてしまいます。 もちろん、そんなアドレスは存在しないのでfailure noticeで落ちてしまうということになっています。。。 どうかご教授いただけませんでしょうか?

    • 締切済み
    • PHP
  • メールヘッダーの解析について

    お疲れ様です。 お世話になっています。 今空メールのシステムを作っていて、Fromの取得について困っています。 今まではstdinで1行ごと取得して、FROMで始まる行の<>の中みを取得というやりかたをしていたのですが、とあるメールサーバーからくるメールが FROM: =?MIME_ENCODE?= <test@example.com> と2行になっていて、取得に失敗していました。 なので1行ずつ取得をやめて、 ヘッダーのFROM:から次の内容までを1要素とした配列が作れればいいなと思い、今取り組んでいる状態です。 つまり、 FROM: =?MIME_ENCODE?= <test@example.com> RETURN_PATH:<test@example.com> SUBJECT:=?MIME_ENCODE?= があれば、 $header['FROM']="=?MIME_ENCODE?= <test@example.com>"; $header['RETURN_PATH']="<test@example.com>"; $header['SUBJECT']="=?MIME_ENCODE?="; としたいということです。 うまくこの形に収めるためには正規表現が必要だと思うのですが、 別の方法でもこの形に収めるにはどうしたらよいでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • CGIでメールのReturn-Pathに値をセットする方法を知りたいです

    PERLにてメールを送信する際の、 [Return-Path]に明示的にメールアドレスを指定したいのですが、 ヘッダー内に "Return-Path:" . "メアド"; のように指定しても反映されません。 Return-Pathはどのように設定すればよいのでしょうか。

    • ベストアンサー
    • CGI
  • PHPからのメールがこない

    #! /usr/local/php4/bin/php<? //各種初期設定 $from="info@demo.net"; //送信元 $dest="info@demo.net"; //宛先 $header="From: $from\nReply-To: $from"; //ヘッダ $subject="お問い合わせ"; //件名 //エラーがない場合のみメール送信 if($result=="flash"){ // 文字コードの変換 mb_convert_variables("EUC-JP", "JIS, SJIS, UTF-8", &$SUBJECT, &$COMPANY, &$PERSON, &$EMAIL, &$URL, &$COMMENT); //言語を日本語に設定 mb_language("Japanese"); $message="省略"; //メールを送信する mb_send_mail($dest, $subject, $message, $header); // FlashのAns = Sender.Answer; に'Complete' を返す print "Content-type: text/plain\n\n"; print "Answer=Complete"; } ?> というFlashと連動するPHPなのですが、 メール送信完了と表示されるのにメールがきません。 どなたかお分かりになるかた是非教えて下さい。 利用サーバー環境は OS Linux (Fedora Core 3) PHP PHP-4.3.11 (CGI版) Perl Perl-5.8.5 です。よろしくお願いします。

    • ベストアンサー
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • EメールのReturn-Pathって変更可能ですか?

    こんにちは メールでなりすましのメールを送ってる人たち(迷惑メール送信業者など)はFromを変えたりしてるとおもうのですがヘッダのなかにあるReturn-pathという部分も変更して送信していることってありえますか?? あと、携帯電話などの「なりすましメール拒否機能」というのはメールのFromとどこを比較したりしてなりすましか否かを判断しているものなのでしょうか???   よろしくお願い致します。 (ちなみに、迷惑メールを送ったり悪用目的の質問はありません)

  • PHPのメール送信でエラーが発生します。

    PHPでメール送信プログラムを組んだのですが、 エラーが発生してメールが送信できません。 いろいろ試したのですが、解決方法が見いだせなかったため、 書き込みをいたしました。 以前、XPで開発をしていたときは、メール送信ができたと思ったのですが。。 環境は以下の通りです。 WindowsVista PHP5.2.5 Apache2.2.6 melon1.62 実行したプログラムは以下の通りです。 $to = "abc@yahoo.co.jp"; $from = "abc@yahoo.co.jp"; $subject = "タイトル"; $message = "メッセージ"; $header = "From: $from"; mb_send_mail($to, $subject, $message, $header); abc@yahoo.co.jpは、実際には自分のヤフーアドレスで入力しました。 エラーは、melonのコンソールに、 421 temporary sender lookup fail と表示されます。 よろしくお願いいたします。

    • ベストアンサー
    • PHP