2010-03-05 3 views
6

Jak korzystać z funkcji e-mail-> załączania?Kod Zapalnik -> dołącz wiadomość e-mail

Nie mogę określić, co się dzieje, ponieważ po umieszczeniu kodu na adres e-mail-> załączyć komunikat jest pusty (treść wiadomości) i nie ma załącznika.

jeśli usunąć tę linię kodu, wszystko wróci do normy ..

dziękuję

mój kontroler (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()); 
      } 

     } 

} 
?> 

mój widok (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

Trzeba wyjaśnić, co dokładnie jesteś próbujesz załączyć plik JPG/PDF, czy plik jest przesyłany przez użytkownika? Czy znajduje się w katalogu takim jak /home/bob/photo.jpg? etc ... potrzebuję więcej szczegółów .. – Jakub

+0

również, jak o opublikowaniu kodu, który do tej pory widzieliśmy, co potencjalnie robi źle. –

+0

Witam, zredagowałem mój post, aby było bardziej zrozumiałe. Zamysłem jest, aby każdy użytkownik mógł wysłać mi e-mail, ale w jakiś sposób ciało (mensagem) jest puste i nie ma załącznika – Davidslv

Odpowiedz

18

Nie można bezpośrednio dołączyć plik z pola w formularzu wysyłania do wiadomości e-mail. Możesz dołączać pliki do wiadomości e-mail z serwera, więc musisz przesłać plik z formularza za pomocą biblioteki przesyłania CI: $ this-> upload-> do_upload() na twój serwer do jakiegoś katalogu. należy przesłać bibliotekę przesyłania, typy plików są dozwolone itd., jeśli przesyłanie zakończyło się powodzeniem, funkcja do_upload zwraca obszerne dane o tym, gdzie plik jest przechowywany. możesz użyć indeksu "pełna_ ścieżka" z tablicy, aby dołączyć ten plik do wiadomości e-mail. następnie wyślij wiadomość. po tym możesz usunąć plik z serwera. Oto kilka fragmentów kodu, które mogą pomóc.

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

Nadzieja to pomogło ...

+0

Dzięki Richard, twoje wyjaśnienie było bardzo dobre. Dziękuję bardzo :) – Davidslv

2

$ this-> email-> attach()

Umożliwia wysłanie załącznika. Umieść ścieżkę/nazwę pliku w pierwszym parametrze . Uwaga: Użyj ścieżki pliku, a nie adresu URL. W przypadku wielu załączników użyj funkcji . Dla przykład:

$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

Czytałem dokumentację, która jest łatwa do wykonania, ale gdy chce się, aby użytkownik wysłał do ciebie, to inna historia. – Davidslv

1

Jest absolutną rację kod Proszę Spróbuj

$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

Witam znajomy Powyższy kod rozwiąże Twój problem. Ten sam problem był również dla mnie. To dlatego, że nazwa pliku zapisanego w folderze jest inna, ponieważ podszedłeś do powyższego kodu rozwiążesz go, ponieważ weź poprawną ścieżkę do folderu uploadów ... zauważ, że folder uploadów powinien być w katalogu głównym .... – Anju

1

krok 1: Nie można bezpośrednio dołączyć plik z pola w formularzu wysyłania do e-mail. Możesz dołączać pliki do wiadomości e-mail z serwera, więc musisz przesłać plik z formularza za pomocą biblioteki przesyłania CI:

$this->upload->do_upload() na twój serwer w jakimś katalogu.

krok 2:

$file=upload file; 


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

krok 3: właśnie to

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

Ta aktualizacja jest późno, ale może to być przydatne.
Mówiło dwukrotnie

„Nie można bezpośrednio dołączyć plik z pola upload formularza do wiadomości e-mail”

. Jednak to działa dobrze w CodeIgniter 3,0

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

(chociaż, e-mail nie zostanie wysłana, a nie błędy są wyświetlane, jeśli istnieją dwa pliki o tej samej nazwie)