PHP超初心者です。
参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。
Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11
エラー:送信に失敗しました
参考本に書いてあるとおり、
php.iniのSMTP=localhost を自分が使っている[email protected]に書き換え、sendmailには自分の別アドレスを記述したのですが。
11行目のエラーも何を指しているのかわかりません。
ご回答よろしくお願いします。
【mail.php】
<html>
<head><title>mail.php</title></head>
<body>
<?php
$address=$_POST['address'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$header="Content-Type:text/plain;charset=iso-2022-jp";
mb_language("Japanese");
if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){
print("送信完了しました。");
}else{
print("エラー:送信に失敗しました");
}
?>
</body>
</html>
【mail_form.html】
<html>
<head><title>メールの送信</title></head>
<body>
<h2>メールの送信</h2>
<form action="mail.php" method="post">
宛先:<input type="text" name="address"><br />
件名:<input type="text" name="subject"><br />
本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br />
<input type="submit" value="送信">
</form>
</body>
</html>
No.5ベストアンサー
- 回答日時:
まだFromのところでつまづいてるみたいです。
下記の3点をチェックしてダメだったらお手上げかも。
1. php.iniはどこにおいてますか?
Windows上でphpを動かす場合、php.iniはC:\Windows以下になければphp.iniが有効にならない場合があります。
試しに、下記のようなファイルをどこかに作成してみてください。
<?php phpinfo(); ?>
この状態で、
php.iniの適当な設定を変更
→Apache再起動
→上記のファイルにアクセス(phpの設定情報が表示されます)
→php.iniの変更内容が反映されているか確認
この手順で、きちんと変更内容が反映されているか確認してみてください。
また、その際に「SMTP」と「send_mail_form」が設定されているかも確認しておくとよいです。
2. SMTPとsend_mail_fromの再確認
前項でも触れましたが
「php.iniで意図した内容に設定されているか。タイプミス等ないか」
「phpinfo()で確認した内容が、上記の設定と相違ないか」
もし、設定内容がphp.iniと異なる場合はphp.iniを設置するディレクトリをC:\Windows以下等にしてみてください。
3. $header変数にFrom行を加える
最悪、send_mail_fromが設定されていない場合でもSMTPサーバーが起動していれば
標準の設定でメールが送信されるはずです。
最初に提示して頂いたソースのうち、ヘッダ($header)を定義している部分を
昨日説明したように、下記の通り編集してみてください。
$header="Content-Type:text/plain;charset=iso-2022-jp";
↓
$header = "Content-Type: text/plain; charset=iso-2022-jp\n";
$header .= "From: [email protected]";
「[email protected]」はあなたの自分のメールアドレスに変更してくださいね。
これをするだけで、少なくとも「Warning: mb_send_mail (略) on line 11」というエラーは発生しなくなるはずです。
phpinfo(こんなのあるんですね)から見ると、sendmail_fromのところがno valueになっていました。
設定されていないってことですよね?
SMTPは127.0.0.1に設定されていました。
で、一応$headerのところをご指摘どおり変更したらメール送信できました。
$headerにfromを加える の意味がわかりました。
念のため、php.iniの修正は以下のとおり行っています。
[mail function]
; For Win32 only.
SMTP = 127.0.0.1
smtp_port = 25
; For Win32 only.
;sendmail_from = [email protected]
No.6
- 回答日時:
> ; For Win32 only.
> SMTP = 127.0.0.1
> smtp_port = 25
>
> ; For Win32 only.
> ;sendmail_from = [email protected]
1.localhostがメールサーバの役割を担っていないのなら、SMTPの設定は
プロバイダから割り振られているSMTPサーバ名を指定する事。
semdmail_fromの先頭の「;」を削除する事。
2.Webサーバを再起動する。
3.プログラム上のメールヘッダ($header)って、fromがないとエラーになるんじゃありませんでしたっけ。
mb_send_mail()からの引用
> mb_send_mail() は、 mail() のラッパ関数です。詳細は、 mail() を参
> 照ください。
mail()からの引用
> メールを送信する際には、必ず From ヘッダが含まれていなければなり
> ません。 additional_headers パラメータで指定するか、 あるいは
> php.ini にデフォルト値を指定します。
>
> 指定しなかった場合は、以下のようなエラーメッセージが返ります
> Warning: mail(): "sendmail_from" not set in php.ini or custom
> "From:" header missing 。 Windows では、From ヘッダを設定すると
> Return-Path も設定されます。
ご回答ありがとうございます。
あ~コレが原因かもです。
sendmail_fromの前の「;」をとってみたら、プロバイダから割り振られているSMTPサーバ名でも送信できました。
ありがとうございます。
とても勉強になりました。
No.3
- 回答日時:
・SMTPサーバー(今回はMELON)は起動してから試してますか?
・php.iniを書き換えた後、HTTPサーバー(An HTTPdでしょうか)を再起動していますか?
・「できない」とはどんな状況でしょうか?
→ エラーで送信できない、エラーは起きないがメールが届かない等
→ 英文のエラーが出る場合はその内容をここに書いてもらえるとアドバイスしやすいです
今日はもう寝るのでこの辺で……
明日、まだ閉じていなかったらチェックするつもりです。
がんばって~
あ・・
先に寝ちゃいましたね・・・
聞いておいて、すいません・・・・
で、今やっているのですが、
MELONは起動しています。下のツールバーに表示されています。
HTTPサーバはApacheです。再起動させています。
http://localhost/php10/mail_form.html(←ファイルを格納している場所です)からメールの送信ページに入り、入力→送信すると、以下のエラーが出ます。
Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11
エラー:送信に失敗しました
もちろん、何も送られてこない状況です。
たびたび申し訳ありません。
No.2
- 回答日時:
#1です。
どのように設定したのでしょうか?リンク先は「Windows上でmb_send_mailを試す最低限の手順」を説明しています。
是非ご覧になってください。
ここで説明しても同じ内容になってしまうだけですので……。
ちなみに、SMTPを外部サーバーにするのも確かに手ではありますが
そういった外部からのメール送信を受け付けているメールサーバーは今時あまりありません。
セキュリティ的に問題となってしまうので・・(SPAM発信源にされてしまう
あと、$headerにFrom行がないというのは「sendmail_fromを設定しない場合」に必要な処理がありませんよ、という意味です。
その場合
$header="Content-Type:text/plain;charset=iso-2022-jp";
を
$header = "Content-Type: text/plain; charset=iso-2022-jp\n";
$header .= "From: あなたのメールアドレス";
の様に書き換えることで、send_mail_from以外のアドレスを差出人として設定可能、ということです。
それじゃあ、がんばってください。
たびたびご回答ありがとうございます。
リンクにしたがってやってみました。
php.ini の、”SMTP”と”smtp_port”を下記のように設定します。
[mail function]
; For Win32 only.
SMTP = 127.0.0.1
smtp_port = 25
melon.ini(MELONの設定ファイル)の設定も php.ini と同じにします。
[ssmtpd]
ListenIP=127.0.0.1
ListenPort=25
ですが、できませんね・・・う~ん
初心者なのでもっと基本的な部分が間違ってるかもしれないですね・・
No.1
- 回答日時:
・差出人のデフォルト設定(php.iniのsendmail_from)が設定されていない
・その上で$headerにFrom行が含まれていない
ことによるエラーです。
> 参考本に書いてあるとおり、
> php.iniのSMTP=localhost を自分が使っている[email protected]に書き換え、sendmailには自分の別アドレスを記述したのですが。
どの本を読んでいるのかわかりませんが、随分いい加減な内容です。
SMTPという設定は「SMTPサーバーのホスト名またはIP」を設定する部分で
メールアドレスは逆に先ほどのsendmail_fromに設定するべき内容です。
[email protected]
Windows上で試している場合、何もせずにSMTP=localhostのままでは動かないのも事実です。その場合は
・外部のSMTPサーバーを指定する
→SMTP=xxx.ne.jpのように外部のサーバーのアドレスを設定する
・Windows上にSMTPサーバーを構築する
→SMTP=localhostのままでOK
のどちらかを選択することになります。
参考までに、Windows上でSMTPサーバーを構築し、PHPからメールを送信する方法が下記のURLにあります。
http://readygo.s8.xrea.com/php/php_ls01.php
ご回答ありがとうございます。
大変申しわけありません。自分の記述ミスです。
で、おっしゃるように設定したのですが、ダメです。
あとエラーメッセージの「$headerにFrom行が含まれていない」というのはどこをさしているのかいまいちわかりません。
ちなみにリンク先はまだ試していません。
いったん普通にできてからためそうかと・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php ログイン 1 2022/11/01 00:24
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
さくらサーバーにて、phpからメ...
-
Received-SPFでレンタルサーバ...
-
ローカル環境でのメール送信
-
PHPからのメールがこない
-
ワードプレス 予約システム
-
複数行の文字列をメールのヘッ...
-
.phpと.incファイルの違いはな...
-
Subversionのリポジトリの削除
-
phpでうまく画像がダウンロード...
-
PHPでネットワークドライブのop...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
makefile でファイルをコピーす...
-
VB.NETのFTPダウンロードについて
-
VBでクラウドストレージにア...
-
fopenでファイルが開かない場合...
-
VBAでJPGサイズ変更
-
透過PNGが透過されない!!
-
リンク先を隠す方法はないでし...
-
onedrive にexcelファイルをア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
さくらサーバーにて、phpからメ...
-
PHPsendmailにて送信元を変更
-
PHPMailerのコードエラーが解決...
-
phpでメール送信できません 原...
-
ローカル環境でのメール送信
-
mail関数を使った場合のReturn-...
-
mb_send_mail の出力をファイル...
-
PHPからロリポップ!のメールサ...
-
mb_send_mailでタイトルにハテ...
-
mb_send_mailを実行するとエラ...
-
PHPからのメールがこない
-
メールフォームのタイトルが文...
-
mail関数に送信について
-
PHPで、複数のアドレスにメール...
-
mb_sendmailで送信できない
-
sendmailでエラーがでます
-
コマンドプロンプト、VBSでの添...
-
PHP、PEARでのメール送信での送...
-
phpでのメール送信
-
phpでショッピングカート
おすすめ情報