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

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

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

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

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

Q&A

0回答

257閲覧

PHPでのメール送信について

har105

総合スコア0

PHP

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

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

0グッド

1クリップ

投稿2023/05/05 09:17

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • フォームに入力されたアドレスにメールを送信したい。

前提

ここに質問の内容を詳しく書いてください。
PHPで掲示板アプリを作っています。
フォームに入力したメールアドレス宛に会員登録用のメールを送信したいのですが、
メール送信がうまくできません。

発生している問題・エラーメッセージ

ページには「メールを送信しました。」と表示されます。 ### 該当のソースコード Macを使用しています。 Postfix設定で etc/postfix/main.cfの末尾に下記を追記 myorigin = gmail.com myhostname = smtp.gmail.com relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/アプリパスワード smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = plain inet_protocols = all smtp_use_tls = yes smtp_tls_security_level = encrypt tls_random_source = dev:/dev/urandom etc/postfix内に下記を記載したアプリパスワードファイルを作成 [smtp.gmail.com]:587 自身のメールアドレス@gmail.com:アプリパスワード ```HTML ```<form action="" method="post" enctype="multipart/form-data"> メールアドレス:<input type="text" name="email" value="<?php echo $mail; ?>"> <input type="submit" value="登録する"><br><br> <?php echo $msg; ?> </form> ```PHP ソースコード
<?php $email = ''; if (isset($_POST["email"])) { $mail = $_POST["email"]; if (preg_match("/^([a-zA-Z0-9))+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) { $from = "test@example.com"; $subject = "会員登録"; $message = '下記URLから本登録に進んでください。<br> <a href="entry.php"></a>'; $header = "From: {$from}\r\nReply-To: {$from}\r\n"; $result = mb_send_mail($mail, $subject, $message, $header); if ($result) { $msg = "メールを送信しました。"; } else { $msg = "メールの送信に失敗しました。"; } } else { $msg = "メールアドレスが不正です。"; } } else { $msg = ""; } ?>

試したこと

ここに問題に対して試したことを記載してください。
・postfixを起動できていないのかと思いターミナルで「sudo postfix start」を実行。→「the Postfix mail system is already running」すでに動いているようです。
・ターミナルで「date | mail -s test メールアドレス」を実行。→メール受信できませんでした。
・送信先にgmailを使用していたが、yahooメールで再度実行。→こちらも受信できません。

様々なブログ等調べましたが原因がわからず途方に暮れております。
わかりにくければ申し訳ございませんが、何か情報ご教示いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

otn

2023/05/05 09:34

環境が不明ですが、sudoコマンドが使えると言うことは、共用レンタルサーバーとかじゃなくて、 OSもあなたが管理していると言うことですよね? Postfixの設定をしたと思いますが、その時にメールが送れるかどうかのテストはしていないのでしょうか? 設定後に全くテストせずに、今、PHPからのメール送信を試みたと言うことですかね? とりあえず、 (1) Postfix 起動時点のログ内容 (2) > ・ターミナルで「date | mail -s test メールアドレス」を実行。 の時刻でのログの内容 の2つを確認しましょう。原因に繋がる何かが書かれていると思います。
har105

2023/05/05 10:41

コメントありがとうございます。 レンタルサーバーは使用しておりません。 MAMPで実行しています。 テストはやってみなかったと思うのですが 設定後に一度PHPからmb_send_mailでメール送信ができました。 数日後に再度別のファイルから実行しようとしたところ送信ができなくなっておりました。 無知で申し訳ないのですが、ログ内容というのはどのように確認できるのでしょうか。 下記をネットで検索して実行してみたのですがこれのことでしょうか?↓ (log stream --predicate '(process == "smtpd") || (process == "smtp")' --info)
otn

2023/05/05 11:10

MAMPということは、MacOSですね。 今のMacは持ってないので知りませんが、ググるとそんな感じの物が出るので、MacOS標準の方法でインストールしたPostfixであれば(or最初から入っている?)、そうなのでしょう。 時刻範囲も指定できるようですね。
CHERRY

2023/05/07 02:17

log show --info --predicate '(process == "smtpd") || (process == "smtp")' --start '2023-05-05' --end '2023-05-06' のように実行して、ログを表示させるとどのようなログが表示されますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問