代码点火器 - >附上电子邮件

时间:2010-03-05 00:09:27

标签: php email codeigniter

您如何使用email->附加功能?

我无法想象发生了什么,因为当我把电子邮件的代码放在一起时 - >附加消息来自空白(邮件正文)并且没有附加。

如果我删除该代码行,一切都恢复正常..

谢谢

我的控制器(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>

4 个答案:

答案 0 :(得分:18)

您无法直接将表单上传字段中的文件附加到电子邮件中。您只能从服务器将文件附加到您的电子邮件中,因此您需要将带有CI上传库的表单上的文件:$ this-&gt; upload-&gt; 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();
  ...
}
...

希望这有助于......

答案 1 :(得分:2)

  

$这 - &GT;的电子邮件 - &GT;附加()

     

允许您发送附件。放   第一个文件路径/名称   参数。注意:不使用文件路径   一个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 Email Class

答案 2 :(得分:1)

这是绝对正确的代码请尝试

$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);

答案 3 :(得分:1)

这是一个延迟更新,但它可能很有用。
有人说过两次

  

&#34;您无法直接从表单的上传字段附加文件   发送电子邮件&#34;

。但是,这在Codeigniter 3.0中运行良好

CASE

(但是,如果有两个同名文件,则不会发送电子邮件,也不会显示错误)