2010-03-05 16 views
6

¿Cómo se usa la función correo electrónico-> adjuntar?Código Ignitor -> adjuntar correo electrónico

No puedo entender lo que sucede, porque cuando puse el código para correo electrónico-> adjuntar el mensaje vino en blanco (el cuerpo del correo) y no hay adjunto.

Si quito esa línea de código, todo lo que vuelven a la normalidad ..

gracias

mi controlador (sendmail.php)

<?php 

class Sendmail extends Controller { 

     function __construct() { 
      parent::Controller(); 
      $this->load->library('email'); 
      $this->load->helper('url'); 
      $this->load->helper('form'); 
      $this->load->library('validation'); 
     } 

     function index() { 

      $info = array (
       'nome' => $this->input->post('nome'), 
       'mail' => $this->input->post('email'), 
       'motivo' => $this->input->post('motivo'), 
       'mensagem' => $this->input->post('mensagem'), 
       'anexo' => $this->input->post('upload'), 
      ); 

      $this->load->library('email'); 
      $this->email->set_newline('\r\n'); 

      $this->email->clear(); 
      $this->email->from($info['mail'], $info['nome']); 
      $this->email->to('[email protected]'); 
    /* $this->email->cc(''); # não é preciso */ 
      $this->email->subject($info['motivo']); 
      $this->email->message($info['mensagem']); 
      $this->email->attach($info['anexo']); 

      if ($this->email->send()) { 
       echo 'sent'; 
      } 

      else { 
      $this->load->view('formulario'); 
    # show_error($this->email->print_debugger()); 
      } 

     } 

} 
?> 

mi punto de vista (formulario.php)

<?php 
    echo form_open_multipart('davidslv/index.php/sendmail'); 
?> 
      <label for="nome">nome</label> 
      <input type="text" name="nome" id="nome" required /> 

      <label for="email">email</label> 
      <input type="text" name="email" id="email" required /> 

      <label for="assunto">assunto</label> 
      <select name="motivo"> 
       <option value="motivo1">motivo1</option> 
       <option value="motivo2">motivo2</option> 
       <option value="motivo3">motivo3</option> 
      </select> 

      <p> <label for="mensagem">mensagem</label> 
      <textarea name="mensagem" id="mensagem" rows="8" cols="30" required></textarea> 
      </p> 

      <label for="upload">documento</label> 
      <input type="file" id="upload" name="upload" size="18"/> 
      <input type="submit" id="enviar" name="enviar" value="Enviar!" /> 

    </form> 
+0

Es necesario aclarar qué es exactamente lo que está tratando de hacer, adjuntar un archivo JPG/PDF, ¿el archivo está siendo cargado por un usuario? ¿Está en un directorio como /home/bob/photo.jpg? etc ... necesita más detalles hombre ... – Jakub

+0

también, ¿qué le parece publicar el código que tiene hasta ahora para que podamos ver lo que está haciendo potencialmente mal. –

+0

Hola, he editado mi publicación para ser más claro. La intención es que cualquier usuario me envíe un correo electrónico, pero de alguna manera el cuerpo (mensagem) está en blanco y no hay datos adjuntos – Davidslv

Respuesta

18

No se puede adjuntar un archivo directamente desde el campo de subida de su forma a un correo electrónico. Solo puede adjuntar archivos a su correo electrónico desde su servidor, por lo que debe cargar el archivo desde el formulario con la biblioteca de carga de CI: $ this-> upload-> do_upload() a su servidor en algún directorio. la biblioteca de carga debe ser configurada, qué tipos de archivos están permitidos, etc. si la carga fue exitosa, la función do_upload devuelve datos extensos sobre dónde se almacena el archivo. puede usar el índice 'full_path' de la matriz para adjuntar este archivo al correo electrónico. luego envía el correo después de eso, puede eliminar el archivo de su servidor. Aquí hay algunos fragmentos de código que pueden ser útiles.

$this->load->library('upload'); 

if($_FILES['upload']['size'] > 0) { // upload is the name of the file field in the form 

$aConfig['upload_path']  = '/someUploadDir/'; 
$aConfig['allowed_types'] = 'doc|docx|pdf|jpg|png'; 
$aConfig['max_size']  = '3000'; 
$aConfig['max_width']  = '1280'; 
$aConfig['max_height']  = '1024'; 

$this->upload->initialize($aConfig); 

    if($this->upload->do_upload('upload')) 
    { 
    $ret = $this->upload->data(); 
    } else { 
    ... 
    } 

    $pathToUploadedFile = $ret['full_path']; 
    $this->email->attach($pathToUploadedFile); 
    ... 
    $this->email->send(); 
    ... 
} 
... 

Espero que esto ayudó ...

+0

Gracias Richard, tu explicación fue muy buena. Muchas gracias :) – Davidslv

2

$ this-> email-> attach()

Le permite enviar un archivo adjunto. Ponga la ruta/nombre del archivo en el primer parámetro . Nota: Use una ruta de archivo, no una URL. Para archivos adjuntos múltiples, use la función varias veces. Por ejemplo :

$this->email->attach('/path/to/photo1.jpg'); 
$this->email->attach('/path/to/photo2.jpg'); 
$this->email->attach('/path/to/photo3.jpg'); 

$this->email->send(); 

Codeigniter Email Class

+0

He leído la documentación, eso es fácil de hacer, pero cuando quieres que un usuario envíe un correo para usted, esa es una historia diferente. – Davidslv

1

Esto es absolutamente correcto código favor Trate

$config['upload_path'] = './uploads'; 
$config['allowed_types'] = 'gif|jpg|jpeg|png|txt|php|pdf'; 
$config['max_size']   = '9000'; 
$config['encrypt_name']  = true; 

$image_data = $this->upload->data(); 
$fname=$image_data[file_name]; 
$fpath=$image_data[file_path].$fname; 

$this->email->attach($fpath); 
+1

Hola amigo El código anterior resolverá tu problema. El mismo problema fue para mí también. Esto se debe a que el nombre del archivo que guardaste en la carpeta es diferente ya que el código anterior lo resolverá porque tome la ruta correcta de su carpeta de archivos ... tenga en cuenta que la carpeta de archivos subidos debe estar en la raíz .... – Anju

1

paso 1: No se puede adjuntar un archivo directamente desde el campo de subida de su forma a una correo electrónico. Solo puede adjuntar archivos a su correo electrónico desde su servidor, por lo que debe cargar el archivo desde el formulario con la biblioteca de carga de CI:

$this->upload->do_upload() a su directorio.

paso 2:

$file=upload file; 


$file_path='uploaded directory on your server(eg:uploads/career)'.$file; 

paso 3: basta con incluir

$this->email->attach($file_path); 
$this->email->send(); 
1

Ésta es una actualización de tarde, pero que podría ser útil.
Fue dicho dos veces

"No se puede adjuntar un archivo directamente desde el campo de subida de su forma a un correo electrónico"

. Sin embargo, esto funciona bien en CodeIgniter 3,0

foreach ($_FILES as $key => $file) 
{ 
    if ($file['error'] == 0) 
    { 
     $this->email->attach($file['tmp_name'], '', $file['name']); 
    } 
} 

(Aunque, el correo electrónico no se envía y se muestra ningún error, si hay dos archivos con el mismo nombre)

Cuestiones relacionadas