如何正确使用AWS SES作为联系人表格?

时间:2020-11-13 作者:Steve

总体目标:让我的联系方式将详细信息发送到我的个人电子邮件中

我想如何实现它不使用任何插件

问题:当我使用位于函数中的自定义PHPMailer函数时。php,控制台告诉我

发布http://websitename.test/wp-admin/admin-ajax.php 500(内部服务器错误)。。。。。。。。。。。。。。。。。。。。。。jquery。js?版本=1.12.4-wp:格式:4206

我正在使用Laragon作为本地服务器。每当我注释掉使用PHPMailer的自定义函数时,Laragon“;捕获量;电子邮件。但每当我重新添加自定义函数时,都会出现上面的错误。

以下是我的自定义PHPMailer函数:

add_action(\'phpmailer_init\', \'custom_mailer\');
/**
 * Overrides the default PHPMailer to use STMP with AWS SES
 * 
 */
function custom_mailer(PHPMailer $phpmailer) 
{
    $phpmailer->isSMTP();
    $phpmailer->SMTPAuth = true;        
    $phpmailer->Username = \'USERNAME\';
    $phpmailer->Password = \'PASSWORD\';
    $phpmailer->Host = \'email-smtp.ca-central-1.amazonaws.com\';
    $phpmailer->SetFrom(\'[email protected]\', \'FName LName\');
    $phpmailer->Port = 587;
    $phpmailer->SMTPSecure = \'tls\';
}
用户名、密码和SetFrom当然会在此处更改,以确保它们的安全。我向您保证,用户名和密码与AWS SES控制台中提供的凭据完全相同。

我的联系人表单中的jQuery是:

(function($){
    $(\'#enquiry\').submit( function(event) {
        event.preventDefault();

        var endpoint = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';
        var form = $(\'#enquiry\').serialize();

        var formData = new FormData;

        formData.append(\'action\', \'enquiry\');
        formData.append(\'nonce\', \'<?php echo wp_create_nonce(\'ajax-nonce\'); ?>\');
        formData.append(\'enquiry\', form);

        $.ajax(endpoint, {
            type: \'POST\',
            data: formData,
            processData: false,
            contentType: false,
        
            success: function() {
                $(\'#enquiry\').fadeOut(200);
                $(\'#success_message\').text(\'Thank you for your enquiry!\').show();
                $(\'#enquiry\').trigger(\'reset\');
            },

            error: function(error) {
                 alert(error.responseJSON);
                 $(\'#enquiry\').trigger(\'reset\');
            }
        });
    });
})(jQuery)
处理POST/AJAX的PHP代码是:

/** 
 * AJAX for Contact Us Form 
 * 
 * */
add_action(\'wp_ajax_enquiry\', \'enquiry_form\');
add_action(\'wp_ajax_nopriv_enquiry\', \'enquiry_form\');

/**
 * Enquiry Form Function
 */
function enquiry_form()
{
    if (!wp_verify_nonce($_POST[\'nonce\'], \'ajax-nonce\')){
        wp_send_json_error(\'Nonce is incorrect\', 401);
        die();
    }

    $formdata = [];

    wp_parse_str($_POST[\'enquiry\'], $formdata);

    // Admin Email
    $admin_email = get_option(\'admin_email\');

    // Email Headers
    $headers[] = \'Content-Type: text/html; charset=UTF-8\';
    $headers[] = \'From: websitename.com <\' . $admin_email . \'>\';
    $headers[] = \'Reply-to:\' . $formdata[\'email\'];
    
    // Who are we sending the email to?
    $send_to = $admin_email;

    // Subject
    $subject = "Enquiry from " . $formdata[\'fname\'] . " " . $formdata[\'lname\'];

    // Message
    $message = \'\';
    
    foreach ($formdata as $index => $field) {
        $message .= \'<strong>\' . $index . \'</strong>: \' . $field . \'<br/>\';
    }

    try {
        if (wp_mail($send_to, $subject, $message, $headers)) {
            wp_send_json_success(\'Email Sent!\');
        } else {
            wp_send_json_error(\'Email Error\');
        }
    } catch (Exception $error) {
        wp_send_json_error($error->getMessage());
    }
    wp_send_json_success($data);
}
请告知。

1 个回复
SO网友:Steve

主要问题不是服务器或后端的问题,而是函数本身的问题,主要是参数PHPMailer。

出于某种奇怪的原因,您需要使用PHPMailer/PHPMailer/PHPMaileruse PHPMailer/PHPMailer/PHPMailer 在函数的顶部。php文件。

相关推荐

找到2个ID不唯一的元素(#_ajax_nonce)和(#_wpnonce)

我正在从头开始开发自定义主题,创建自定义帖子类型,并在编辑自定义帖子类型时收到此警告。我还设计了带有两个输入字段的自定义元框,并在其中使用nonce。删除这些警告有什么帮助吗?下面是函数中自定义元框的代码。php//Custom Metabox function register_book_meta_box(){ add_meta_box(\'book_meta_box_id\', \'Book Detail\',\'design_book_meta_box\',\'bo