2017-06-23 2 views
0

リモートサーバーのcurlコマンドからデータのJSONダンプを取るサーバー上に少しのPHPスクリプトがあります。JSONダンプを美化して解析し、読み取り可能な電子メールコンテンツを作成する

PHPスクリプトは結果をメールで送信しますが、現時点では未処理のJSONデータを電子メールで送信するだけです。

可能であれば、データを美しくしてから解析して送信したいと考えています。

だから、現在のPHPスクリプトが

<?php 

$payload = file_get_contents('php://input'); 
$serverToken = "*****"; 

$json = json_encode(array(
    'From' => 'email', 
    'To' => 'email', 
    'Subject' => 'Server Info', 
    'HtmlBody' => $payload, 
    'TextBody' => $payload 

)); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://api.postmarkapp.com/email'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Content-Type: application/json', 
    'X-Postmark-Server-Token: ' . $serverToken 
)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
$response = json_decode(curl_exec($ch), true); 
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 

であり、私はこれを電子メールで送信取得したい...オンライン

{ "IP": "78.122.144", "SERIAL" : "C02SQ5888TUA", "Date", "Fri 23 Jun 2017 18:05:01 BST" } 

ビューティは

{ 
"IP": "78.122.144", 
"SERIAL": "C02SQ5888TUA", 
"DATE": "Fri 23 Jun 2017 18:05:01 BST" 
} 

にそれを回すだろうしかし、私は本当にこのような電子メールの内容が好きです...

IP: 78.122.144 
SERIAL: C02SQ5888TUA 
DATE: Fri 23 Jun 2017 18:05:01 BST 

{} "と、を削除します。

誰でもスクリプト/サーバーを持っていることをお勧めします。ケーキのアイシングは、上記のシリアル番号を電子メールの件名にも入れることです。

例curlコマンドは次のとおりです。

curl -H "Content-Type: application/json" https://url.com/first.php -d '{ "IP Address": "'"$(dig +short myip.opendns.com @resolver1.opendns.com)"'", "SERIAL": "'"$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')"'", "Date", "'"$(date)"'" }' 
+0

http://php.net/manual/en/function.json-decode.php and loop – AbraCadaver

+0

postmarkapp.com API認証の資格情報を投稿したばかりです。私は投稿からそれらを編集しましたが、あなたはすぐに**それらを変更したいと思うでしょう。 –

+0

@AlexHowanskyは心配していません、私はそれほどダウトではありませんでした。それは単なる乱数です:) –

答えて

1

あなたはこれを行うことができます(これを使用してスクリプトの最初の行を置き換え)

$payload = file_get_contents('php://input'); 
$jsonArray = json_decode($payload); 
$payload = ""; 
foreach($jsonArray as $key => $value){ 
     $payload .= $key . ": " . $value . "\n"; 
} 

ペイロードにきれいな文字列を作成する必要があること。あなたが作ることができる

は、あなたがする必要があるだろう、すべてが

... 
'Subject' => "Server Info " . $jsonArray['SERIAL'], 
... 

で、電子メールの件名にシリアル番号を追加したり、あなただけの

$payload = file_get_contents('php://input'); 
$payload = print_r($payload, true); 
+0

最初のアイデアは本当にうまくいった - しかし、カールから送信された1つのコマンドでのみ - 2を追加するとすぐに、電子メールは送信されませんでした。私は最初のリクエストで何が起こっているかを見ることができるように、curlコマンドの例を挙げました。 –

+0

。@ Prodikl私が与えたCurl入力の例で最初のアイデアをどうやって動作させるか知っていますか? –

+0

申し訳ありませんが、本当にcurlコマンドについてはわかりません(今はテストできません)。主題については、私の答えを編集します – Prodikl

0

を行うことができ

$payload = file_get_contents('php://input'); 
$payload = json_encode(json_decode($payload), JSON_PRETTY_PRINT); 
+0

それは残念なことに電子メールの内容として私に "null"を与えました。 –

関連する問題