前提・実現したいこと
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
回答3件
あなたの回答
tips
プレビュー