2010-03-05 13 views
6

Wie verwenden Sie die E-Mail-> Attach-Funktion?Code Igniter -> E-Mail anhängen

Ich kann nicht herausfinden, was passiert, cos, wenn ich den Code für E-Mail-> fügen Sie die Nachricht kam in leer (der Mail-Körper) und es gibt keinen Anhang.

Wenn ich das Code-Zeile entfernen, alles normal zurückkommen ..

Sie danken

mein Controller (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()); 
      } 

     } 

} 
?> 

meiner Sicht (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

Sie müssen klären, was genau Sie sind versuchen, ein JPG/PDF anzuhängen, wird die Datei von einem Benutzer hochgeladen? Ist es in einem Verzeichnis wie /home/bob/photo.jpg? etc ... brauchen mehr Details man .. – Jakub

+0

auch, wie wäre es mit dem Posten Sie den Code haben Sie so weit, damit wir sehen können, was Sie möglicherweise falsch machen. –

+0

Hallo, ich habe meinen Beitrag bearbeitet, um klarer zu sein. Die Absicht ist, dass jeder Benutzer eine E-Mail an mich senden kann, aber irgendwie ist der Körper (mensagem) leer und es gibt keinen Anhang – Davidslv

Antwort

18

Sie können nicht direkt eine Datei aus dem Upload-Feld des Formulars an eine E-Mail anhängen. Sie können nur Dateien von Ihrem Server an Ihre E-Mail anhängen, also müssen Sie die Datei aus dem Formular mit CIs Upload-Bibliothek hochladen: $ this-> upload-> do_upload() auf Ihren Server in ein Verzeichnis. die Upload-Bibliothek muss konfiguriert werden, welche Dateitypen erlaubt sind usw. Wenn der Upload erfolgreich war, gibt die Funktion do_upload umfangreiche Daten darüber zurück, wo die Datei gespeichert ist. Sie können den Index 'full_path' aus dem Array verwenden, um diese Datei an die E-Mail anzuhängen. dann sende die Mail. Danach können Sie die Datei von Ihrem Server löschen. Hier sind einige Codefragmente, die helfen könnten.

$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(); 
    ... 
} 
... 

Hope this half ...

+0

Danke Richard, deine Erklärung war sehr gut. Vielen Dank :) – Davidslv

2

$ this-> email-> attach()

Ermöglicht das Senden eines Anhangs. Setzen Sie den Dateipfad/Name in den ersten Parameter. Hinweis: Verwenden Sie einen Dateipfad, nicht eine URL. Verwenden Sie für mehrere Anhänge die Funktion mehrmals. Für Beispiel:

$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

Ich habe die Dokumentation gelesen, das ist einfach zu tun, aber wenn Sie möchten, dass ein Benutzer sendet Mail an Sie, das ist eine andere Geschichte. – Davidslv

1

Dieser Absolut richtig Code Bitte versuchen

$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

Hallo Freund Der obige Code wird Ihr Problem lösen.Das gleiche Problem war für mich auch.dies ist, weil der Name der Datei, die Sie im Ordner gespeichert ist anders ist, wie Sie den obigen Code gelöst wird, weil es es lösen Nimm den korrekten Pfad deines Uploads-Ordners..pls beachte, dass der Upload-Ordner im root sein sollte .... – Anju

1

Schritt 1: Sie können nicht direkt eine Datei aus dem Upload-Feld des Formulars an eine anhängen Email. Sie können nur Dateien von Ihrem Server an Ihre E-Mail anhängen, so dass Sie die Datei aus dem Formular mit CIs Upload-Bibliothek hochladen müssen:

$this->upload->do_upload() zu Ihrem Server in ein Verzeichnis.

Schritt 2:

$file=upload file; 


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

Schritt 3: ist nur

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

Dies ist ein spätes Update, aber es könnte nützlich sein.
Es wurde gesagt, zweimal

„Sie können aus dem Upload-Feld des Formulars zu einer E-Mail nicht direkt eine Datei anhängen“. Allerdings funktioniert diese fein in Codeigniter 3,0

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

(Obwohl, wird die E-Mail nicht gesendet und keine Fehler angezeigt, wenn es zwei Dateien mit dem gleichen Namen) ist

Verwandte Themen