我正在尝试管理来自我的生产邮件服务器(Plesk 12和Postfix)的支持电子邮件,以便将它们发送到托管我的帮助台安装的另一个VPS,我选择了ostickets服务台有很多原因(开源,PHP / MySQL .. 。)
因此,我们的想法是在某些地址触发电子邮件接收,例如contact@company.com,support@company.com ......然后通过其API将它们重新发送到ostickets,以便在那里创建新的票证。
我试过这种方式 http://blog.absolutedisaster.co.uk/osticket-plesk-9-postfix-pipe-mail-to-a-progr/
它解释了如何创建管道以触发电子邮件,午餐php脚本......等等
由于一些权限问题,我保留了所有这些配置并改变了最后一件事:php脚本
所以我用一个简单的bash脚本替换了这个php脚本做同样的事情:向API发送请求以通过CURL创建新票证。
现在在我的生产邮件服务器中,管道被识别并且电子邮件被成功触发:
另一方面,osticket API正在接收请求:
问题是http响应是400,如你所见,这意味着ostickets(格式不正确的电子邮件)中的错误代码#66。
所以,我认为问题出在我的bash脚本中:
exec curl --header 'X-API-Key: API_KEY_HERE' --user-agent 'osTicket API Client v1.7' --data - 'http://support.company.com/api/tickets.email'
我替换的原始PHP脚本是:
#!/usr/bin/php -q
<?php
# Configuration: Enter the url and key. That is it.
# url => URL to api/tickets.email e.g http://yourdomain.com/support/api/tickets.email
# key => API's Key (see admin panel on how to generate a key)
#
$config = array(
'url'=>'http://support.company.com/api/tickets.email',
'key'=>'API_KEY_HERE'
);
#pre-checks
function_exists('file_get_contents') or die('upgrade php >=4.3');
function_exists('curl_version') or die('CURL support required');
#read stdin (piped email)
$data=file_get_contents('php://stdin') or die('Error reading stdin. No message');
#set timeout
set_time_limit(10);
#curl post
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['url']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_USERAGENT, 'osTicket API Client v1.7');
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:', 'X-API-Key: '.$config['key']));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result=curl_exec($ch);
curl_close($ch);
//Use postfix exit codes...expected by MTA.
$code = 75;
if(preg_match('/HTTP\/.* ([0-9]+) .*/', $result, $status)) {
switch($status[1]) {
case 201: //Success
$code = 0;
break;
case 400:
$code = 66;
break;
case 401: /* permission denied */
case 403:
$code = 77;
break;
case 415:
case 416:
case 417:
case 501:
$code = 65;
break;
case 503:
$code = 69;
break;
case 500: //Server error.
default: //Temp (unknown) failure - retry
$code = 75;
}
}
exit($code);
?>
我的bash脚本中缺少什么? (特别是stdin输入)
非常感谢你,
更新 问题确实存在于bash脚本中,这是我提出的解决方案:
#!/bin/bash
data=`cat -`
exec curl --header 'X-API-Key: API_KEY_HERE' --user-agent 'osTicket API Client v1.7' --data "$data" 'http://support.company.com/api/tickets.email'
答案 0 :(得分:1)
问题确实存在于bash脚本中,这是我提出的解决方案:
#!/bin/bash
data=`cat -`
exec curl --header 'X-API-Key: API_KEY_HERE' --user-agent 'osTicket API Client v1.7' --data "$data" 'http://support.company.com/api/tickets.email'