联系表单发送错误

时间:2017-06-07 21:11:44

标签: php html phpmailer

我正在使用模板,只是试图让我的联系表单工作(试图查看它的工作原理,发送消息等)。填写我的联系表格,然后点击提交,而不是成功通过,其中一个错误弹出:

  

由于某些意外错误,无法发送电子邮件。请稍后再试。

     

原因:   无法实例化邮件功能。

http://prntscr.com/fh5cct

以下是我在HTML中的联系表单:

<div class="col_half col_last">

    <div class="fancy-title title-dotted-border test-john">
        <h3>Send us an Email</h3>
    </div>

    <div class="contact-widget">

        <div class="contact-form-result"></div>

        <form class="nobottommargin" id="template-contactform" name="template-contactform" action="include/sendemail.php" method="post">

        <div class="form-process"></div>

        <div class="col_one_third">
            <label for="template-contactform-name">Name <small>*</small></label>
            <input type="text" id="template-contactform-name" name="template-contactform-name" value="" class="sm-form-control required" />
        </div>

        <div class="col_one_third">
            <label for="template-contactform-email">Email <small>*</small></label>
            <input type="email" id="template-contactform-email" name="template-contactform-email" value="" class="required email sm-form-control" />
        </div>

        <div class="col_one_third col_last">
            <label for="template-contactform-phone">Phone</label>
            <input type="text" id="template-contactform-phone" name="template-contactform-phone" value="" class="sm-form-control" />
        </div>

        <div class="clear"></div>

        <div class="col_full">
            <label for="template-contactform-subject">Subject <small>*</small></label>
            <input type="text" id="template-contactform-subject" name="template-contactform-subject" value="" class="required sm-form-control" />
        </div>

        <div class="clear"></div>

        <div class="col_full">
            <label for="template-contactform-message">Message <small>*</small></label>
            <textarea class="required sm-form-control" id="template-contactform-message" name="template-contactform-message" rows="6" cols="30"></textarea>
        </div>

        <div class="col_full hidden">
            <input type="text" id="template-contactform-botcheck" name="template-contactform-botcheck" value="" class="sm-form-control" />
        </div>

        <div class="col_full">
            <button name="submit" type="submit" id="submit-button" tabindex="5" value="Submit" class="button button-3d nomargin">Submit Comment</button>
        </div>

        </form>
    </div>

</div>

然后我有了sendemail.php文件:

<?php

require_once('phpmailer/PHPMailerAutoload.php');

$toemails = array();

$toemails[] = array(
                'email' => 'myEmail@yahoo.com', // Your Email Address
                'name' => 'My Name' // Your Name
            );

// Form Processing Messages
$message_success = 'We have <strong>successfully</strong> received your Message and will get Back to you as soon as possible.';

// Add this only if you use reCaptcha with your Contact Forms
$recaptcha_secret = 'your-recaptcha-secret-key'; // Your reCaptcha Secret

$mail = new PHPMailer();

// If you intend you use SMTP, add your SMTP Code after this Line


if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    if( $_POST['template-contactform-email'] != '' ) {

        $name = isset( $_POST['template-contactform-name'] ) ? $_POST['template-contactform-name'] : '';
        $email = isset( $_POST['template-contactform-email'] ) ? $_POST['template-contactform-email'] : '';
        $phone = isset( $_POST['template-contactform-phone'] ) ? $_POST['template-contactform-phone'] : '';
        $service = isset( $_POST['template-contactform-service'] ) ? $_POST['template-contactform-service'] : '';
        $subject = isset( $_POST['template-contactform-subject'] ) ? $_POST['template-contactform-subject'] : '';
        $message = isset( $_POST['template-contactform-message'] ) ? $_POST['template-contactform-message'] : '';

        $subject = isset($subject) ? $subject : 'New Message From Contact Form';

        $botcheck = $_POST['template-contactform-botcheck'];

        if( $botcheck == '' ) {

            $mail->SetFrom( $email , $name );
            $mail->AddReplyTo( $email , $name );
            foreach( $toemails as $toemail ) {
                $mail->AddAddress( $toemail['email'] , $toemail['name'] );
            }
            $mail->Subject = $subject;

            $name = isset($name) ? "Name: $name<br><br>" : '';
            $email = isset($email) ? "Email: $email<br><br>" : '';
            $phone = isset($phone) ? "Phone: $phone<br><br>" : '';
            $service = isset($service) ? "Service: $service<br><br>" : '';
            $message = isset($message) ? "Message: $message<br><br>" : '';

            $referrer = $_SERVER['HTTP_REFERER'] ? '<br><br><br>This Form was submitted from: ' . $_SERVER['HTTP_REFERER'] : '';

            $body = "$name $email $phone $service $message $referrer";

            // Runs only when File Field is present in the Contact Form
            if ( isset( $_FILES['template-contactform-file'] ) && $_FILES['template-contactform-file']['error'] == UPLOAD_ERR_OK ) {
                $mail->IsHTML(true);
                $mail->AddAttachment( $_FILES['template-contactform-file']['tmp_name'], $_FILES['template-contactform-file']['name'] );
            }

            // Runs only when reCaptcha is present in the Contact Form
            if( isset( $_POST['g-recaptcha-response'] ) ) {
                $recaptcha_response = $_POST['g-recaptcha-response'];
                $response = file_get_contents( "https://www.google.com/recaptcha/api/siteverify?secret=" . $recaptcha_secret . "&response=" . $recaptcha_response );

                $g_response = json_decode( $response );

                if ( $g_response->success !== true ) {
                    echo '{ "alert": "error", "message": "Captcha not Validated! Please Try Again." }';
                    die;
                }
            }

            $mail->MsgHTML( $body );
            $sendEmail = $mail->Send();

            if( $sendEmail == true ):
                echo '{ "alert": "success", "message": "' . $message_success . '" }';
            else:
                echo '{ "alert": "error", "message": "Email <strong>could not</strong> be sent due to some Unexpected Error. Please Try Again later.<br /><br /><strong>Reason:</strong><br />' . $mail->ErrorInfo . '" }';
            endif;
        } else {
            echo '{ "alert": "error", "message": "Bot <strong>Detected</strong>.! Clean yourself Botster.!" }';
        }
    } else {
        echo '{ "alert": "error", "message": "Please <strong>Fill up</strong> all the Fields and Try Again." }';
    }
} else {
    echo '{ "alert": "error", "message": "An <strong>unexpected error</strong> occured. Please Try Again later." }';
}

?>

这需要这个autoload.php文件:

<?php
/**
 * PHPMailer SPL autoloader.
 * PHP Version 5
 * @package PHPMailer
 * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author Brent R. Matzelle (original founder)
 * @copyright 2012 - 2014 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @note This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

/**
 * PHPMailer SPL autoloader.
 * @param string $classname The name of the class to load
 */
function PHPMailerAutoload($classname)
{
    //Can't use __DIR__ as it's only in PHP 5.3+
    $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
    if (is_readable($filename)) {
        require $filename;
    }
}

if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
    //SPL autoloading was introduced in PHP 5.1.2
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
        spl_autoload_register('PHPMailerAutoload', true, true);
    } else {
        spl_autoload_register('PHPMailerAutoload');
    }
} else {
    /**
     * Fall back to traditional autoload for old PHP versions
     * @param string $classname The name of the class to load
     */
    function __autoload($classname)
    {
        PHPMailerAutoload($classname);
    }
}

编辑:看起来我必须在这里编辑/更改几行代码并输入更多数据。

  

如果您未从表单接收电子邮件,则可能是您的服务器配置不支持PHP mail()函数。但您可以使用SMTP身份验证。

所以我可以在$mail = new PHPMailer();下添加以下内容:

$mail->IsSMTP();
$mail->Host = "mail.yourdomain.com";
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->Port = 26;
$mail->Username = "yourname@yourdomain.com";
$mail->Password = "yourpassword";

现在给我一些问题。 mail中的mail.yourdomain.com是什么? cPanel的用户/通行证,我的电子邮件,是什么?

1 个答案:

答案 0 :(得分:0)

以下是我在Bluehost上设置的方法:

function mailerExpressBlueHost(array $mailInputs){

         require_once '../includes/phpmailer/PHPMailerAutoload.php';

         $mail = new PHPMailer();
         $mail->IsMail();

         $mail->SetFrom('skipper@yourdomain.com'); // make sure this is an andress 
                                                 // on your domain        
         $mail->IsHTML(true);
         $mail->addAddress($mailInputs['addAddress']);    
         $body = $mailInputs['body'] ;              
         $mail->isHTML(true);
         $mail->Subject = $mailInputs['subject'] ;
         $mail->Body    = $body;

         if(!$mail->send()) {
            return 'Message could not be sent.' . 'Mailer Error: ' . $mail->ErrorInfo;  
         } else {
            return 'Message has been sent';
         }

          $mail->ClearAddresses();
}