Как вы используете функцию email-> attach?
Я не могу понять, что происходит, потому что, когда я помещаю код для электронной почты -> прикрепите mesage, он пуст (тело письма), и нет прикрепленного файла.
Если я удалю эту строку кода, все вернется к нормальному состоянию.
Спасибо
мой контроллер (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('example@mai.com'); /* $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() ); } } } ?>
мой взгляд (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>
Вы не можете напрямую прикреплять файл из поля загрузки формы к электронному письму. Вы можете прикреплять файлы только к своей электронной почте с вашего сервера, поэтому вам нужно загрузить файл из формы с помощью библиотеки загрузки CI: $ this-> upload-> do_upload () на ваш сервер в какой-то каталог. необходимо настроить библиотеку загрузки, какие типы файлов разрешены и т. д., если загрузка была успешной, функция do_upload возвращает обширные данные о том, где хранится файл. вы можете использовать индекс «full_path» из массива, чтобы прикрепить этот файл к письму. затем отправьте почту. после этого вы можете удалить файл с вашего сервера. Вот некоторые фрагменты кода, которые могут помочь.
$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(); ... } ...
Надеюсь, это помогло …
$ This-> email-> присоединять ()
Позволяет отправлять вложение. Поместите путь / имя файла в первый параметр. Примечание. Используйте путь к файлу, а не URL-адрес. Для нескольких приложений используется функция несколько раз. Например:
$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
Это абсолютно правильный код Пожалуйста, попробуйте
$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: вы не можете напрямую прикреплять файл из поля для загрузки формы к электронному письму. Вы можете прикреплять файлы только к своей электронной почте с вашего сервера, поэтому вам нужно загрузить файл из формы с помощью библиотеки загрузки CI:
$this->upload->do_upload()
на ваш сервер в какой-то каталог.
шаг 2:
$file=upload file; $file_path='uploaded directory on your server(eg:uploads/career)'.$file;
Шаг 3: просто включите
$this->email->attach($file_path); $this->email->send();
Это последнее обновление, но это может быть полезно.
Было сказано дважды
«Вы не можете напрямую прикреплять файл из поля для загрузки формы к электронному письму»
, Однако это отлично работает в Codeigniter 3.0
foreach ($_FILES as $key => $file) { if ($file['error'] == 0) { $this->email->attach($file['tmp_name'], '', $file['name']); } }
(Хотя, письмо не отправлено и не отображаются ошибки, если есть два файла с тем же именем)