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

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

ただいまの
回答率

89.13%

mb_send_mail関数について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,665

gik

score 148

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

// register2.php
require( 'config.php' );
require( 'pref_tbl.php' );
// 入力項目のチェック
if ( $_POST['email1'] == '' ) $error .= 'メールアドレスが入力されていません<br>';
if ( strlen( $_POST['email1'] ) > 64 ) $error .= 'メールアドレスが64文字以上です<br>';
if ( ereg( '[^!-~]', $_POST['email1'] ) ) $error .= 'メールアドレスに使えない文字が含まれています<br>';

if ( $_POST['passwd'] == '' ) $error .= 'パスワードが入力されていません<br>';
if ( strlen( $_POST['passwd'] ) > 16 ) $error .= 'パスワードが16文字以上です<br>';
if ( ereg( '[^!-~]', $_POST['passwd'] ) ) $error .= 'パスワードに使えない文字が含まれています<br>';

if ( $_POST['name_kanji'] == '' ) $error .= '姓名(漢字)が入力されていません<br>';
if ( strlen( $_POST['name_kanji'] ) > 32 ) $error .= '姓名(漢字)が32文字以上です<br>';

if ( $_POST['name_kana'] == '' ) $error .= '姓名(かな)が入力されていません<br>';
if ( strlen( $_POST['name_kana'] ) > 32 ) $error .= '姓名(かな)が32文字以上です<br>';

if ( $_POST['sex'] == '' ) $error .= '性別が入力されていません<br>';
if ( $_POST['year'] == '' ) $error .= '生年月日が入力されていません<br>';
if ( $_POST['month'] == '' ) $error .= '生年月日が入力されていません<br>';
if ( $_POST['day'] == '' ) $error .= '生年月日が入力されていません<br>';

if ( $_POST['postal1'] == '' ) $error .= '郵便番号が入力されていません<br>';
if ( $_POST['pref'] == '0' ) $error .= '都道府県が選択されていません<br>';
if ( $_POST['address1'] == '' ) $error .= '住所1が入力されていません<br>';

// 接続
$link = mysql_connect( $db_host, $db_user, $db_password );
mysql_select_db( $db_name );
$result = mysql_query( 'set character set utf8' );

$sql = "select email1 from users where email1 = '" . mysql_real_escape_string( $_POST['email1'] ) . "'";
$result = mysql_query( $sql );
if ( mysql_num_rows( $result ) > 0 ) $error .= 'このメールアドレスはすでに登録されています<br>';

// エラー画面
if ( $error != '' ) {
    $title = $site_name . ' 会員登録[エラー]';
?>
<? require( 'header.php' ) ?>
<div align="center">
<h1><?= $site_name ?> 会員登録[エラー]</h1>
<?= $error ?>
<br>
ブラウザのバックボタンで戻り、入力を確認してください。<br>
<br>
<? require( 'footer.php' ) ?>
<?
    exit;
}

//
$title = '会員登録[1/4]';
?>
<? require( 'header.php' ) ?>
<div align="center">
<h1><?= $site_name ?> 会員登録[2/4]</h1>
<table>
<form action="register3.php" method="post">
<input type="hidden" name="email1" value="<?= $_POST['email1'] ?>">
<input type="hidden" name="passwd" value="<?= $_POST['passwd'] ?>">
<input type="hidden" name="name_kanji" value="<?= $_POST['name_kanji'] ?>">
<input type="hidden" name="name_kana" value="<?= $_POST['name_kana'] ?>">
<input type="hidden" name="sex" value="<?= $_POST['sex'] ?>">
<input type="hidden" name="year" value="<?= $_POST['year'] ?>">
<input type="hidden" name="month" value="<?= $_POST['month'] ?>">
<input type="hidden" name="day" value="<?= $_POST['day'] ?>">
<input type="hidden" name="postal1" value="<?= $_POST['postal1'] ?>">
<input type="hidden" name="postal2" value="<?= $_POST['postal2'] ?>">
<input type="hidden" name="pref" value="<?= $_POST['pref'] ?>">
<input type="hidden" name="address1" value="<?= $_POST['address1'] ?>">
<input type="hidden" name="address2" value="<?= $_POST['address2'] ?>">
<tr>
    <td>メールアドレス</td>
    <td><?= $_POST['email1'] ?></td>
</tr>
<tr>
    <td>パスワード</td>
    <td>********</td>
</tr>
<tr>
    <td>姓名(漢字)</td>
    <td><?= $_POST['name_kanji'] ?></td>
<tr>
<tr>
    <td>姓名(かな)</td>
    <td><?= $_POST['name_kana'] ?></td>
<tr>
<tr>
    <td>性別</td>
    <td>
<? if ( $_POST['sex'] == '1' ) echo '男性'; else echo '女性' ?>
    </td>
<tr>
<tr>
    <td>生年月日</td>
    <td>
        <?= $_POST['year'] ?><?= $_POST['month'] ?><?= $_POST['day'] ?>日<br>
    </td>
<tr>
<tr>
    <td>郵便番号</td>
    <td>
        <?= $_POST['postal1'] ?>-<?= $_POST['postal2'] ?>
    </td>
<tr>
<tr>
    <td>都道府県</td>
    <td>
<?= $pref_tbl[$_POST['pref']] ?>
    </td>
<tr>
<tr>
    <td>住所1</td>
    <td><?= $_POST['address1'] ?></td>
<tr>
<tr>
    <td>住所2</td>
    <td><?= $_POST['address2'] ?></td>
<tr>
<tr>
    <td></td>
    <td><input type="submit" value="- 利用規約に同意して、登録します -"></td>
</tr>
</form>
</table>
</div>
<? require( 'footer.php' ) ?>

<?
// register3.php
require( 'config.php' );
// 入力項目のチェック
if ( $_POST['email1'] == '' ) $error .= 'メールアドレスが入力されていません<br>';
if ( strlen( $_POST['email1'] ) > 64 ) $error .= 'メールアドレスが64文字以上です<br>';
if ( ereg( '[^!-~]', $_POST['email1'] ) ) $error .= 'メールアドレスに使えない文字が含まれています<br>';
if ( $_POST['passwd'] == '' ) $error .= 'パスワードが入力されていません<br>';
if ( strlen( $_POST['passwd'] ) > 16 ) $error .= 'パスワードが16文字以上です<br>';
if ( ereg( '[^!-~]', $_POST['passwd'] ) ) $error .= 'パスワードに使えない文字が含まれています<br>';

if ( $_POST['name_kanji'] == '' ) $error .= '姓名(漢字)が入力されていません<br>';
if ( strlen( $_POST['name_kanji'] ) > 32 ) $error .= '姓名(漢字)が32文字以上です<br>';

if ( $_POST['name_kana'] == '' ) $error .= '姓名(かな)が入力されていません<br>';
if ( strlen( $_POST['name_kana'] ) > 32 ) $error .= '姓名(かな)が32文字以上です<br>';

if ( $_POST['sex'] == '' ) $error .= '性別が入力されていません<br>';
if ( $_POST['year'] == '' ) $error .= '生年月日が入力されていません<br>';
if ( $_POST['month'] == '' ) $error .= '生年月日が入力されていません<br>';
if ( $_POST['day'] == '' ) $error .= '生年月日が入力されていません<br>';

if ( $_POST['postal1'] == '' ) $error .= '郵便番号が入力されていません<br>';
if ( $_POST['pref'] == '0' ) $error .= '都道府県が選択されていません<br>';
if ( $_POST['address1'] == '' ) $error .= '住所1が入力されていません<br>';

// 接続
$link = mysql_connect( $db_host, $db_user, $db_password );
mysql_select_db( $db_name );
$result = mysql_query( 'set character set utf8' );

$sql = "select email1 from users where email1 = '" . mysql_real_escape_string( $_POST['email1'] ) . "'";
$result = mysql_query( $sql );

if ( mysql_num_rows( $result ) > 0 ) $error .= 'このメールアドレスはすでに登録されています<br>';

//
if ( $error != '' ) exit;

// 会員データの挿入
$sql = "insert into users (
    login_id,
    passwd,
    register_date,
    name_kanji,
    name_kana,
    sex,
    birthday,
    email1,
    postal_code,
    pref,
    address1,
    address2,
    state
) values (
    '" . mysql_real_escape_string( $_POST['email1'] ) . "',
    '" . md5( $_POST['passwd'] ) . "',
    '" . date( 'Y-m-d H:i:s' ) . "',
    '" . mysql_real_escape_string( $_POST['name_kanji'] ) . "',
    '" . mysql_real_escape_string( $_POST['name_kana'] ) . "',
    '" . mysql_real_escape_string( $_POST['sex'] ) . "',
    '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "',
    '" . mysql_real_escape_string( $_POST['email1'] ) . "',
    '" . mysql_real_escape_string( $_POST['postal1'] .  $_POST['postal2'] ) . "',
    '" . mysql_real_escape_string( $_POST['pref'] ) . "',
    '" . mysql_real_escape_string( $_POST['address1'] ) . "',
    '" . mysql_real_escape_string( $_POST['address2'] ) . "',
    '1'
)";

$result = mysql_query( $sql );
//echo $sql;

//
$subject = "$site_name 登録確認メール";
$headers = "From: $support_mail\r\n";
$parameters = '-f' . $support_mail;

$md5 = md5( $magic_code . $_POST['email1'] );

//
$body = <<< _EOT_
${_POST['name_kanji']} 様

この度は $site_name へのご登録ありがとうございます。
メールアドレス確認のために、下記のURLをクリックしてください。

$site_url/register4.php?email1=${_POST['email1']}&md5=$md5

登録メールアドレス:${_POST['email1']}
ログインID:${_POST['email1']}

何かございましたら $support_mail まで
お問い合わせいただけますよう、よろしくお願いします。
----------------
$site_name
$site_url
_EOT_;

mb_language( 'ja' );
mb_internal_encoding("utf-8") ;
mb_send_mail( $_POST['email1'], $subject, $body, $headers );
---この関数が動かない---
//
$title = '会員登録[3/4]';


?>
<? require( 'header.php' ) ?>
<div align="center">
<h1><?= $site_name ?> 会員登録[3/4]</h1>
<div align="center">
登録メールアドレス宛に確認メールを送信しました。<br>
メール本文中のURLをクリックし、会員情報を有効にしてください。<br>
<br>
※1時間以内に届かない場合、メールアドレスの記入が間違っていたか、<br>
迷惑メールとして処理されている可能性があります。
</div>
<? 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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

いろいろ調べてみたんですが、だめでした。
メールが届きません。 

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

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

posifxの設定をしたのですが、うまく
いきませんでした

サーバは自宅で

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

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

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


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

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


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/31 01: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 "メールが送信できませんでした。";
    }
    ?>
    で調べたところメールは送信されましたとでました

    キャンセル

  • 2015/12/31 02:10 編集

    じゃあ、あとは送信のpostfixログを調べればいいですね。

    http://paqalex.blog133.fc2.com/blog-entry-27.html
    http://blog.s-giken.net/235.html

    キャンセル

  • 2016/01/23 03:47

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

    キャンセル

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る