2010-03-05 38 views
6

Làm cách nào để bạn sử dụng chức năng đính kèm email?Mã Igniter -> đính kèm email

Tôi không thể xác định điều gì đang xảy ra, cos khi tôi đặt mã cho email-> đính kèm thư thoại đến trống (nội dung thư) và không có đính kèm.

Nếu tôi loại bỏ dòng mã, tất cả mọi thứ trở lại bình thường ..

cảm ơn bạn

điều khiển của tôi (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()); 
      } 

     } 

} 
?> 

quan điểm của tôi (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

Bạn cần phải làm rõ bạn là những gì chính xác cố gắng thực hiện, đính kèm tệp JPG/PDF, tệp có đang được người dùng tải lên không? Có trong thư mục như /home/bob/photo.jpg không? vv ... cần thêm thông tin chi tiết về người đàn ông .. – Jakub

+0

cũng thế, về cách đăng mã bạn có cho đến giờ để chúng tôi có thể thấy những gì bạn đang có khả năng làm sai. –

+0

Xin chào, tôi đã chỉnh sửa bài đăng của mình để rõ ràng hơn. Mục đích là bất kỳ người dùng nào cũng có thể gửi email cho tôi, nhưng bằng cách nào đó nội dung (mensagem) trống và không có tài liệu đính kèm – Davidslv

Trả lời

18

Bạn có thể không trực tiếp đính kèm một tập tin từ các lĩnh vực tải lên trong biểu mẫu tới email. Bạn chỉ có thể đính kèm tập tin vào email của bạn từ máy chủ của bạn, vì vậy bạn cần tải lên tệp từ biểu mẫu với thư viện tải lên CI: $ this-> upload-> do_upload() vào máy chủ của bạn vào một số thư mục. thư viện tải lên cần phải được định cấu hình, loại tệp nào được cho phép, v.v. nếu tải lên thành công, hàm do_upload trả về dữ liệu mở rộng về vị trí tệp được lưu trữ. bạn có thể sử dụng chỉ mục 'full_path' từ mảng để đính kèm tệp này vào email. sau đó gửi thư. sau đó bạn có thể xóa tệp khỏi máy chủ của mình. Dưới đây là một số đoạn mã có thể hữu ích.

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

Hy vọng điều này giúp ...

+0

Cảm ơn Richard, lời giải thích của bạn rất tốt. Cảm ơn bạn rất nhiều :) – Davidslv

2

$ this-> email-> attach()

Cho phép bạn gửi tệp đính kèm. Đặt đường dẫn/tên tệp trong tham số đầu tiên. Lưu ý: Sử dụng đường dẫn tệp, không phải URL. Đối với nhiều tệp đính kèm, hãy sử dụng hàm nhiều lần. Đối với dụ:

$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

Tôi đã đọc tài liệu, dễ thực hiện, nhưng khi bạn muốn người dùng gửi thư cho bạn, đó là một câu chuyện khác. – Davidslv

1

Đây là Tuyệt đối đúng mã hãy cố gắng

$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

Xin chào bạn bè Đoạn mã trên sẽ giải quyết vấn đề của bạn. Vấn đề tương tự cũng xảy ra với tôi. Điều này là vì tên tệp bạn đã lưu trong thư mục khác nhau khi bạn đạt mã trên sẽ giải quyết nó vì nó lấy đường dẫn chính xác của thư mục tải lên của bạn .. xin lưu ý rằng thư mục tải lên phải nằm trong thư mục gốc .... – Anju

1

bước 1: Bạn có thể không trực tiếp đính kèm một tập tin từ các lĩnh vực tải lên trong biểu mẫu tới một e-mail. Bạn chỉ có thể đính kèm tệp vào email của mình từ máy chủ, do đó bạn cần tải lên tệp từ biểu mẫu có thư viện tải lên CIs:

$this->upload->do_upload() vào máy chủ của bạn vào một số thư mục.

bước 2:

$file=upload file; 


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

bước 3: chỉ bao gồm

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

Đây là một bản cập nhật muộn, nhưng nó có thể có ích.
Người ta nói hai lần

"Bạn có thể không trực tiếp đính kèm một tập tin từ các lĩnh vực upload hình thức của bạn một email"

. Tuy nhiên, điều này hoạt động tốt trong CodeIgniter 3,0

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

(Mặc dù, các email không được gửi và không có lỗi được hiển thị, nếu có hai file có cùng tên)

Các vấn đề liên quan