Вложение электронной почты Codeigniter 3 из формы

У меня есть консультационный контроллер, где пользователи могут загружать свое резюме.

public function consultancy($page = 'consultancy') {
  if (! file_exists(APPPATH.'views/pages'.$page.'.php'))
  {
    show_404();
  }
  $data['title'] = ucfirst($page);


  $this->load->view('templates/header', $data);
  $this->load->view('pages/'.$page, $data);
  $this->load->view('templates/footer', $data);
}

вид

<form enctype="multipart/form-data" style="text-align:left;font-size:12px;" action="<?php echo base_url(); ?>postconEmail/"method="POST">

               Name <input class="form-control" id="id_name" name="name" type="text" required />
               Phone <input class="form-control" id="id_phone" name="phone" type="text" required />
               From email <input class="form-control" id="id_from_email" name="from_email" type="email" required />
               Subject <input class="form-control" id="id_subject" name="subject" type="text" required />
               Message <textarea class="form-control" cols="40" id="id_message" name="message" rows="10" required></textarea>
            <br>
            <label for="id_resume" class="custom-file-upload"><i class="fa fa-cloud-upload"></i> Resume Upload</label>
            <input class="custom-file-upload" id="filename" type="text" size="35" placeholder="Upload Your Resume"/>
            <input class="btn btn-primary form-control test" id="id_resume" name="resume" type="file" />
               <div class="form-group">
            <button style="float:right;display: inline;" type="submit" class="btn btn-primary">
                <span class="glyphicon glyphicon-star"></span> Submit
              </button> </div>
        </form>

и форма почтового контроллера электронной почты, где выполняется отправка почты

public function postconEmail(){

  $data = $this->input->post();
  $this->load->library('email');
  $config = array();
    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'mail.example.com';
    $config['smtp_user'] = '[email protected]';
    $config['smtp_pass'] = 'password';
    $config['smtp_port'] = 'xxx';
    $this->email->initialize($config);

    $this->email->set_newline("\r\n");

    $this->email->from($data['from_email']);
    $this->email->to('[email protected]');
    $this->email->subject($data['subject']);
    $this->email->message($data['message']);
    $this->email->attach($data['resume']);
    if ($this->email->send()) {
      $this->session->set_flashdata('success','Email Sent');
      redirect(base_url());
    } else{
      show_error($this->email->print_debugger());
    }
  }

Почта проходит, но к письму, которое я получаю, не прикреплен файл.

Я искал Google, но не могу получить какие-либо сообщения по этому вопросу.

И кроме того, я новичок в php и Codeigniter 3, любая помощь приветствуется.


person Pratirup Mukherjee    schedule 11.04.2017    source источник
comment
Пожалуйста, добавьте файл представления, который имеет form_open и действие, перейдите к postconEmail()   -  person ImBhavin95    schedule 11.04.2017
comment
обновлен @ImBS95   -  person Pratirup Mukherjee    schedule 11.04.2017


Ответы (1)


Вы должны добавить путь к файлу вложения в аргументе вложения

Замените свой почтовый контроллер электронной почты, как показано ниже.

public function postconEmail(){
    $data = $this->input->post();
    $this->load->library('email');
    $config = array();
    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'mail.example.com';
    $config['smtp_user'] = '[email protected]';
    $config['smtp_pass'] = 'password';
    $config['smtp_port'] = 'xxx';
    $this->email->initialize($config);

    $this->email->set_newline("\r\n");

    $this->email->from($data['from_email']);
    $this->email->to('[email protected]');
    $this->email->subject($data['subject']);
    $this->email->message($data['message']);

    $resume_tmp_path = $_FILES['resume']['tmp_name'].'/'.$_FILES['resume']['name'];

    $this->email->attach($resume_tmp_path);
    if ($this->email->send()) {
      $this->session->set_flashdata('success','Email Sent');
      redirect(base_url());
    } else{
      show_error($this->email->print_debugger());
    }
  }

Если это не работает, вы обращаетесь к этому вопросу, в нем говорится, что вы не можете прикрепить файл без загрузки своего сервера, поэтому сначала вам нужно загрузить файл на свой сервер, а затем передать $this->email->attach(youy file path);, чтобы ваш код определенно работал.

Обратитесь к этому вопросу: https://stackoverflow.com/a/3628203/3377733

person ImBhavin95    schedule 11.04.2017
comment
Большое спасибо, это сработало как шарм ... но единственная проблема в том, что загруженный файл, который я получаю, находится в расширении .tmp. Есть ли решение для этого? - person Pratirup Mukherjee; 11.04.2017
comment
я обновляю свой код, вы можете передать свое имя файла после tmp_name, тогда все в порядке, и если не работает, загрузите свой файл, получите путь и отправьте по почте. Ура! - person ImBhavin95; 11.04.2017