メーラを開く際の本文改行エラーの回避方法は?

このQ&Aのポイント
  • メーラを開く際に本文を改行させるとエラーが発生します。
  • PHPのheader関数を使用してメーラを開く際に、本文を改行させることはできません。
  • 改行を含んだ本文をメーラに渡す場合は、改行コードの代わりに特定の文字列を使用するなどの回避策が必要です。
回答を見る
  • ベストアンサー

header("Location: mailto:

header("Location: mailto: でメーラを開く時、本文を改行させたらエラーになるのですが、回避する方法はありませんか? <?php // 送信ボタンが押されたら if (isset($_POST["submit"])) { $wk_adrs = "web@test.sakura.ne.jp"; $wk_subject = "サブジェクト"; // これはOK $wk_body = "ボディー"; // これはNG $wk_body = "1行目ボディー".PHP_EOL."2行目ボディー"; // これもG $wk_body = <<< EOM 1行目ボディー 2行目ボディー EOM; // 画面遷移させる $wk_Location="Location: mailto:".$wk_adrs."?subject=".$wk_subject."&body=".$wk_body; header($wk_Location); exit; } ?> 下記のメッセージが出る Warning: Header may not contain more than a single header, new line detected in

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

テストもなーにもしてないから正解かわかりませんが、 http://www.kanaya440.com/contents/tips/html/003.html http://www.tagindex.com/html_tag/link/a_mailto_sub.html %0d%0a … 改行を入れます って書いてるからこれじゃ?

webuser
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • 4017B
  • ベストアンサー率73% (1303/1774)
回答No.2

// 画面遷移させる $wk_body = urlencode( $wk_body ); $wk_Location="Location:.... ~みたいにしたら通るかも? P.S. 今の時代、"mailto:" は使わない方が良いと思います。そもそも "mailto:" で起動させるべきメールソフトがもう時代遅れと言うか、使ってる人はかなりの少数派になってしまったので意味をなさない場合はほとんどかと(何も起きないかエラーメッセージが出るだけ)。 どうしてもphp経由でメール送信したのであれば、きちんとメールサーバを立ち上げて mb_send_mail() を使うべきです。

webuser
質問者

お礼

ありがとうございます。

関連するQ&A

  • 環境をかえたら header(Location:)に不具合が?

    ローカル環境からWEBサーバに作ったPHPファイルを移動させたのですが、 header(Location:)がうまく動かなくなってしまいました。 アドレスがおかしいのかと思って いくつか試してみたんですが ファイルによってうまく行くのと行かないのがあるようです。 傾向としては $chkに5が入っていたら test.phpに移動する。 if($_SESSION['chk'] != '5'){  header('Location: ./test.php');  exit; } はうまく動くのですが ifでいくつか処理を行ったあとに if(isset($_POST('submit')){  いくつかの処理  header('Location: ./login.php'); } とするとうまく動かないという状態です。 どのようなケースが考えられるでしょうか アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • 【PHP?】header("location : ・・・")が作動しな

    【PHP?】header("location : ・・・")が作動しない PHPに関して質問させていただきます。 -------------------------------------------- <html> <head> <title></title> </head> <body> <?php if($_POST['pay'] == credit) { header("Location : creditinfo.php"); } else { print("ただいま制作中です\n"); } ?> </body> </html> -------------------------------------------- というコーディングを行い、 ・前ページでのpostで[credit]というデータが返ってくると別ページへ移動 ・それ以外のデータが帰ってきたら「ただいま制作中です」というテキストを表示 ということを行いたいのですが、 それを実行すると Warning: Cannot modify header information - headers already sent by (output started at C:・・・.php:6) in C:・・・.php on line 8 というエラーが返ってきてしまい、そのページから先に進めなくなってしまいます。 様々なページで解決方法を探りましたが、解決できずにいます。 ちなみに、elseの方の「ただいま制作中です」は表示できます。 どなたかご教授をお願いします。

    • ベストアンサー
    • PHP
  • header('Location:xx')について

    こんにちは、外国人ですから、下記の内容は理解し難いと思ってますが、どうぞよろしくお願いします。 質問: A画面に二つボタンがあります、PDFdownloadボタンと戻るボタン 流れ: (1)A画面のPDFdownloadボタンを押下して、pdfファイルを出力します。 (2)A画面の戻るボタンを押下して、B画面へ遷移します。 現象: pdfファイルが正しく出力しましたが、戻るボタンを押下すると、B画面の内容はA画面の下に縦にダブって表示されました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー // B画面へ戻る if(isset($_POST["back"])){ header('Location: ./B.php'); goto done; } //PDFを出力する if(isset($_POST["download"])){ if ( isset( $_SESSION["FILEPATH"] ) && $_SESSION["FILEPATH"] != "" && isset( $_SESSION["FILENAME"] ) && $_SESSION["FILENAME"] != "" ) { downloadByStream( $_SESSION["FILEPATH"]."\\".$_SESSION["FILENAME"], $_SESSION["FILENAME"] ); } } done: 関数downloadByStreamは共通関数で管理しています。 function downloadByStream($filename, $title) { $ua = $_SERVER ["HTTP_USER_AGENT"]; $file = $filename; header ( "Cache-Control: public" ); header ( 'Pragma:public' ); if (! preg_match ( "/Firefox/", $ua )) { header ( "Content-Type: application/force-download; charset=Shift_JIS;" ); $title = mb_convert_encoding( $title, 'SJIS-win', 'auto'); $file = mb_convert_encoding( $file, 'SJIS-win', 'auto'); } header ( "Content-Transfer-Encoding: binary" ); header ( 'Content-Disposition: attachment; filename="' . $title . '"' ); header('Content-Length: '.filesize($file)); readfile($file); flush(); ob_flush(); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • header関数が使えない

    <html> <head> </head> <body> <?php header("Location: http://www.php.net/"); exit; ?> </body> </html> のように、単にheader関数を試したら Warning: Cannot add header information - headers already sent by (output started at /home/***/index.php:5) in /home/***/index.php on line 6 のようなエラーがでました。header関数が使えないようなのですが、これはどこの設定を直せば解決できるのでしょうか? 普通に、phpinfo.phpは表示できるので、phpそのものは使えています。 Apache/1.3.26 PHP 4.2.2

    • ベストアンサー
    • PHP
  • Location後の処理について

    header("Location:./hoge.php"); などとして画面遷移を行った場合、これより下の行に書かれた処理は行われているのでしょうか? たとえば if (認証処理) { ログファイルに書込 header("Location:./hoge.php"); } とすればログを書いた後に遷移するのはわかりますが、 if (認証処理) { header("Location:./hoge.php"); ログファイルに書込 } 何らかの処理2 とした場合、ログに書き込みや処理2などは実行されているのでしょうか?

    • ベストアンサー
    • PHP
  • header location が飛びません。

    お世話になります。 header location がなぜが飛びません。 お分かりになる方ご教授お願いいたします。 ・<?php の前にはスペースなどを入れておりません。 ・エラー表示にはなりませんが、飛びません。 <?php session_save_path("sess"); session_name("deri_user"); session_start(); require("class/User.class.php"); $end=null; if($_POST[submit]=="送信"){ if(session_is_registered("sesdata1")){unset($_SESSION[sesdata1]);session_register("sesdata1");} if(session_is_registered("sesdata2")){unset($_SESSION[sesdata2]);session_register("sesdata2");} $_SESSION[sesdata1]=htmlspecialchars($_POST[user_name]); $_SESSION[sesdata2]=htmlspecialchars($_POST[user_pass]); $user=new User(); $usn=$user->owner_name(); $usp=$user->owner_pass(); if(trim($usn)==trim($_SESSION[sesdata1]) and trim($usp)==trim($_SESSION[sesdata2])){ header('location:./kanri_gamen.php'); exit(); }else{ $end= "<br>ユーザー名又はパスワードが正しくありません。"; } $user->__destruct(); } ?> <html lang="ja"> <head> <title></title> </head> <body> <center> <h3>管理者ログイン画面</h3> <form action="user_login.php" method="post"> <table style="border:3px ridge #333333"> <tr> <td>名前 </td> <td> <input type="text" name="user_name" size="20"> </td> </tr> <tr> <td>パスワード </td> <td> <input type="text" name="user_pass" size="20"> </td> </tr> <tr> <td colspan="2" style="text-align:center"> <input type="submit" name="submit" value="送信"> </table> </form> <?=$end?> </center> </body> </html>

    • ベストアンサー
    • PHP
  • mailto:の中に&を入れる

    Aタグのmailtoを使って起動してきたメーラーの本文にURLを挿入したいと思っています。しかしながらURLに&が入っており、&が入ったところで切れた形になってしまいます。これはどういうように対処すればいいのでしょうか? mailto:xxx@xx.xx?subject=hoge&body=http://www.aaa.com/a.php?lo=xxx&area=123&zi=456 是非お願いします。

    • ベストアンサー
    • HTML
  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • Locationでアンカーに飛ばしたい

    下記のPHPを作り、 name_idがなかったらname.php?a1=user_idに飛ばす、 name_idがあったらuser.php?a2=name_idに飛ばしています。 ここまでは問題ありません。 今回、 name.php?a1=user_id#name user.php?a2=name_id#name と、それぞれのページの#nameのアンカーが付いているところに飛ばしたいと考えています。 しかしながら、単純に下記を header("Location: name.php?a1=$type#name:"); のようにアンカーを追加したたでけでは思う行に飛ばすことができません。 Location で他のページのアンカーに飛ばすにはどうすば良いでしょうか? 宜しくお願い致します。 <?php $type = $_GET['user_id']; $type2 = $_GET['name_id']; if (empty($type2)) { header("HTTP/1.1 301 Moved Permanently"); header("Location: name.php?a1=$type:"); exit(); } else { header("HTTP/1.1 301 Moved Permanently"); header("Location: user.php?a2=$type2:"); exit(); }; ?>

    • ベストアンサー
    • PHP
  • PHP header関数が使えない

    OS:Linux PHP、Postgres のシステム環境です。 現在PHPのheader()関数が動いてくれません。 (リダイレクトできない。) <HTML> <HEAD><TITLE>aaaa</TITLE></HEAD> <BODY> <?php header('Location: http://aaa.com/'); ?> </BODY> </HTML> こんな風にHTMLタグなにか出力した後にheader関数を呼び出すとエラーになり、headerのコールはすべての出力の前に行うこととサイトで調べてみまして分かったのですが。 あるシステムではHTMLタグの中に入れてもheader関数は問題なく動いています。 php.iniの設定なのでしょうか、それともプログラムの記述方法で回避できるのでしょうか? このおかげで膨大な修正が必要になりました。 回避策はございますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう