7 Stimmen

Code Igniter -> E-Mail anhängen

Wie verwenden Sie die Funktion E-Mail->Anhängen?

Ich kann nicht herausfinden, was passiert ist, denn wenn ich den Code für email->attach eingebe, kommt die Nachricht leer an (der Mailtext) und es gibt keinen Anhang.

Wenn ich diese Codezeile entferne, ist alles wieder normal.

Dankeschön

mein Controller (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() );
           }

      }

 }
?>

meine Ansicht (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 Stimmen

Sie müssen klären, was genau Sie zu tun versuchen, ein JPG/PDF anhängen, wird die Datei von einem Benutzer hochgeladen? Befindet sie sich in einem Verzeichnis wie /home/bob/photo.jpg? usw... Sie brauchen mehr Details.

0 Stimmen

Wie wäre es außerdem, wenn Sie den Code posten, den Sie bisher haben, damit wir sehen können, was Sie möglicherweise falsch machen.

0 Stimmen

Hallo, ich habe meinen Beitrag bearbeitet, um ihn deutlicher zu machen. Die Absicht ist, dass jeder Benutzer eine E-Mail an mich senden kann, aber irgendwie der Körper (mensagem) ist leer und es gibt keine Anlage

19voto

Richard Punkte 206

Sie können eine Datei aus dem Upload-Feld Ihres Formulars nicht direkt an eine E-Mail anhängen. Sie können nur Dateien von Ihrem Server an Ihre E-Mail anhängen, also müssen Sie die Datei aus dem Formular mit CIs Upload-Bibliothek hochladen: $this->upload->do_upload() auf Ihren Server in ein bestimmtes Verzeichnis. Die Upload-Bibliothek muss konfiguriert werden, welche Dateitypen erlaubt sind usw. Wenn der Upload erfolgreich war, gibt die do_upload-Funktion umfangreiche Daten darüber zurück, wo die Datei gespeichert ist. Sie können den 'full_path'-Index aus dem Array verwenden, um diese Datei an die E-Mail anzuhängen. Hier sind einige Codefragmente, die Ihnen helfen könnten.

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

Ich hoffe, das hat geholfen...

2voto

ssergei Punkte 1291

$this->email->attach()

Ermöglicht das Senden eines Anhangs. Geben Sie den Dateipfad/-namen in die erste Parameter ein. Hinweis: Verwenden Sie einen Dateipfad, keine eine URL. Für mehrere Anhänge verwenden Sie Sie die Funktion mehrmals. Für Beispiel:

$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 E-Mail Klasse

1voto

Anju Punkte 151

Dies ist der absolut richtige Code Bitte versuchen Sie

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

1voto

Minu Alex Punkte 107

Schritt 1: Sie können eine Datei nicht direkt über das Upload-Feld Ihres Formulars an eine E-Mail anhängen. Sie können Dateien nur von Ihrem Server aus an Ihre E-Mail anhängen, also müssen Sie die Datei aus dem Formular mit der CIs Upload-Bibliothek hochladen:

$this->upload->do_upload() auf Ihrem Server in ein Verzeichnis.

Schritt 2:

 $file=upload file;

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

Schritt 3: einfach einfügen

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

1voto

BtA_Mugen Punkte 26

Dies ist ein spätes Update, aber es könnte nützlich sein.
Es wurde zweimal gesagt

"Sie können eine Datei aus dem Upload-Feld Ihres Formulars nicht direkt an eine an eine E-Mail anhängen"

. Allerdings funktioniert dies gut in Codeigniter 3.0

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

(Allerdings wird die E-Mail nicht gesendet und es werden keine Fehler angezeigt, wenn es zwei Dateien mit demselben Namen gibt)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X