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

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

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

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

4回答

666閲覧

PHPでメールフォームを作成したい

uzr1709

総合スコア34

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2019/01/16 08:36

編集2019/01/16 23:32

PHPでメールフォームを作成したいです。
後学の為にもメールフォームサービスの利用は考えておりません。

こちらのサイトを参考に
ひとまず、メールを送信する仕組みを作ろうとしています。
https://web-camp.io/magazine/archives/5181

以下、URLを参考に作成したhtmlコードになります。
受け取りメールはgmailで、下記コードでは「送信先」「送信元」と入れていますが、動作確認コードでは正規のメールアドレスを入れています。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <title></title> 7 8 <link href="css/set.css" rel="stylesheet" type="text/css"> 9</head> 10<body> 11 <main> 12 <?php 13 mb_language("Japanese"); 14 mb_internal_encoding("UTF-8"); 15 if (mb_send_mail("送信先@gmail.com", "テストメール", "これはテストです。", "From:送信元@gmail.com")) 16 { 17 echo "メールが送信されました。"; 18 } else { 19 echo "メールの送信に失敗しました。"; 20 } 21 ?> 22 </main> 23</body> 24</html>

結果は「メールの送信に失敗しました。」と表示されます。

環境はwindows OS、xammp v3.2.2を使用しております。
xammp/php/php.iniは以下のように編集済みです。
[mail function]
修正前 smtp_port=25
修正後 smtp_port=587

修正前 sendmail_path =
修正後 sendmail_path = ""C:\xampp\sendmail\sendmail.exe" -t"

xammp/sendmail/sendmail.ini
修正前 smtp_port=25
修正後 smtp_port=587

修正前
auth_username=
auth_password=
修正後
auth_username=送信先@gmail.com
auth_password=送信先gmailへのログインパス

またwebサーバーはロリポップを使用しております。
PHPは使用出来るプランですが、ローカル環境と同じエラー表示になります。

設定に不十分な点がありましたらご指摘お願いいたします。

追記
mb_send_mailを使用してのフォーム作成は止め、アドバイスを頂いた「PEAR::Mail」や「PHPMailer」での実装を検討していますが、
PEARのインストールがうまく行かなかったり、参考にするものが少なかったりと現状躓いております。
取り急ぎフォームサービスでの実装を検討していますが、
後学の為、参考になるサイトなどありましたら教えて頂けますと幸いです。
引き続きどうぞ宜しくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

PHP標準のmail系関数はyambejpさんが仰るように、ちゃんと動いてくれないことが多いです。

私は自分のホームページを作る時に同じところで躓いたので、手順を載せようと思います。
最初に言っておきますが、私の場合Linux系OS(Lubuntu)で動かしていますので、Windowsで動くという保証はできません。

m6uさんも仰っていますが、安全性の低いアプリからのアカウントへのアクセスを許可しなければ送信できません。
訂正です。
https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2
上記URLの手順を踏めば安全性の低いアプリからのアカウントへのアクセスを許可しなくても
メールを送信できるようです。

尚、Googleアカウントの二段階認証が有効になっている場合はアカウントのパスワードではなくアプリパスワードを作成してそれを指定してやる必要があります。
参考URL: https://www.ajaxtower.jp/googleaccount/2step-verify/index6.html

このURLを参考にしてアプリのパスワードを作ってみて下さい。

前提:PHPMailerを使います。

1: https://github.com/PHPMailer/PHPMailer
上記のURLからPHPMailerをダウンロードして質問にあるHTMLファイルと同じディレクトリに解凍してください。
2:下記のソースコードを入力(コピー)してください。

PHP

1use PHPMailer\PHPMailer\PHPMailer; 2use PHPMailer\PHPMailer\Exception; 3require "PHPMailer-master/src/PHPMailer.php"; 4require "PHPMailer-master/src/SMTP.php"; 5require "PHPMailer-master/src/POP3.php"; 6require "PHPMailer-master/src/Exception.php"; 7require "PHPMailer-master/src/OAuth.php"; 8require "PHPMailer-master/language/phpmailer.lang-ja.php"; 9 10mb_language("japanese"); 11mb_internal_encoding("UTF-8"); 12 13$user = "アプリのパスワードを作成したメールアドレス"; 14 15$mailer = new PHPMailer(); 16$mailer->IsSMTP(); 17$mailer->Host = "smtp.gmail.com"; 18$mailer->CharSet = "utf-8"; 19$mailer->Username = $user; 20$mailer->Password = "アプリのパスワード"; 21$mailer->SMTPSecure = "ssl"; 22$mailer->Port = 465; 23//デバッグしてログを出力させたい場合は下記一行をコメントアウトしてください。 24//$mailer->SMTPDebug = 2; 25$mailer->SMTPAuth = true; 26$mailer->From = $user; 27$mailer->SetFrom($user); 28$mailer->FromName = mb_convert_encoding($user, "UTF-8", "AUTO"); 29$mailer->Subject = mb_convert_encoding("件名(Subject)", "UTF-8", "AUTO"); 30$mailer->Body = mb_convert_encoding("本体(body)", "UTF-8", "AUTO"); 31$mailer->AddAddress("送信先アドレス"); 32if($mailer->Send()) //メールが送信できたら 33{ 34 echo "送信成功!"; 35}else 36{ 37 echo "エラー発生"; 38} 39?>

これで私の場合はメールを送信できました。
私も勉強中の身なので、至らぬ所があるかと思いますが、その際は連絡下さい。
分かる範囲で回答します。
長文失礼しました。

投稿2019/01/18 01:34

編集2019/01/24 04:14
Nrkw38

総合スコア37

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

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

uzr1709

2019/01/24 02:11

コードありがとうございます。 参考にさせて頂いたのですがPHPMailerのバージョン等によりうまくいきませんでした。 別の方法で動作しましたので解決とさせて頂きますが、 コードまで教えてくださり有難う御座いました。大変参考になりました。
退会済みユーザー

退会済みユーザー

2019/01/24 02:18

PHPMailer を使うんだったら、安全性の低いアプリからのアカウントへのアクセスの許可は必要ないです。 詳しくは、PHPMailer の Wiki に記載があります。
Nrkw38

2019/01/24 04:15

ご指摘ありがとうございます。 回答を修正しておきました。
guest

0

PHPで用意されているmail系の関数は使いものにならないのでやめた方がいいでしょう。
とくにOSがwinの場合メールサーバーは別のsmtpを利用するのが前提です。
公式マニュアルにあるようにPEAR::Mailなどをご利用になることを検討ください。

またWEB上から任意のメールアドレスに送れるような仕組みを
公開するのはスパムの温床になるのでやめましょう

投稿2019/01/16 08:49

編集2019/01/16 08:49
yambejp

総合スコア114829

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

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

uzr1709

2019/01/16 09:13

コメントありがとうございます。 「PEAR::Mail」は初耳でしたのでこちらで調べてみたいと思います。 ざっくり調べた限りですが、以下のURLを参考にしています。 http://www.de2p.co.jp/tech/php/send-mail-by-pear/ コード上にメールアドレスだけでなく、smtpサーバへのアカウント情報も記載するようなのですが 安全とは思えないのと、 こちらもメールアドレスを公開している同じ結果になると思うのですが如何でしょうか?
guest

0

安全性の低いアプリからのアカウントへのアクセスを許可する - Google アカウント ヘルプ
これを読んで対策しないと送信できないよ。
設定しても即時反映されず数日かかるとの話もあるし。
すぐに試したいなら、
Gmailじゃない一般のプロバイダーのメールアドレスや、
レンタルサーバーのメールアドレスを使ったらいいよ。

投稿2019/01/16 08:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uzr1709

2019/01/16 09:06

コメントありがとうございます。 確かにgmailですとテスト時にも時間がかかっているように感じましたのでレンタルサーバーのメールアドレスを使う方法で考えてみたいと思います。 レンタルサーバーのアドレスを使う場合でも、gmailの使用を想定していた時とPHPの記述に差は無いのでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/16 09:20

レンタルサーバー上で動かす前提であれば、大丈夫なような気がします。 とはいえ、yambejpさんの意見の通りWindowsから送信するのはうまくいきにくいため、 sendmailに引き渡しができればOKってレベルまでWindows上でテストして、 その先のメール送信はレンタルサーバー上でテストとした方がよろしいかと。
uzr1709

2019/01/17 16:32

検討違いの質問をしていたらすみません。 PEAR::Mailを利用したメールフォームを作成しようとし、以下のサイトを参考にしています。 https://www.ipentec.com/document/php-create-mailform-application-use-pear-mail 「mailsend.php」の「$params = array(~」にレンタルサーバーのSMTP情報を入れると思うのですが、 ユーザー名やパスワードを書き込んでも安全なものなのでしょうか? webに載せる事に不安があります。 上記の方法に問題や懸念がある場合、 他にPEAR::Mailを利用したメールフォームの設置で参考になりそうなものがあれば教えて頂けましたら幸いです。
guest

0

「mb_send_mail」が適切でない事お教え頂き有難うございます。
PEAR::MAILとPHPMailerをお教え頂きましたが、
PEAR::MAILはPHP7との相性が悪く、
またレンタルサーバーの権限により適切な場所にフォルダ/ファイルをアップロードする事が出来ず動きませんでした。

PHPMailerに変更致しましたところ、5.2系と6.0系で処理方法が違う事で戸惑いましたが、
結果的にPHP7と5.2系PHPMailerでgmailへ送信する事が出来ました。
まだ不安定な部分がある為、後日また相談させて頂く事があるかと思いますが、
当初の目的のメール送信は果たせましたので解決とさせて頂きます。

投稿2019/01/24 02:15

uzr1709

総合スコア34

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問