Code Igniter -> прикрепить письмо - PullRequest
6 голосов
/ 05 марта 2010

Как вы используете функцию электронной почты-> прикрепить?

Я не могу понять, что происходит, потому что, когда я вставляю код для электронной почты-> прикрепить сообщение пришло пустым (тело письма) и нет присоединения.

Если я удалю эту строку кода, все вернется в нормальное состояние.

спасибо

мой контроллер (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>

Ответы [ 5 ]

18 голосов
/ 02 сентября 2010

Вы не можете напрямую прикрепить файл из поля загрузки вашей формы к электронному письму. Вы можете прикреплять файлы к своей электронной почте только с вашего сервера, поэтому вам нужно выгрузить файл из формы с помощью библиотеки загрузки 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();
  ...
}
...

Надеюсь, это помогло ...

2 голосов
/ 05 марта 2010

$ 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

1 голос
/ 31 мая 2015

Это позднее обновление, но оно может быть полезно.
Было сказано дважды

"Вы не можете напрямую прикрепить файл из поля загрузки вашей формы на электронную почту "

. Тем не менее, это прекрасно работает в Codeigniter 3.0

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

(хотя письмо не отправляется и ошибки не отображаются, если есть два файла с одинаковым именем)

1 голос
/ 05 мая 2015

шаг 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();
1 голос
/ 23 августа 2012

Это абсолютно правильный код, пожалуйста, попробуйте

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...