前提・実現したいこと
AWS上に新設したサーバーにpostfixを構築しました。
postfixでメールを受信した際に、受信した内容をDBに格納したいのですが、
DB接続でエラー発生してしまいうまくいきません。
※postfixで受けた場合、下記のPHPを実行しています。
お力を貸してください。
発生している問題・エラーメッセージ
下記PHP実行時に出力している「/tmp/error.txt」の中身
Server sent charset unknown to the client. Please, report to the developers
該当のソースコード
PHP
1<?php 2 // 受信メール解析用 3 require_once('Mail/mimeDecode.php'); 4 // 文字化け対策 5 mb_language("Japanese"); 6 mb_internal_encoding("UTF-8"); 7 8 $params['include_bodies'] = true; 9 $params['decode_bodies'] = true; 10 $params['decode_headers'] = true; 11 $params['input'] = file_get_contents('php://stdin'); 12 13 $structure = Mail_mimeDecode::decode($params); 14 15 // 送信者メールアドレス取得 16 $from = $structure->headers['from']; 17 $subject = $structure->headers['subject']; 18 19 // 署名付きの場合 20 preg_match("/<.*>/", $from, $str); 21 if ($str[0]!= "" ) { 22 $str = substr($str[0], 1, strlen($str[0]) -2); 23 $from = $str; 24 } 25 26 // DB情報セット 27 $dsn = 'mysql:dbname=DB名;host=ホスト名'; // mysqlを使用 28 $pass = 'XXXXX'; // パスワード 29 $user = 'XXXXX'; // ユーザー名 30 $now = date( 'Y-m-d H:i:s' ); 31 // データベース処理 32 try { 33 $dbh = new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 34 35 // データベースに登録 36 $sql = 'insert into receive_mail '. 37 '( '. 38 ' mail_address '. 39 ' , received_date '. 40 ') values ( '. 41 ' :ad '. 42 ' , :dt '. 43 ') '; 44 // PDOStatementクラスのインスタンス生成 45 $prepare = $dbh->prepare($sql); 46 $prepare->bindValue(':ad' , $from , PDO::PARAM_STR); 47 $prepare->bindValue(':dt' , $now , PDO::PARAM_STR); 48 49 // プリペアードステートメント実行 50 $prepare->execute(); 51 } catch (PDOException $e) { 52 $msg = $e->getMessage(); 53 // ログ出力 54 file_put_contents('/tmp/error.txt', $msg, FILE_APPEND | LOCK_EX); 55 exit; 56 } 57?>
試したこと
「/etc/my.cnf」へ追記してみましたが、変わらずでした。
※設定が反映されていることは確認しました。
[client] default-character-ser=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server=utf8_general_ci character-set-server=utf8
show variables like 'char%'の結果になります↓↓
補足情報(FW/ツールのバージョンなど)
Apache2.4
PHP7.4
MySQL8
あなたの回答
tips
プレビュー