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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Postfix

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

3回答

2535閲覧

postfixでphpを実行したい

entaro12345

総合スコア75

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Postfix

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/09/11 06:35

編集2020/09/24 02:48

前提・実現したいこと

AWS上のサーバーにpostfixをインストールして、
メールが来るたびにphpを実行したいです。
postfixをインストールして、各種設定を行い、いざ始めようと思ったところ、
うんともすんとも言わずつまずいてしまいましたので、ご相談させていただきます。
とりあえず、確認のために、error.txtを吐き出すだけのファイルを配置しています。

メールの送信先は、「infos@ドメイン名」になります。

2020.09.23 追記
postfixの設定が完了し、メールを送信してみたところ、下記のエラーが出ていました。
「temporary failure. Command output:local:fatal:execvp usr/bin/php: No such file or directory」

2020.09.24 追記
postfixが動作することは確認できましたが、PDO接続でエラーが出てしまいました。
PDO接続:「Server sent charset unknown to the client. Please, report to the developers」

ググってみて「/etc/my.cnf」へ追記してみましたが、NGでした。

mycnf

1[client] 2default-character-ser=utf8 3 4[mysql] 5default-character-set=utf8 6 7[mysqld] 8collation-server=utf8_general_ci 9character-set-server=utf8

何かお知りの情報をいただけると幸いです。

該当のソースコード

maincf

1[main.cf] ※抜粋 2myhostname = XXX.jp 3mydomain = XXX.jp 4myorigin = $mydomain 5inet_interfaces = all 6inet_protocols = ipv4 7mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 8mynetworks = 192.168.XXX.XXX/24, 127.0.0.0/8 9alias_maps = hash:/etc/aliases 10alias_database = hash:/etc/aliases 11 12※XXXにはサーバーのドメインが入ってます。

aliases

1一番下に追加 2 3infos: "| /usr/bin/php /var/www/html/postfix/do.php"

PHP

1[do.phpファイル] 2<?php 3 // 受信メール解析用 4 require_once('Mail/mimeDecode.php'); 5 // 文字化け対策 6 mb_language("Japanese"); 7 mb_internal_encoding("UTF-8"); 8 9 $params['include_bodies'] = true; 10 $params['decode_bodies'] = true; 11 $params['decode_headers'] = true; 12 $params['input'] = file_get_contents('php://stdin'); 13 14 $structure = Mail_mimeDecode::decode($params); 15 16 // 送信者メールアドレス取得 17 $from = $structure->headers['from']; 18 $subject = $structure->headers['subject']; 19 20 // DB情報セット 21 $dsn = 'mysql:dbname=DB名;host=ホスト名'; // mysqlを使用 22 $pass = 'XXXXX'; // パスワード 23 $user = 'XXXXX'; // ユーザー名 24 $now = now(); 25 try { 26 $dbh = new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 27 28 // 受信メール情報をデータベースに登録 29 $sql = 'insert into receive_mail '. 30 '( '. 31 ' mail_address '. 32 ' , received_date '. 33 ') values ( '. 34 ' :ad '. 35 ' , :dt '. 36 ') '; 37 // PDOStatementクラスのインスタンス生成 38 $prepare = $dbh->prepare($sql); 39 $prepare->bindValue(':ad' , $from , PDO::PARAM_STR); 40 $prepare->bindValue(':dt' , $now , PDO::PARAM_STR); 41 42 // プリペアードステートメント実行 43 $prepare->execute(); 44 } catch (PDOException $e) { 45 $msg = $e->getMessage(); 46 // ログ出力 47 file_put_contents('/tmp/error.txt', $msg, FILE_APPEND | LOCK_EX); 48 exit; 49 } 50 51 $to = $from; 52 $sub = "受信完了"; 53 $msg = "※本メールは配信専用となっておりますので、返信はできません。"; 54 $head = "From: register@test.jp"."\r\n"; 55 56 mb_send_mail($to, $sub, $msg, $head); 57?> 58

補足情報(FW/ツールのバージョンなど)

Apache2.4
PHP7.4

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

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

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

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

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

hentaiman

2020/09/11 06:51

aliasの内容は適用してますか?
hentaiman

2020/09/11 06:52

それ以前にうんともすんとも言わないのはpostfixそのものの話か?
entaro12345

2020/09/11 06:52

コメントありがとうございます。 はい。 下記のコマンドを実行しました。 sudo newaliases sudo systemctl restart postfix
hentaiman

2020/09/11 06:57

今の質問だと「postfixが動かない」「aliasが効かない」「外部からのメールが届かない」のどれだか分かりません なのでまずデフォルトのpostfixの状態でローカルからローカルへのメール送信が出来るかの確認 次にaliasが有効かの確認 次は外部からのメール受信設定 で postfix自体のエラーログを見るなどして、ひとつひとつ動作を確認し、躓いたらその動作とエラーの内容を提示しましょう
entaro12345

2020/09/11 08:21

ありがとうございます。 一つ一つ確認してみます!
hana_yama_san

2020/09/11 14:18 編集

あなたの抜粋した物に「postconf -n」から漏れている物は無いですか。 あと、当然ながらメイル以外の通信はすべて問題無いんですよね。
entaro12345

2020/09/13 23:25

ありがとうございます。 もう一度、漏れがないか確認してみます!
hentaiman

2020/09/24 02:46

一旦ご自身で本来起きていた問題とその解決策を回答し、自己解決してください。 ※そうする事で類似の問題が起きていた人が検索で本質問の辿り着いた時の一助となる可能性があります。 そしてDB接続エラーに関しては改めて問題点を抜粋し、質問のタイトルも改めた上で別の質問として挙げ直してください。そうするとpostfix分からなくてDB周り分かる人が回答してくれる可能性が上がります。(Postfix分からなくてもdb分かる人は多いと思うし)
entaro12345

2020/09/24 02:49

ありがとうございます! ご指摘の通りにいたします。
guest

回答3

0

自己解決

aliaseの設定を見直したところ、動作しました。
※ケアレスミスでした。

(変更前)
infos: "| usr/bin/php /var/www/html/postfix/do.php"

(変更後)
infos: "| /usr/bin/php /var/www/html/postfix/do.php"

投稿2020/09/24 02:52

entaro12345

総合スコア75

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

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

0

エラーメッセージのパスが「usr/bin/php」
aliasesの記述が「/usr/bin/php」

書き間違えているか。修正後にnewaliasesを叩き忘れているか。

投稿2020/09/23 10:08

hana_yama_san

総合スコア923

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

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

entaro12345

2020/09/23 23:26

回答ありがとうございます。 aliasesの記述は、「infos: "| /usr/bin/php /var/www/html/postfix/do.php"」で追記しています。 記述方法誤っていますでしょうか? また、追記後、下記コマンドを実行しています。 「sudo postalias /etc/aliases」 「sudo newaliases」
entaro12345

2020/09/23 23:35

失礼いたしました。 単純にケアレスミスをしていました。 aliasesの記述が、「infos: "| usr/bin/php /var/www/html/postfix/do.php"」 になっており、usrの前に[/]がなかったことが原因でした。
hana_yama_san

2020/09/24 10:33

解決した事はおめでとうと言わせていただきます。 が、人の指摘で判ったことを、自己解決したかのように書くとは、 あなた、質問サイトの意味判っていますか? どこの誰がボランティアの上に感謝もされないことに真面目に考えたり、 調査・検証すると思っているのですか?
guest

0

maillogを見てinfos宛ての配送がなされていることが確認できたなら、
'error.txt''/tmp/error.txt'のように誰でも書けるディレクトリのフルパス指定に変更すれば書けると思います。

投稿2020/09/11 13:07

otn

総合スコア84555

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

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

entaro12345

2020/09/13 23:26

回答ありがとうございます。 パスを変更してみて書けるかどうか確認してみます。
entaro12345

2020/09/23 09:05

infos宛のメールで止まっていました。
otn

2020/09/23 11:08

> nfos宛のメールで止まっていました。 これはどういう現象のことですか?
entaro12345

2020/09/23 23:29

メールログ「/var/log/maillog」を見ると、受信しているようなのですが、 本文に追記しました下記のエラーが出ておりました。 「temporary failure. Command output:local:fatal:execvp usr/bin/php: No such file or directory」
entaro12345

2020/09/23 23:35

失礼いたしました。 単純にケアレスミスをしていました。 aliasesの記述が、「infos: "| usr/bin/php /var/www/html/postfix/do.php"」 になっており、usrの前に[/]がなかったことが原因でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問