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

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

ただいまの
回答率

90.50%

  • PHP

    24066questions

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

  • XAMPP

    622questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 299

uzr1709

score 14

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

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

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

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title></title>

    <link href="css/set.css" rel="stylesheet" type="text/css">
</head>
<body>
    <main>
        <?php
        mb_language("Japanese");
        mb_internal_encoding("UTF-8");
        if (mb_send_mail("送信先@gmail.com", "テストメール", "これはテストです。", "From:送信元@gmail.com"))
        {
        echo "メールが送信されました。";
        } else {
        echo "メールの送信に失敗しました。";
        }
        ?>
    </main>
</body>
</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のインストールがうまく行かなかったり、参考にするものが少なかったりと現状躓いております。
取り急ぎフォームサービスでの実装を検討していますが、
後学の為、参考になるサイトなどありましたら教えて頂けますと幸いです。
引き続きどうぞ宜しくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

+1

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:下記のソースコードを入力(コピー)してください。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require "PHPMailer-master/src/PHPMailer.php";
require "PHPMailer-master/src/SMTP.php";
require "PHPMailer-master/src/POP3.php";
require "PHPMailer-master/src/Exception.php";
require "PHPMailer-master/src/OAuth.php";
require "PHPMailer-master/language/phpmailer.lang-ja.php";

mb_language("japanese");
mb_internal_encoding("UTF-8");

$user = "アプリのパスワードを作成したメールアドレス";

$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->Host = "smtp.gmail.com";
$mailer->CharSet = "utf-8";
$mailer->Username = $user;
$mailer->Password = "アプリのパスワード";
$mailer->SMTPSecure = "ssl";
$mailer->Port = 465;
//デバッグしてログを出力させたい場合は下記一行をコメントアウトしてください。
//$mailer->SMTPDebug = 2;
$mailer->SMTPAuth = true;
$mailer->From = $user;
$mailer->SetFrom($user);
$mailer->FromName = mb_convert_encoding($user, "UTF-8", "AUTO");
$mailer->Subject = mb_convert_encoding("件名(Subject)", "UTF-8", "AUTO");
$mailer->Body = mb_convert_encoding("本体(body)", "UTF-8", "AUTO");
$mailer->AddAddress("送信先アドレス");
if($mailer->Send()) //メールが送信できたら
{
  echo "送信成功!";
}else
{
  echo "エラー発生";
}
?>


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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/24 11:11

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

    キャンセル

  • 2019/01/24 11:18

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

    キャンセル

  • 2019/01/24 13:15

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/16 18:06

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

    キャンセル

  • 2019/01/16 18:20

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

    キャンセル

  • 2019/01/18 01:32

    検討違いの質問をしていたらすみません。
    PEAR::Mailを利用したメールフォームを作成しようとし、以下のサイトを参考にしています。
    https://www.ipentec.com/document/php-create-mailform-application-use-pear-mail

    「mailsend.php」の「$params = array(~」にレンタルサーバーのSMTP情報を入れると思うのですが、
    ユーザー名やパスワードを書き込んでも安全なものなのでしょうか?
    webに載せる事に不安があります。

    上記の方法に問題や懸念がある場合、
    他にPEAR::Mailを利用したメールフォームの設置で参考になりそうなものがあれば教えて頂けましたら幸いです。

    キャンセル

+1

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

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/16 18:13

    コメントありがとうございます。
    「PEAR::Mail」は初耳でしたのでこちらで調べてみたいと思います。
    ざっくり調べた限りですが、以下のURLを参考にしています。
    http://www.de2p.co.jp/tech/php/send-mail-by-pear/

    コード上にメールアドレスだけでなく、smtpサーバへのアカウント情報も記載するようなのですが
    安全とは思えないのと、
    こちらもメールアドレスを公開している同じ結果になると思うのですが如何でしょうか?

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • PHP

    24066questions

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

  • XAMPP

    622questions

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