首页 > 解决方案 > 将php电子邮件表单升级为smtp

问题描述

我收到一个错误,电子邮件表单无法通过并收到错误消息。我检查了解析和语法错误,没有遇到任何错误。我认为我需要将电子邮件表单从 php 升级到 smtp 电子邮件设置,但不确定从哪里开始。以前有没有人浏览过这个问题以及解决这个问题的任何提示?可能是其他导致错误消息的原因吗?

<?php
/*
=== Copyright (c) x2cms.com 2011 === BUILDER_VERSION:12
*/

if (!defined("BASE_PATH")) define('BASE_PATH', isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : substr(str_replace('\\\\','\\',$_SERVER['PATH_TRANSLATED']),0, -1*strlen($_SERVER['SCRIPT_NAME'])));

/* initialize a session. */
session_start();

require("mailer.php");
require("template-loader.php");
require("settings-loader.php");

$settings['captcha_required'] = array_key_exists('captcha',$_POST);

// disable magic quotes
// --------------------------------------------------------------------------------------------

// languages
// --------------------------------------------------------------------------------------------
// load language
read_language_xml(BASE_PATH.'/emaileverything.php.xml');

// add default language for form
add_language_def('email_message','The following information was posted from your %s form');
add_language_def('email_subject','%s form results');
add_language_def('error_required','is a required field');
add_language_def('mail_sender','Mail sender IP address:');
add_language_def('go_back','&laquo; back');
add_language_def('error_captcha','The validation code you entered was invalid');
add_language_def('error_no_email_to','You must enter an email address');
add_language_def('error_no_email_from','You must enter an email address to send to.');
add_language_def('error_no_message','You must enter a message');
add_language_def('success_message','Thank you, the form has been processed successfully.');
add_language_def('error_message','The following error(s) occured: ');

// uploader
add_language_def('error_file_size','%s file is too big, the maximum file size is (%smb)');
add_language_def('file_link','File Link');
add_language_def('error_upload','Unable to save uploaded file, please check site uploaded directory and permissions.');
add_language_def('error_file_type','allowed files are %s. Yours was %s.');

// settings
// --------------------------------------------------------------------------------------------
$settings['form_id'] = ''; // form identifier
$settings['form_name'] = $_SERVER['HTTP_HOST']; // the name of the form used, defaults to the script address
$settings['confirmation_message'] = ''; // the confirmation message used with the template
$settings['confirmation_url'] = ''; // if specified we redirect to a confirmation page
$settings['email_subject'] = ''; // the email subject
$settings['email_to'] = ''; // who do we send the email to
$settings['email_from'] = ''; // the customer's email submitting the form
$settings['copy_mail_to_sender'] = 'false'; // whether we copy the form email to the mail sender $email_from
$settings['required_fields'] = ''; // required field names seperated by |
$settings['email_template'] = ''; // the email template to use
$settings['upload_max_size'] = '20'; // size in mb per file
$settings['upload_check_extension'] = 'false';
$settings['upload_allowed_extensions'] = 'jpg|jpeg|gif|png|doc|docx|txt|rtf|pdf|xls|xlsx|ppt|pptx|zip'; // allowed file extensions


// general functions
// --------------------------------------------------------------------------------------------

if(!function_exists('str_ireplace'))
{
    function str_ireplace($needle, $str, $haystack)
    {
        $needle = preg_quote($needle, '/');
        return preg_replace("/$needle/i", $str, $haystack);
    }
}

// ensure filename is in friendly format
function safe_filename($filename)
{
    $filename = trim($filename);
    $filename = str_replace("/", "", $filename);
    $filename = str_replace("\\", "", $filename);
    $filename = str_replace(">", "", $filename);
    $filename = str_replace("<", "", $filename);

    return $filename;
}

// check for required fields
function isRequired($field_name)
{
    global $required_fieldsarr;
    if(is_array($required_fieldsarr))
    {
        foreach ($required_fieldsarr as $required_field_name)
        {
            if(strtoupper($required_field_name) == strtoupper($field_name))
            {
                return true;
            }
        }
    }
    return false;
}

function get_file_extension($filename)
{
    return end(explode(".", $filename));
}

// uploaded files
function uploadedFiles()
{
    $returnStr = '';

    $returnStr .= uploadFile("userfile");

    for($i = 0; $i<10; $i++)
    {
        $returnStr .= uploadFile("userfile".$i);
    }

    return $returnStr;
}

function uploadFile($fieldName)
{
    global $error_message, $_FILES, $language, $settings;

    if(!isset($_FILES[$fieldName]))
    {
        return;
    }

    $allowed_file_ext_arr = explode("|", $settings['upload_allowed_extensions']);

    $returnStr = '';

    // try array of files first
    if(is_array($_FILES[$fieldName]))
    {
        foreach ($_FILES[$fieldName]["error"] as $key => $error)
        {
            if ($error == UPLOAD_ERR_OK)
            {
                $file_type = $_FILES[$fieldName]['type'][$key];
                $file_size = $_FILES[$fieldName]['size'][$key];
                $tmp_name = $_FILES[$fieldName]["tmp_name"][$key];
                $name = $_FILES[$fieldName]["name"][$key];

                $error = "";

                // check file size
                if ($file_size > ((int)$settings['upload_max_size'] * 1024 * 1024))
                {
                    $error .= sprintf($language['error_file_size'], $name, $settings['upload_max_size']).'<br/>';
                }

                // check file type
                if($settings['upload_check_extension'] == 'true')
                {
                    if (!in_array(get_file_extension($name),$allowed_file_ext_arr))
                    {
                        $error .= sprintf($language['error_file_type'], $settings['upload_allowed_extensions'], $file_type).'<br/>';
                    }
                }

                if ($error == "")
                {
                    if(is_uploaded_file($tmp_name))
                    {
                        //  sanatize file name
                        $name = preg_replace(array("/\s+/", "/[^-\.\w]+/"), array("_", ""), trim($name));

                        if(move_uploaded_file($tmp_name, "uploaded/$name"))
                        {
                            $returnStr .= "<tr><td>".$language['file_name']."</td><td><a href='http://".$_SERVER['HTTP_HOST']."/uploaded/$name'>$name</a></td></tr>";
                        }
                        else
                        {
                            $error_message = $language['error_upload'].'<br/>';
                        }
                    }
                }
                else
                {
                    $error_message .= $error;
                }
            }
        }
    }
    else // try single file
    {
        if($_FILES[$fieldName]["error"] == UPLOAD_ERR_OK)
        {
            $file_type = $_FILES[$fieldName]['type'][$key];
            $file_size = $_FILES[$fieldName]['size'][$key];
            $tmp_name = $_FILES[$fieldName]["tmp_name"][$key];
            $name = $_FILES[$fieldName]["name"][$key];

            $error = "";

            // check file size
            if ($file_size > ((int)$settings['upload_max_size'] * 1024 * 1024))
            {
                $error .= sprintf($language['error_file_size'], $key, ($maxSize/1000)).'<br/>';
            }

            // check file type
            if($settings['upload_check_extension'] == 'true')
            {
                if (!in_array(get_file_extension($name),$allowed_file_ext_arr))
                {
                    $error .= $key." Allowed files are ".$settings['upload_allowed_extensions'].". Yours was ".$file_type."<br/>";
                }
            }

            if ($error == "")
            {
                if(is_uploaded_file($tmp_name))
                {
                    //  sanatize file name
                    $name = preg_replace(array("/\s+/", "/[^-\.\w]+/"), array("_", ""), trim($name));

                    if(move_uploaded_file($tmp_name, "uploaded/$name"))
                    {
                        $returnStr .= "<tr><td>".$language['file_name']."</td><td><a href='http://".$_SERVER['HTTP_HOST']."/uploaded/$name'>$name</a></td></tr>";
                    }
                    else
                    {
                        $error_message = $language['error_upload'].'<br/>';
                    }
                }
            }
            else
            {
                $error_message .= $error;
            }
        }
    }

    return $returnStr;
}

// read POST and GET data
// --------------------------------------------------------------------------------------------

// did we specify a form name in either GET OR POST

// get the form id
if(trim($_POST['id']) != '')
{
    $settings['form_id'] = trim($_POST['id']);
}

if(trim($_GET['id']) != '')
{
    $settings['form_id'] = trim($_GET['id']);
}

// 5.1 get parameters from XML

load_config('emaileverything-settings.xml');
load_config($settings['form_id'].'.xml');

// parse_settings_xml(safe_filename($settings['form_id']).'-settings.xml');


// check_referrer();

// get parameters from POST, POST overwrites settings from XML

if(trim($_POST['FormName']) != '')
{
    $settings['form_name'] = trim($_POST['FormName']);
}

if(trim($_POST['EmailSubject']) != '')
    $settings['email_subject'] = trim($_POST['EmailSubject']);

if(trim($_POST['EmailTo']) != '')
    $settings['email_to'] = trim($_POST['EmailTo']);

if(trim($_POST['email']) != '')
    $settings['email_from'] = trim($_POST['email']);

if(trim($_POST['OKMessage']) != '')
    $settings['confirmation_message'] = trim($_POST['OKMessage']);

if(trim($_POST['OKURL']) != '')
    $settings['confirmation_url'] = trim($_POST['OKURL']);

if(trim($_POST['CopyToSender']) != '')
    $settings['copy_mail_to_sender'] = trim($_POST['CopyToSender']);

if(trim($_POST['UseTemplate']) != '')
    $settings['email_template'] = trim($_POST['UseTemplate']);

if(trim($_POST['TemplateID']) != '')
    $settings['template_id'] = trim($_POST['TemplateID']);

if(trim($_POST['RequiredFields']) != '')
    $settings['required_fields'] = trim($_POST['RequiredFields']);

// alternative field names from trellix
if(trim($_POST['tlx_Subject']) != '')
    $settings['email_subject'] = trim($_POST['tlx_Subject']);

if($_POST['tlx_EmailTo'] != '')
    $settings['email_to'] = trim($_POST['tlx_EmailTo']);

if($_POST['tlx_OKMessage'] != '')
    $settings['confirmation_message'] = trim($_POST['tlx_OKMessage']);

// build the email
// --------------------------------------------------------------------------------------------
// now we do some work with our required fields, split on | to get each required field name
$required_fieldsarr = explode("|", $settings['required_fields']);

$error_message = '';

// check required fields
foreach ($_POST as $key => $val)
{
    // see if field is required
    if(isRequired($key) && ($val == ''))
    {
        $error_message .= $key." ".$language['error_required'].".<br/>";
    }
}

// build email message
if($settings['email_template'] != '') // are we using a email template
{
    // safe file name
    $settings['email_template'] = safe_filename($settings['email_template']);

    // check to see if template exists
    if(file_exists($settings['email_template']))
    {
        $email_message = file_get_contents($settings['email_template']);

        // replace key with value
        foreach ($_POST as $key => $val)
        {
            $email_message = str_ireplace('{'.$key.'}', $val, $email_message);
        }

        // remove remaining
        $email_message = preg_replace('/\{(\w*)\}/', '', $email_message);
    }
}
else
{
    $email_message = sprintf($language['email_message'],$settings['form_name']);

    $email_message .= '<br/><br/><table cellpadding="5" cellspacing="5" border="1"><tr><th>Field Name</th><th>Value</th></tr>';`

    foreach ($_POST as $key => $val)

标签: phpemailsmtp

解决方案


推荐阅读