发送电子邮件后删除附件文件



在一个更大的项目中,有一个上传 2 个文件的表单。我正在使用代码点火器作为框架。表单上传后,它应该将这两个文件作为电子邮件发送。

为了将其附加到电子邮件中,我们应该拥有该文件的本地副本。因此,我将文件移动到临时文件夹并使用 [session-id]_my_file_1 和 [session-id] 的命名约定_my_file_2

最后,在发送电子邮件后,我尝试删除这些临时文件。但是unlink并没有删除这些文件。我不知道这其中的原因。

我的猜测是:它可能仍在被 mail 命令用于上传/发送。以下是我编写的代码大纲。

            $config['upload_path']      = './tmp_holder/';
        $config['allowed_types']    = 'doc|docx|pdf|rtf';
        $config['max_size']         = '10240';
        $config['file_name']        = $this->session->userdata('session_id').'_1';
        $config['overwrite']        = TRUE;
        $config2['upload_path']     = './tmp_holder/';
        $config2['allowed_types']   = 'doc|docx|pdf|rtf';
        $config2['max_size']        = '10240';
        $config2['file_name']       = $this->session->userdata('session_id').'_2';
        $config2['overwrite']       = TRUE;
        $this->load->library('upload',$config);

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('init_app_form');
        }
        else
        {
            if($this->upload->do_upload('cvFile') === FALSE) {
                $this->load->view('init_app_form');
            }
            else {
                $file1Return = $this->upload->data();
                $this->upload->initialize($config2);
                if($this->upload->do_upload('researchFile') === FALSE) {
                    $this->load->view('init_app_form');
                }
                else {
                    //process data here
                    $file2Return = $this->upload->data();
                    $this->config->load('email');
                    $this->email->initialize($this->config->item('email_conf'));

                    $this->email->from($this->config->item('email_from'), $this->input->post('tname').' '.$this->input->post('fname').' '.$this->input->post('lname'));
                    $this->email->to($this->config->item('email_to'));
                    $this->email->subject('something');
                    $this->email->message('something'); 
                    $this->email->attach($file1Return['full_path']);
                    $this->email->attach($file2Return['full_path']);
                    if( $this->email->send() == false ) {
                        //error
                        echo $this->email->print_debugger(); exit;
                    }
                    $this->email->clear();
                                    ////////////////////////////////
                    @unlink($this->session->userdata('session_id').'_2');
                                    ////////////////////////////////
                    $this->load->view('init_app_success');
                }
                                   ////////////////////////////////
                @unlink($this->session->userdata('session_id').'_1');
                                   ////////////////////////////////
            }
        }

我所做的解决方案是在执行此操作之前删除临时文件夹中的文件,以便清除以前的文件。但这不是一个干净的方法,对吧?这是因为:

  1. 它可能正在尝试删除其他并行实例当前正在使用的其他文件
  2. 我希望 tmp 文件夹在我发送后为空。

最好使用代码点火器中的file_helper。

$this->load->helper("file");
delete_files($this->session->userdata('session_id').'_1');

这是这方面的文档

相关内容

  • 没有找到相关文章

最新更新