質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3536閲覧

mb_send_mail関数について

gik

総合スコア152

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/12/29 17:54

編集2015/12/30 09:11

すいません。
情報が足らずに申し訳ありませんでした。
cent os7で自宅サーバで独自ドメインをとっておりphp+mysqlを動かしています。
centos5では動いていてきちんと届いていたsendmail関数を使ったメールが届きません

php

1 2// register2.php 3require( 'config.php' ); 4require( 'pref_tbl.php' ); 5// 入力項目のチェック 6if ( $_POST['email1'] == '' ) $error .= 'メールアドレスが入力されていません<br>'; 7if ( strlen( $_POST['email1'] ) > 64 ) $error .= 'メールアドレスが64文字以上です<br>'; 8if ( ereg( '[^!-~]', $_POST['email1'] ) ) $error .= 'メールアドレスに使えない文字が含まれています<br>'; 9 10if ( $_POST['passwd'] == '' ) $error .= 'パスワードが入力されていません<br>'; 11if ( strlen( $_POST['passwd'] ) > 16 ) $error .= 'パスワードが16文字以上です<br>'; 12if ( ereg( '[^!-~]', $_POST['passwd'] ) ) $error .= 'パスワードに使えない文字が含まれています<br>'; 13 14if ( $_POST['name_kanji'] == '' ) $error .= '姓名(漢字)が入力されていません<br>'; 15if ( strlen( $_POST['name_kanji'] ) > 32 ) $error .= '姓名(漢字)が32文字以上です<br>'; 16 17if ( $_POST['name_kana'] == '' ) $error .= '姓名(かな)が入力されていません<br>'; 18if ( strlen( $_POST['name_kana'] ) > 32 ) $error .= '姓名(かな)が32文字以上です<br>'; 19 20if ( $_POST['sex'] == '' ) $error .= '性別が入力されていません<br>'; 21if ( $_POST['year'] == '' ) $error .= '生年月日が入力されていません<br>'; 22if ( $_POST['month'] == '' ) $error .= '生年月日が入力されていません<br>'; 23if ( $_POST['day'] == '' ) $error .= '生年月日が入力されていません<br>'; 24 25if ( $_POST['postal1'] == '' ) $error .= '郵便番号が入力されていません<br>'; 26if ( $_POST['pref'] == '0' ) $error .= '都道府県が選択されていません<br>'; 27if ( $_POST['address1'] == '' ) $error .= '住所1が入力されていません<br>'; 28 29// 接続 30$link = mysql_connect( $db_host, $db_user, $db_password ); 31mysql_select_db( $db_name ); 32$result = mysql_query( 'set character set utf8' ); 33 34$sql = "select email1 from users where email1 = '" . mysql_real_escape_string( $_POST['email1'] ) . "'"; 35$result = mysql_query( $sql ); 36if ( mysql_num_rows( $result ) > 0 ) $error .= 'このメールアドレスはすでに登録されています<br>'; 37 38// エラー画面 39if ( $error != '' ) { 40 $title = $site_name . ' 会員登録[エラー]'; 41?> 42<? require( 'header.php' ) ?> 43<div align="center"> 44<h1><?= $site_name ?> 会員登録[エラー]</h1> 45<?= $error ?> 46<br> 47ブラウザのバックボタンで戻り、入力を確認してください。<br> 48<br> 49<? require( 'footer.php' ) ?> 50<? 51 exit; 52} 53 54// 55$title = '会員登録[1/4]'; 56?> 57<? require( 'header.php' ) ?> 58<div align="center"> 59<h1><?= $site_name ?> 会員登録[2/4]</h1> 60<table> 61<form action="register3.php" method="post"> 62<input type="hidden" name="email1" value="<?= $_POST['email1'] ?>"> 63<input type="hidden" name="passwd" value="<?= $_POST['passwd'] ?>"> 64<input type="hidden" name="name_kanji" value="<?= $_POST['name_kanji'] ?>"> 65<input type="hidden" name="name_kana" value="<?= $_POST['name_kana'] ?>"> 66<input type="hidden" name="sex" value="<?= $_POST['sex'] ?>"> 67<input type="hidden" name="year" value="<?= $_POST['year'] ?>"> 68<input type="hidden" name="month" value="<?= $_POST['month'] ?>"> 69<input type="hidden" name="day" value="<?= $_POST['day'] ?>"> 70<input type="hidden" name="postal1" value="<?= $_POST['postal1'] ?>"> 71<input type="hidden" name="postal2" value="<?= $_POST['postal2'] ?>"> 72<input type="hidden" name="pref" value="<?= $_POST['pref'] ?>"> 73<input type="hidden" name="address1" value="<?= $_POST['address1'] ?>"> 74<input type="hidden" name="address2" value="<?= $_POST['address2'] ?>"> 75<tr> 76 <td>メールアドレス</td> 77 <td><?= $_POST['email1'] ?></td> 78</tr> 79<tr> 80 <td>パスワード</td> 81 <td>********</td> 82</tr> 83<tr> 84 <td>姓名(漢字)</td> 85 <td><?= $_POST['name_kanji'] ?></td> 86<tr> 87<tr> 88 <td>姓名(かな)</td> 89 <td><?= $_POST['name_kana'] ?></td> 90<tr> 91<tr> 92 <td>性別</td> 93 <td> 94<? if ( $_POST['sex'] == '1' ) echo '男性'; else echo '女性' ?> 95 </td> 96<tr> 97<tr> 98 <td>生年月日</td> 99 <td> 100 <?= $_POST['year'] ?><?= $_POST['month'] ?><?= $_POST['day'] ?><br> 101 </td> 102<tr> 103<tr> 104 <td>郵便番号</td> 105 <td> 106 <?= $_POST['postal1'] ?>-<?= $_POST['postal2'] ?> 107 </td> 108<tr> 109<tr> 110 <td>都道府県</td> 111 <td> 112<?= $pref_tbl[$_POST['pref']] ?> 113 </td> 114<tr> 115<tr> 116 <td>住所1</td> 117 <td><?= $_POST['address1'] ?></td> 118<tr> 119<tr> 120 <td>住所2</td> 121 <td><?= $_POST['address2'] ?></td> 122<tr> 123<tr> 124 <td></td> 125 <td><input type="submit" value="- 利用規約に同意して、登録します -"></td> 126</tr> 127</form> 128</table> 129</div> 130<? require( 'footer.php' ) ?> 131 132<? 133// register3.php 134require( 'config.php' ); 135// 入力項目のチェック 136if ( $_POST['email1'] == '' ) $error .= 'メールアドレスが入力されていません<br>'; 137if ( strlen( $_POST['email1'] ) > 64 ) $error .= 'メールアドレスが64文字以上です<br>'; 138if ( ereg( '[^!-~]', $_POST['email1'] ) ) $error .= 'メールアドレスに使えない文字が含まれています<br>'; 139if ( $_POST['passwd'] == '' ) $error .= 'パスワードが入力されていません<br>'; 140if ( strlen( $_POST['passwd'] ) > 16 ) $error .= 'パスワードが16文字以上です<br>'; 141if ( ereg( '[^!-~]', $_POST['passwd'] ) ) $error .= 'パスワードに使えない文字が含まれています<br>'; 142 143if ( $_POST['name_kanji'] == '' ) $error .= '姓名(漢字)が入力されていません<br>'; 144if ( strlen( $_POST['name_kanji'] ) > 32 ) $error .= '姓名(漢字)が32文字以上です<br>'; 145 146if ( $_POST['name_kana'] == '' ) $error .= '姓名(かな)が入力されていません<br>'; 147if ( strlen( $_POST['name_kana'] ) > 32 ) $error .= '姓名(かな)が32文字以上です<br>'; 148 149if ( $_POST['sex'] == '' ) $error .= '性別が入力されていません<br>'; 150if ( $_POST['year'] == '' ) $error .= '生年月日が入力されていません<br>'; 151if ( $_POST['month'] == '' ) $error .= '生年月日が入力されていません<br>'; 152if ( $_POST['day'] == '' ) $error .= '生年月日が入力されていません<br>'; 153 154if ( $_POST['postal1'] == '' ) $error .= '郵便番号が入力されていません<br>'; 155if ( $_POST['pref'] == '0' ) $error .= '都道府県が選択されていません<br>'; 156if ( $_POST['address1'] == '' ) $error .= '住所1が入力されていません<br>'; 157 158// 接続 159$link = mysql_connect( $db_host, $db_user, $db_password ); 160mysql_select_db( $db_name ); 161$result = mysql_query( 'set character set utf8' ); 162 163$sql = "select email1 from users where email1 = '" . mysql_real_escape_string( $_POST['email1'] ) . "'"; 164$result = mysql_query( $sql ); 165 166if ( mysql_num_rows( $result ) > 0 ) $error .= 'このメールアドレスはすでに登録されています<br>'; 167 168// 169if ( $error != '' ) exit; 170 171// 会員データの挿入 172$sql = "insert into users ( 173 login_id, 174 passwd, 175 register_date, 176 name_kanji, 177 name_kana, 178 sex, 179 birthday, 180 email1, 181 postal_code, 182 pref, 183 address1, 184 address2, 185 state 186) values ( 187 '" . mysql_real_escape_string( $_POST['email1'] ) . "', 188 '" . md5( $_POST['passwd'] ) . "', 189 '" . date( 'Y-m-d H:i:s' ) . "', 190 '" . mysql_real_escape_string( $_POST['name_kanji'] ) . "', 191 '" . mysql_real_escape_string( $_POST['name_kana'] ) . "', 192 '" . mysql_real_escape_string( $_POST['sex'] ) . "', 193 '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', 194 '" . mysql_real_escape_string( $_POST['email1'] ) . "', 195 '" . mysql_real_escape_string( $_POST['postal1'] . $_POST['postal2'] ) . "', 196 '" . mysql_real_escape_string( $_POST['pref'] ) . "', 197 '" . mysql_real_escape_string( $_POST['address1'] ) . "', 198 '" . mysql_real_escape_string( $_POST['address2'] ) . "', 199 '1' 200)"; 201 202$result = mysql_query( $sql ); 203//echo $sql; 204 205// 206$subject = "$site_name 登録確認メール"; 207$headers = "From: $support_mail\r\n"; 208$parameters = '-f' . $support_mail; 209 210$md5 = md5( $magic_code . $_POST['email1'] ); 211 212// 213$body = <<< _EOT_ 214${_POST['name_kanji']}215 216この度は $site_name へのご登録ありがとうございます。 217メールアドレス確認のために、下記のURLをクリックしてください。 218 219$site_url/register4.php?email1=${_POST['email1']}&md5=$md5 220 221登録メールアドレス:${_POST['email1']} 222ログインID${_POST['email1']} 223 224何かございましたら $support_mail まで 225お問い合わせいただけますよう、よろしくお願いします。 226---------------- 227$site_name 228$site_url 229_EOT_; 230 231mb_language( 'ja' ); 232mb_internal_encoding("utf-8") ; 233mb_send_mail( $_POST['email1'], $subject, $body, $headers ); 234---この関数が動かない--- 235// 236$title = '会員登録[3/4]'; 237 238 239?> 240<? require( 'header.php' ) ?> 241<div align="center"> 242<h1><?= $site_name ?> 会員登録[3/4]</h1> 243<div align="center"> 244登録メールアドレス宛に確認メールを送信しました。<br> 245メール本文中のURLをクリックし、会員情報を有効にしてください。<br> 246<br> 247※1時間以内に届かない場合、メールアドレスの記入が間違っていたか、<br> 248迷惑メールとして処理されている可能性があります。 249</div> 250<? require( 'footer.php' ) ?>

イメージ説明

register1.phpはフォームです。(文字数関係で入りませんでした)
きたなくてすいません。
PHP Version 5.4.16
mysql Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1
php-mysql php php-gd php-mbstringははいっています。
wordpressは動いています。
他に必要な情報があればのせますのでよろしくお願いします

下のことは実行しました
http://www.crystalsnowman.com/?p=49

http://kajuhome.com/postfix.shtml

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

すでにご存じかもしれないですが以下のサイトがわかり易くていろいろ調べられます。先人に感謝ですね。

http://centossrv.com/

メール周りの設定は以下に記載しています。
http://www.aconus.com/~oyaji/mail2/postfix.htm

構築が甘いとスパムの踏み台やほかのサーバへの攻撃に使われたり、よそ様の迷惑になるの上記サイト等を参考に、きちんとセキュリティ回りの設定を忘れずに実施してくださいませ。

postfixに関しては公式サイトの日本語訳のページも読んでみると良いと思います
http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html

サーバといえどもソフトの集まりなのでソフトの公式サイトの情報がかなり重要な情報源ですね。

投稿2015/12/29 21:30

ushibondi

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

いろいろ調べてみたんですが、だめでした。

メールが届きません。

何を調べ、現状どうなっているのかという詳しい情報がないとコメントのしようがありません。

  1. サーバーはどこのもの、どのプランを利用していますか?
  2. VPSを利用している場合、SENDMAIL, POSTFIXなどの設定は済んでいますか?
  3. コマンドラインからのメール送信コマンドは利用できますか?

posifxの設定をしたのですが、うまく

いきませんでした

サーバは自宅で

どう考えても、基礎力不足です。自宅サーバーとは言っても、ディストリビューションを書いていないし、提示すべき情報をあげていないことを見ると…

「うまくいかない」では何の情報もないのと同じ。

現状では、おとなしくレンザバを契約するのがいいと思います。


独自ドメインを利用しているわけでもないなら、postfix をインストールするだけで設定なんていらないはずです。

送信するだけなら iptable の設定も不要です。


提示のコードを拝見しましたが…

このコードで、どうやって判断したんでしょうか?
mb_send_mail の実行そのものが失敗するのか、mb_send_mailは実行されたけど、メールの受信ができなかったのかをどう判断しましたか?

投稿2015/12/29 17:58

編集2015/12/30 09:13
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gik

2015/12/30 10:26 編集

すいません。判断してません。 ためしてみます。
退会済みユーザー

退会済みユーザー

2015/12/30 13:04

試すというか、調査してください。
gik

2015/12/30 13:58

調査します
gik

2015/12/30 16:44

<?php mb_language("ja"); mb_internal_encoding("utf-8"); $to="xxxxx@520328.jp"; $subject="お問い合わせ"; $msg="メッセージが入ります。"; $from = $_POST['fromMail']; $header="From: {$from}\nReply-To: {$from}\nContent-Type: text/plain;"; if(mb_send_mail($to,$subject,$msg,$header)){ echo "メールが送信されました。"; } else { echo "メールが送信できませんでした。"; } ?> で調べたところメールは送信されましたとでました
gik

2016/01/22 18:47

posifxの設定を一度削除して再度設定しなおしたら送れるようになりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問