表单提交中的电子邮件附件

时间:2018-06-29 作者:Faceless

我现在遇到了一个非常奇怪的问题。

借助现有的两个wordpress函数(wp\\u handle\\u upload和wp\\u mail)和一个使用一些自定义ajax功能来处理我的数据的表单,我正在尝试将数据发送到我的电子邮件地址。这包括一些文本输入和一个文件。

我的大部分努力似乎都很顺利(数据是从我的表单发送的,它是在我的php文件中接收的等),但是wp\\U handle\\U upload在收到我的$\\U文件数据时从不返回任何东西。调试支持我的假设,因为每当我直接使用我的$\\u文件数据时,我的文件都会正确发送/附加到我的邮件中(无需先将其馈送给wp\\u handle\\u upload)。

当然,这里的问题是,我将处理临时提交数据,并且永远不会收到处于正确状态的文件(例如:其名称是临时名称,不包括其文件结尾等)。因此,这显然不是我问题的解决方案,但是,无论何时使用wp\\u handle\\u upload,它都会向我提供一些信息,说明出现了问题。

我的猜测是,该函数中可能有一些安全检查,我的表单数据无法通过,因此它将始终返回NULL。使用当前的实现,我将始终收到一封没有任何附件的邮件。

我一直在看很多已经贴出的问题,并相应地调整了我的解决方案,但遗憾的是没有任何效果。提前非常感谢您,祝您今天愉快。

下面的代码稍加修改(更改了名称,删除了if语句等),以避免我的文章过于混乱。不过,一切都应该正常运行。

JS文件(包含在页面加载中):

jQuery(function($){

$(document).ready(function(){
    register.init();
});

var register= {

    init : function(){
        this.createEvents();
    },

    createEvents : function(){

        var t = this;          
        $( "form" ).submit(function() {
            t.submitForm($(this));
        });
    },

    submitForm: function(clicked){

        var data = new FormData();

        data.append(\'action\', \'register_form\');             
        data.append(\'firstname\', $(\'#firstname\').val());
        data.append(\'lastname\', $(\'#lastname\').val());
        data.append(\'email\', $(\'#email\').val());
        data.append(\'attachmentFile\', $(\'#attachmentFile\')[0].files[0] );       

        jQuery.ajax({
        url : registerFormAjax.ajaxurl,
        type: \'POST\',
        data : data,
        cache: false,
        processData: false, 
        contentType: false 
    });          
    } 

};

});
PHP文件(自定义插件):

add_action( \'wp_ajax_register_form\', \'register_form\' );
add_action( \'wp_ajax_nopriv_register_form\', \'register_form\' ); 
function register_form()
{   
    $kv_errors= array();
    if(\'POST\' == $_SERVER[\'REQUEST_METHOD\'])  {
        $fields = array(\'firstname\', \'lastname\', \'email\');      
        foreach ($fields as $field) {
            if (isset($_POST[$field])) $posted[$field] = 
               stripslashes(trim($_POST[$field])); else $posted[$field] = \'\';
        }
        if ( ! function_exists( \'wp_handle_upload\' ) ) {
            require_once( ABSPATH . \'wp-admin/includes/file.php\' );
        }

        if(isset($_FILES[\'attachmentFile\'])) 
        {       
            $uploadedfile = $_FILES[\'attachmentFile\'];
            $upload_overrides = array( \'test_form\' => false );                  
            $movefile = wp_handle_upload( $uploadedfile, $upload_overrides );


            $attachment = $movefile[\'file\'];
            $headers = \'From: \'.$posted[\'firstname\']. \' \' . $posted[\'lastname\'].\' <\'.$posted[\'email\'].\'>\' . "\\r\\n";
            wp_mail(\'[email protected]\', \'Subject\' , "Test", $headers, $attachment);
            unlink( $movefile[\'file\'] );

        }
    }

wp_die();
}
编辑:

好吧我似乎已经找到了我真正的问题。希望很快就能找到解决方案。由于某些原因,我的覆盖无法正常工作。这意味着甚至可以像这样停用表单检查

$upload_overrides = array( \'test_form\' => false );
不会跳过在wordpress功能中完成的以下测试(wp\\u handle\\u upload)

// A correct form post will pass this test.
if ( $test_form && ( ! isset( $_POST[\'action\'] ) || ( $_POST[\'action\'] != $action ) ) ) {
    return call_user_func_array( $upload_error_handler, array( &$file, __( \'Invalid form submission.\' ) ) );
}

1 个回复
最合适的回答,由SO网友:Faceless 整理而成

好吧,所以我现在觉得自己很笨,特别是因为我在这里发布问题后就找到了自己问题的解决方案,而且还因为如果我正确调试我的页面(实现了查看返回错误代码的方法),我会更早地找到它。

无论如何。。。

正如我在上面的编辑中所述:尽管我重写了表单测试,但它们仍在执行中。我仍然不知道为什么发布的解决方案不起作用,因为它直接取自文档,但我找到了一个“解决方法”。

在我的函数调用中创建重写数组的工作方式与我预期的一样:

$movefile = wp_handle_upload( $uploadedfile, array( \'test_form\' => false ) );
对不起,伙计们。调试愉快!

结束

相关推荐

如何从wp-Content/Uploads中删除所需图像大小?

WordPress博客中的默认媒体设置为150x150, 300x300, 1024x1024 分别用于thumbnail, medium, large 图像。现在我正在设计一个主题,需要不同大小的缩略图来显示在主题中。为此,我再次转到媒体设置,并使用我的新闻大小更改设置,如72x72, 250x250, 400x400 分别用于thumbnail, medium, large 图像。但现在要调整旧上传图像的大小,我使用Regenerate Thumbnails WordPress插件,可以轻松生成我的新