メール本文を効果的に組み立てる方法とは?

このQ&Aのポイント
  • 質問者は、メール本文を組み立てる際に空欄の値がある場合に、その値の部分だけではなく、タイトルも非表示にしたいという課題を抱えています。
  • 質問者の目指す出力結果は、空欄の値がある場合には、その値とタイトルを非表示にしたメール本文です。
  • 質問者は、以下のコードを書いたがうまくいかないため、どこが間違っているかを知りたいと述べています。
回答を見る
  • ベストアンサー

メール本文の組み立て

mail('abc@example.com', 'My Subject', $message); 上記の関数(胆略化しています。)で$message部分を組み立てる場合についての質問です。 例: test1 = "あいう"; test2 = ""; test3 = "きくけ"; 上記の例の場合、メール本文組み立てコードを下記のようにすると $message = "これは、テストです。\n" TEST1:$test1\r TEST2:$test2\r TEST3:$test3\r"; 以下のように出力されます。 <出力結果> これは、テストです。 TEST1:あいう TEST2: TEST3:きくけ しかし、上記の例の$test2のように入力の値が空欄の場合は、その値の部分だけではなく、タイトル「TEST2:」も表示させたくないのですが、どのように行なえばよいのでしょうか?私の目指す出力結果は以下のようなものです。 <目指す出力結果> これは、テストです。 TEST1:あいう TEST3:きくけ 目指す出力結果を実現するため、以下のようなコードを書きましたが、なかなかうまく行きません。何が悪いかお分かりの方、おられますか? $message = "これは、テストです。\n" if ($test1 != ""){ TEST1:$test1\r; } if ($test2 != ""){ TEST2:$test2\r; } if ($test3 != ""){ TEST3:$test3\r; }"; よろしくお願いします。  

  • PHP
  • 回答数1
  • ありがとう数0

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

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

何ヶ所か抜けてるみたいです。 $message = "これは、テストです。\n" ←;が抜けてる if ($test1 != ""){ TEST1:$test1\r;           ←代入先の変数がない } if ($test2 != ""){ TEST2:$test2\r;           ←代入先の変数がない } if ($test3 != ""){ TEST3:$test3\r;           ←代入先の変数がない }";                 ←";は不要    こうなるのではないかと。 $test1 = "あいう"; $test2 = ""; $test3 = "きくけ"; $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.="TEST1:$test1\n"; } if ($test2 !== ""){ $message.="TEST2:$test2\n"; } if ($test3 !== ""){ $message.="TEST3:$test3\n"; }

kitty1000
質問者

補足

yasagure-kunさん ご回答ありがとうございました。 上記の内容、理解しました。

関連するQ&A

  • メール本文の構成 行頭空白

    mail('abc@example.com', 'My Subject', $message); 上記の関数(胆略化しています。)で$message部分の構成の仕方に対する質問です。 例: test1 = "あいう"; test10 = "えおか"; test100 = "きくけ"; $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.="TEST1:$test1\n"; } if ($test10 !== ""){ $message.="TEST10:$test10\n"; } if ($test100 !== ""){ $message.="TEST100:$test100\n"; } 上記の例の場合、出力結果は以下のようになります。 <現在の出力結果> これは、テストです。 TEST1:あいう TEST10:えおか TEST100:きくけ この出力結果では行頭(左詰)で全体がそろえられているので、コロン「:」の位置はコロンより左側の文字の数により、ばらばらです。 この出力結果の各行をコロン「:」でそろえるようにするには、どうしたらよいでしょうか? (目指す出力結果をこのスレッドに記載しようとしたのですが、教えてgooでは左側のスペースが省略されてしまいだめでした。) 下記の様に「\s」なども使用してみましたが、うまく行きません。 $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.="\s\sTEST1:$test1\n"; } if ($test10 !== ""){ $message.="\sTEST10:$test10\n"; } if ($test100 !== ""){ $message.="TEST100:$test100\n"; } <うまく行かなかった出力結果> これは、テストです。 \s\sTEST1:あいう \sTEST10:えおか TEST100:きくけ 「\s」が表示されてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • if文を使用したヒアドキュメントがメール送信できません。

    if文を使用したヒアドキュメントがメール送信できません。 例: $message =<<<END ここは、ヒアドキュメントです END; if($test != ""){ $message .=<<<END ここは、if文を使用したヒアドキュメントです。 END; } 上記の例で、 $message =<<<END ここは、ヒアドキュメントです END; の部分だけならメール送信できるのですが、 if($test != ""){ $message .=<<<END ここは、if文を使用したヒアドキュメントです。 END; } を付加するとメール送信できません。 どこが悪いのでしょうか?

    • 締切済み
    • PHP
  • 掲示板からのメールの本文中に件名が表示

    http://genesis.vis.ne.jp/cgi/i/f_board/ ここで配布しているフリースクリプトを設置したのですが 書き込みに対してメールを送ると、メール本文に件名が 表示されていて、本来の件名部分には「無題」と なってしまいます。 以下がメール送信部分だと思うので貼り付けました。 おかしいところがあったら教えてください。 sub sendmail_ { $subject="$FORM{'SYSTEM14'}"; &jcode'convert(*subject, "jis"); #&jcode'convert($SYSTEM[14], "jis"); open (MAIL,"| $SYSTEM[12] -t -f $SYSTEM[13]") || &error("sendmailが使用できませんでした。"); print MAIL "To: $tomail\n"; if ($SYSTEM[9]) { print MAIL "Bcc: $SYSTEM[13]\n"; } print MAIL "From: $frommail\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n"; print MAIL "$dateに$fromnameさんから$tonameさんに送信がありました。\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "mail: $frommail\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "$title\n"; print MAIL "-+-----+-\n"; print MAIL "$message\n"; print MAIL "+-+-+-+-+-+-+-+\n"; if ($SYSTEM[11]) { print MAIL "HOST:$host\n"; print MAIL "IP:$ip\n"; print MAIL "+-+-+-+-+-+-+-+\n"; } print MAIL "$SYSTEM[2]\n"; print MAIL "$SYSTEM[3]\n"; close (MAIL); $_ = ""; }

  • 条件マッチしたときのmail関数

    ちょっと前に似た質問を行いましたが、本日になって希望どおりの動きをしないことに気づきましたので質問させていただきます。 スクリプトの流れとしては、 ====== ./ディレクトリのファイル名に"aaaa"と"bbbb"の両方の文字列が含まれるものが存在した場合、test@aaa.com宛にメールを送信する。 ====== です。 以下のスクリプトですと、上記の条件(ファイル名に"aaaa"と"bbbb"の両方の文字列が含まれるものが存在した場合)でないときもmessageが空のメールが送られてきてしまいます。どうか解決方法をご教授ください。 <?php $to = 'test@aaa.com' . ', '; $subject = 'macchisitafairugaarimasu'; $message=""; if ($dir = opendir("./")) { while (($file = readdir($dir)) !== FALSE) { if(strpos($file,"aaaa") !== FALSE && strpos($file,"bbbb") !== FALSE) { $message.="{$file} exists.\n"; } } closedir($dir); } $message = wordwrap($message,70); $headers .= 'From: umiwarn<the@aaa.com>' . "\r\n"; mail($to, $subject, $message, $headers); ?>

    • ベストアンサー
    • PHP
  • phpフォームで携帯へメール送信した場合の文字化け

    過去のよく似た事象を検索しましたが解決しなかったので 質問します。よろしくお願いします。 携帯電話のメールアドレスに送信するWEBフォームをphpで 作成したいのですが、文字化けが直らずに困っています。 コードは次のような感じです。 PCへのメールは文字化けせず、DoCoMoへ送るとsubjectは正常で本文が化けます。 またauとvodafoneへ送るとすべて化けます。 $to = "$_REQUEST['$email']"; $from = "info@aaa.bbb"; $subject = "テスト送信"; $message = "テストメールです" . $headers ='From: '. $from . "\r\n"      .'MIME-Version: 1.0' . "\r\n"      .'Content-Type: text/plain; charset=iso-2022-jp' . "\r\n"      .'Content-Transfer-Encoding:7bit' . "\r\n"      .'X-Mailer: PHP/' . phpversion(); if(mail($to, $subject, $message, $headers)==TRUE) print("メールを送信しました"); else print("メール送信に失敗しました"); 動作環境はSunOS5.7、Apache2.0、php5.0.3です。 コードはEUCで書いています。

    • ベストアンサー
    • PHP
  • sendmail 受信メールが文字化け

    sendmailで送られてくるメールがoutlook2003では一部文字化けしてしまいます。(カテゴリ「お名前:」の部分が文字化けします) 他にも20項目ぐらいありますので一括で変換できるような形にしたいと思いますがどうすれば良いでしょうか? コードの一部を記載させていただきます。 ■コード内容 sub senddatamail{ if (!open (OUT,"|$sendmail -t")) {&error('情報メール送信エラー');} jcode::convert(\$in{'namae'},'jis'); print OUT "お名前:$in{'namae'}\n"; close(OUT); } ■出力結果 、ェフセチー:テスト太郎

  • sendmailで本文が文字化けします

    sendmailを使ってメールを送信していますが、下記処理中で、charsetの指定を入れないと本文は文字化けしないのですが、指定を入れると文字化けしてしまいます。 ※ちなみに、OutlookExpressはどの場合でも文字化けしないで受信できました。 どなたかご存知のかた教えていただけないでしょうか。 ソースは以下のような感じです。 require "/XXX/jcode.pl";# 文字列変換 require "/XXX/mimew.pl";# MIME エンコード # メールHEADER作成 $head = "From: $FromUser\n"; $head .= "To: $ToUser\n"; $head .= "Subject: $Subject\n"; $head .= "Mime-Version: 1.0\n"; $head .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $head .= "Content-Transfer-Encoding: 7bit\n"; $head .= "\n"; # JISコード変換 $code = &jcode'convert(*head, 'jis'); # エンコード $header = &mimeencode($head); # メール本文作成 $body = "メール送信のテストです\n"; $code = &jcode'convert(*body, 'jis'); if (open(MAIL,"|/usr/lib/sendmail -f $FromUser $ToUser")){ print MAIL $header; print MAIL $body; print MAIL "\n\n"; close(MAIL); }

  • 関数の引数表記なしについて

    はじめまして。C言語初心者です。 質問させてください。 関数を宣言して引数を表記しないで使用することは可能なのでしょうか? またどのような場合に使用するのでしょうか? 例として以下コードになります。 ----------------------- #include<stdio.h> int test1(int a); void test2(int b); void main(){ int i = 0; int j = 0;       //この部分 i = test1; printf("%d\n", i);        //この部分 j = test2; printf("%p\n", j); } int test1(int a){ return a + 1; } void test2(int b){ printf("test"); } --------------------------- 出力結果を見ると関数のアドレスが帰ってくるように思われますが、詳細が分かりません。 詳しい方がいらしましたら教えてください。 宜しくお願いいたします。

  • PEAR::Mailを使ったメール本文の書き方

    PEAR::Mailを使ってフォームからメール送信をしようとしていますが 本文となる部分の書き方がわかりません。 以前はこの正しいかどうかはわかりませんがPEAR::Mailを使わず $body .= "■名前:" .$_SESSION["sei"]." ".$_SESSION["mei"]. "\n"; $body .= "■カナ:" .$_SESSION["sei_kana"]." ".$_SESSION["mei_kana"]. "\n"; mb_send_mail( $mail_to, $subject, $body, $headers ); のように書いておりましたが、 今回はファイルの添付が複数必要になり楽に添付ファイルの送信が出来るとのことでPEAR::Mailをインストールして初めて使いました。 メールの添付はできたのですが、本文が以前のような書き方では送信できませんでした。 $body = "添付ファイルのテストです。"; $body = $_SESSION["sei"]. $_SESSION["mei"]."\n"; とするとエラーに $body = "添付ファイルのテストです。".$_SESSION["sei"]; としてもエラーになります。 同然間違った書き方なのでしょうけど、正しい書き方がわからず。 調べても対外が $body = "メール送信テスト" のような変数に対して簡単な1行の文字列のもばかりでようやく $sei = $_SESSION["sei"]; $mei = $_SESSION["mei"]; $body = <<< _EOT_ 添付ファイルのテストです。 $sei $mei _EOT_; のようにヒアドキュメントを使って送れるところまでは出来たのですが、今回送りたい項目がユーザー側の操作で増減し最大70項目あり、全てベタで書くのも大変なのでループ処理をしたいのですが、ヒアドキュメントの中には変数しか書けないようですし、どのようにしたら良いかがわからなくて困っています。 宜しくお願いします。

    • 締切済み
    • PHP
  • ExcelVBAで部分一致(*)をしたい

    以下のコードで部分一致(*)をさせようとしたのですが、 コンパイルエラーのメッセージが出てしまいます。 どうしたらいいのでしょうか。 よろしくお願いします。 test = Cells(2, 3).Value test2 = Cells(1, 3).Value If * & test & * = test2 then …

専門家に質問してみよう