こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

(PHP初学者) mb_send_mail

フォームに入力された内容をローカル環境(Xampp)から
フリーメールアドレスに送信をする課題を勉強をしています。

入力側ファイル
----------------------------------------------
<html>
<body>
<form action="mail.php" method="post">
名前</th><td><input type="text" name="name"><br>
メール</th><td><input type="text" name="mail"><br>
メッセージ</th><td><textarea name="messe"></textarea><br>
<input type="submit" value="確認する" name="submit">
</body>
</html>
----------------------------------------------

送信ファイル(mail.php)
----------------------------------------------
<?php
error_reporting(1);

$name = $_POST["names"];
$mail = $_POST["email"];
$messe = $_POST["messe"];

mb_language("ja");
mb_internal_encoding("euc-jp");

$naiyou = $names."<br/>".$mail."<br />".$messe;

$result = mb_send_mail("○○○@yahoo.co.jp","メール送信テスト",$naiyou);
//受信するフリーメールアドレス

if($result){echo "成功"; }else{echo "失敗";}
?>
----------------------------------------------

このサンプルと別のサンプルで試して
どちらも結果は「成功」と表示されるのですが
実際にはフリーメール側でのメールの受信はできません。
(ホットメールとヤフーメールで試しています。)

PHP学習サイトで「php.ini」の設定を変えなければならないということで
以下の部分のセミコロンをはずし変更してみました。

[mail function]

SMTP = ○○○(ここには契約プロバイダのsmtpサーバを記入)
smtp_port = 25
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

多くのPHPを勉強している方がここでつまずいているようで
色々調べてみたのですが
上手くいかない原因はそれぞれ異なるようで
上手くいく手がかりが見つかっていません。

難しいことはまだ理解できないため
できるだけ難しい関数や処理などは使わない方法で
解決できる手段があれば
ご教授よろしくお願いいたします。

投稿日時 - 2014-03-16 23:48:00

QNo.8516889

暇なときに回答ください

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>[mail function]
>
>SMTP = ○○○(ここには契約プロバイダのsmtpサーバを記入)
>smtp_port = 25
>sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

SMTP(+smyp_port)とsendmail_pathはどちらか片方だけ指定してください(不要な方はコメントアウトする)。

プロバイダのSMTPを使う場合には、プロバイダのSMTPがメールヘッダのFromをチェックしていないかを確認してください。プロバイダのネットワーク内からのメールなのに何故かチェックして弾くプロバイダが存在しています。また追加ヘッダ(mb_send_mailの第4引数)でFromを書いていないので、受け取り側で弾かれる可能性も高いです。

なお、php.iniではPOP before SMTPやSMTP認証の設定は出来ませんから、それが必要なケースではSMTP(+smtp_port)は使えません。

sendmail_pathでsendmail.exewを使う場合には、sendmail.iniで細かい設定をしないといけません。こちらはSMTP認証の設定なども書けるようになっています。



ローカル環境からのメール送信は案外に面倒です。単にデバッグだけの問題であれば、ローカル環境ではログ出力だけしておいて(ログファイルで動作のチェックをしておいて)、メールの送信自体は本番環境でチェックした方がいいと思います(逆にローカル環境で上手く出来ても本番環境で動かないと意味がありませんしね)。



(蛇足)
>$naiyou = $names."<br/>".$mail."<br />".$messe;

メール本文の改行は<br>ではありません(htmlではありませんので)。CRLF("\r\n")を使ってください。

投稿日時 - 2014-03-17 03:08:13

お礼

やはり上手くいかないのですが
ローカル環境からのメール送信は面倒ということで
一旦あきらめようと思います。
アドバイスありがとうございました。

投稿日時 - 2014-03-17 10:08:02

ANo.1

additional_parameterを設定していないのが原因では?以下が参考になると思います。

PHPのmb_send_mail()を使った時にgmailだけメールが届かない
(多重エスケープで化けてる文字は気にしないでください)
http://www.web4life.jp/archives/108

但し、ソースコードを「UTF-8」で記述し、日本語メールで一般的に用いられている「ISO-2022-JP」に変換して送信するには、mb_send_mailではなくmailを使って自前で組み立てたほうが融通が利きます。

PHPでJIS以外の文字を文字化けせずに日本語メールを送る方法
http://tech.aainc.co.jp/archives/3570

以下が実装例です。

[PHP] 多重送信も防止したメールフォームサンプル
http://bloggdgd.blog28.fc2.com/blog-entry-292.html

投稿日時 - 2014-03-17 00:05:17

お礼

いつもありがとうございます。

よく分からないながらも
色々設定を変えてみて試しているのですが
上手くいきません。

mb_send_mailの関数自体はシンプルなので
メールくらい簡単に送信できると思ったのですが
そんなにあまくありませんでした。

一旦別の課題に移ろうと思います。

とにかくありがとうございました。

投稿日時 - 2014-03-17 10:19:49

あなたにオススメの質問