phpmailer — строка php echo вызывает 500 внутренних ошибок сервера на сервере — работает локально

Мой клиент создал сайт в Adobe Muse, и мне нужно изменить его, чтобы использовать проверенный SMTP-сервер.

Все это прекрасно работает локально, но не будет работать на сервере (не Adobe сервер). Письмо отправлено нормально, но функция email_form_submission возвращает ошибку 500.

Это на общем хостинге, так что у меня сейчас нет доступа к журналам. Какая конфигурация на сервере может вызвать эту ошибку? Я не думаю, что это ошибка кодирования, так как она работает нормально локально. Я переименовал файл htmaccess, чтобы отключить его.

Код выполненный на бланке отправки:

<?php
/*
If you see this text in your browser, PHP is not configured correctly on this hosting provider.
Contact your hosting provider regarding PHP configuration for your site.

PHP file generated by Adobe Muse CC 2014.2.1.284
*/

require_once('form_process.php');

$form = array(
'subject' => 'CONNECT Form Submission',
'heading' => 'New Form Submission',
'success_redirect' => 'Thanks.html',
'resources' => array(
'checkbox_checked' => 'Checked',
'checkbox_unchecked' => 'Unchecked',
'submitted_from' => 'Form submitted from website: %s',
'submitted_by' => 'Visitor IP address: %s',
'too_many_submissions' => 'Too many recent submissions from this IP',
'failed_to_send_email' => 'Failed to send email',
'invalid_reCAPTCHA_private_key' => 'Invalid reCAPTCHA private key.',
'invalid_field_type' => 'Unknown field type \'%s\'.',
'unknown_method' => 'Unknown server request method'
),
'email' => array(
'from' => '[email protected]',
'to' => '[email protected]'
),
'fields' => array(
'custom_U1619' => array(
'type' => 'string',
'label' => 'Name',
'required' => true,
'errors' => array(
'required' => 'Field \'Name\' is required.'
)
),
'Email' => array(
'type' => 'email',
'label' => 'Email',
'required' => true,
'errors' => array(
'required' => 'Field \'Email\' is required.',
'format' => 'Field \'Email\' has an invalid email.'
)
),
'custom_U1624' => array(
'type' => 'string',
'label' => 'Message',
'required' => false,
'errors' => array(
)
),
'custom_U15959' => array(
'type' => 'string',
'label' => 'Cell Phone',
'required' => false,
'errors' => array(
)
),
'custom_U15963' => array(
'type' => 'string',
'label' => 'Home Phone',
'required' => false,
'errors' => array(
)
)
)
);

process_form($form);
?>

Код вызывается из приведенного выше скрипта:

<?php
/*
If you see this text in your browser, PHP is not configured correctly on this hosting provider.
Contact your hosting provider regarding PHP configuration for your site.

PHP file generated by Adobe Muse CC 2014.2.1.284
*/

require_once('form_throttle.php');function process_form($form) {
if ($_SERVER['REQUEST_METHOD'] != 'POST')
die(get_form_error_response($form['resources']['unknown_method']));

if (formthrottle_too_many_submissions($_SERVER['REMOTE_ADDR']))
die(get_form_error_response($form['resources']['too_many_submissions']));

// will die() if there are any errors
check_required_fields($form);

// will die() if there is a send email problem
email_form_submission($form);
}

function get_form_error_response($error) {
return get_form_response(false, array('error' => $error));
}

function get_form_response($success, $data) {
if (!is_array($data))
die('data must be array');

$status = array();
$status[$success ? 'FormResponse' : 'MusePHPFormResponse'] = array_merge(array('success' => $success), $data);

return json_serialize($status);
}

function check_required_fields($form) {
$errors = array();

foreach ($form['fields'] as $field => $properties) {
if (!$properties['required'])
continue;

if (!array_key_exists($field, $_REQUEST) || empty($_REQUEST[$field]))
array_push($errors, array('field' => $field, 'message' => $properties['errors']['required']));
else if (!check_field_value_format($form, $field, $properties))
array_push($errors, array('field' => $field, 'message' => $properties['errors']['format']));
}

if (!empty($errors))
die(get_form_error_response(array('fields' => $errors)));
}

function check_field_value_format($form, $field, $properties) {
$value = get_form_field_value($field, $properties, $form['resources']);

switch($properties['type']) {
case 'checkbox':
case 'string':
case 'captcha':
// no format to validate for those fields
return true;

case 'recaptcha':
if (!array_key_exists('recaptcha', $form) || !array_key_exists('private_key', $form['recaptcha']) || empty($form['recaptcha']['private_key']))
die(get_form_error_response($form['resources']['invalid_reCAPTCHA_private_key']));
$resp = recaptcha_check_answer($form['recaptcha']['private_key'], $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
return $resp->is_valid;

case 'email':
return 1 == preg_match('/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i', $value);

default:
die(get_form_error_response(sprintf($form['resources']['invalid_field_type'], $properties['type'])));
}
}

function email_form_submission($form) {$form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : '');

$to = $form['email']['to'];
$subject = $form['subject'];
$message = get_email_body($subject, $form['heading'], $form['fields']);

require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'server.domain.org.nz'; // update this line
$mail->SMTPAuth = true;
$mail->Username = 'email address'; // update this line
$mail->Password = 'Passward'; // update this line

$mail->From = '[email protected]'; // update this line
$mail->FromName = 'dpc website'; // update this line
$mail->addAddress($form['email']['to']);
$mail->isHTML(true);

$mail->Subject = $form['subject'];
$mail->Body = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']);

$sent = $mail->send();

if(!$sent)
die(get_form_error_response('Failed to send email'));

$success_data = array(
'redirect' => $form['success_redirect']
);echo get_form_response(true, $success_data);}

function get_email_headers($to_email, $form_email) {
$headers = 'From: ' . $to_email . PHP_EOL;
$headers .= 'Reply-To: ' . $form_email . PHP_EOL;
$headers .= 'X-Mailer: Adobe Muse CC 2014.2.1.284 with PHP' . PHP_EOL;
$headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL;

return $headers;
}

function get_email_body($subject, $heading, $fields, $resources) {
$message = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
$message .= '<html xmlns="http://www.w3.org/1999/xhtml">';
$message .= '<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><title>' . encode_for_form($subject) . '</title></head>';
$message .= '<body style="background-color: #ffffff; color: #000000; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: 18px; font-family: helvetica, arial, verdana, sans-serif;">';
$message .= '<h2 style="background-color: #eeeeee;">' . $heading . '</h2>';
$message .= '<table cellspacing="0" cellpadding="0" width="100%" style="background-color: #ffffff;">';

foreach ($fields as $field => $properties) {
// Skip reCAPTCHA from email submission
if ('recaptcha' == $properties['type'])
continue;

$message .= '<tr><td valign="top" style="background-color: #ffffff;"><b>' . encode_for_form($properties['label']) . ':</b></td><td>' . get_form_field_value($field, $properties, $resources) . '</td></tr>';
}

$message .= '</table>';
$message .= '<br/><br/>';
$message .= '<div style="background-color: #eeeeee; font-size: 10px; line-height: 11px;">' . sprintf($resources['submitted_from'], encode_for_form($_SERVER['SERVER_NAME'])) . '</div>';
$message .= '<div style="background-color: #eeeeee; font-size: 10px; line-height: 11px;">' . sprintf($resources['submitted_by'], encode_for_form($_SERVER['REMOTE_ADDR'])) . '</div>';
$message .= '</body></html>';

return cleanup_message($message);
}

function is_assoc_array($arr) {
if (!is_array($arr))
return false;

$keys = array_keys($arr);
foreach (array_keys($arr) as $key)
if (is_string($key)) return true;

return false;
}

function json_serialize($data) {

if (is_assoc_array($data)) {
$json = array();

foreach ($data as $key => $value)
array_push($json, '"' . $key . '": ' . json_serialize($value));

return '{' . implode(', ', $json) . '}';
}

if (is_array($data)) {
$json = array();

foreach ($data as $value)
array_push($json, json_serialize($value));

return '[' . implode(', ', $json) . ']';
}

if (is_int($data) || is_float($data))
return $data;

if (is_bool($data))
return $data ? 'true' : 'false';

return '"' . encode_for_json($data) . '"';
}

function encode_for_json($value) {
return preg_replace(array('/([\'"\\t\\\\])/i', '/\\r/i', '/\\n/i'), array('\\\\$1', '\\r', '\\n'), $value);
}

function encode_for_form($text) {
return htmlentities($text, ENT_COMPAT, 'UTF-8');
}

function get_form_field_value($field, $properties, $resources) {
$value = $_REQUEST[$field];

switch($properties['type']) {
case 'checkbox':
return (($value == '1' || $value == 'true') ? $resources['checkbox_checked'] : $resources['checkbox_unchecked']);

case 'string':
case 'captcha':
case 'recaptcha':
case 'email':
return encode_for_form($value);

default:
die(get_form_error_response(sprintf($resources['invalid_field_type'], $properties['type'])));
}
}

function cleanup_email($email) {
$email = encode_for_form($email);
$email = preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $email);
return $email;
}

function cleanup_message($message) {
$message = wordwrap($message, 70, "\r\n");
return $message;
}
?>

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]