Ответ 1
Я могу угадать несколько вещей, которые можно проверить со стороны сервера, чтобы показать ошибку.
1) Как указано в других ответах, обязательно установите все необходимые заголовки, вы можете их проверить, например. Firebug, как показано здесь, http://s30.postimg.org/qjcbmdye9/facebook_headers.png
или вы можете получить заголовки с помощью функции php get_headers. для его установки используйте
curl_setopt($ch, CURLOPT_HTTPHEADER, array("HeaderName: HeaderValue"));
2). Когда вы открываете страницу в браузере (исключая отправку формы с помощью метода post), он делает запрос на получение вместо сообщения, поэтому, если на стороне сервера он проверяется $_GET, то ваш почтовый запрос не будет рассмотрен.
3) Если вы уверены, что это должен быть почтовый запрос (скажем, это форма submit), то может возникнуть проблема: в некоторых формах могут быть скрытые поля, которые снова являются проверяются на сервере, и если они не установлены, может быть возвращена ошибка. Итак, вы должны посмотреть исходный код формы и добавить их (если таковые имеются) к вашим параметрам сообщения.
4), если вы отправляете форму, обязательно установите кнопку отправки с ее именем и значением, так как это похоже на скрытые поля, это также можно проверить.
5) Куки файлы также могут быть проблемой, потому что по умолчанию браузер имеет его, а завиток нет. Чтобы иметь возможность устанавливать и читать файлы cookie, используйте этот код
// set cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// use cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
здесь, $cookie_file
путь к файлу файлов cookie. Не знаю в linux или mac, но в окнах обязательно используйте абсолютный путь к файлу cookie.
6) Кроме того, вы можете установить референт на
curl_setopt($ch, CURLOPT_REFERER, 'http://www.myaddress.com/mypage.php');
EDIT:. В случае запроса ajax вы можете добавить заголовок X-Requested-With
со значением как XMLHttpRequest