web-dev-qa-db-fra.com

Codeigniter envoyer un email avec un fichier joint

J'essaie d'envoyer un email sur codeigniter avec un fichier joint.

Je reçois toujours un email avec succès. Cependant, je ne reçois jamais avec un fichier joint. Le code ci-dessous est très apprécié pour tous les commentaires.

    $ci = get_instance();
    $ci->load->library('email');
    $config['protocol'] = "smtp";
    $config['smtp_Host'] = "ssl://smtp.gmail.com";
    $config['smtp_port'] = "465";
    $config['smtp_user'] = "[email protected]";
    $config['smtp_pass'] = "test";
    $config['charset'] = "utf-8";
    $config['mailtype'] = "html";
    $config['newline'] = "\r\n";

    $ci->email->initialize($config);

    $ci->email->from('[email protected]', 'Test Email');
    $list = array('[email protected]');
    $ci->email->to($list);
    $this->email->reply_to('[email protected]', 'Explendid Videos');
    $ci->email->subject('This is an email test');
    $ci->email->message('It is working. Great!');

    $ci->email->attach( '/test/myfile.pdf');
    $ci->email->send();
8
mgphyo zaw

$ this-> email-> attach ()

Vous permet d'envoyer une pièce jointe. Placez le chemin/nom du fichier dans le premier paramètre. Remarque: utilisez un chemin de fichier, pas une URL. Pour plusieurs pièces jointes, utilisez la fonction plusieurs fois. Par exemple:

public function setemail()
{
$email="[email protected]";
$subject="some text";
$message="some text";
$this->sendEmail($email,$subject,$message);
}
public function sendEmail($email,$subject,$message)
    {

    $config = Array(
      'protocol' => 'smtp',
      'smtp_Host' => 'ssl://smtp.googlemail.com',
      'smtp_port' => 465,
      'smtp_user' => '[email protected]', 
      'smtp_pass' => 'passwrd', 
      'mailtype' => 'html',
      'charset' => 'iso-8859-1',
      'wordwrap' => TRUE
    );


          $this->load->library('email', $config);
          $this->email->set_newline("\r\n");
          $this->email->from('[email protected]');
          $this->email->to($email);
          $this->email->subject($subject);
          $this->email->message($message);
            $this->email->attach('C:\Users\xyz\Desktop\images\abc.png');
          if($this->email->send())
         {
          echo 'Email send.';
         }
         else
        {
         show_error($this->email->print_debugger());
        }

    }
18
Nitheesh K P

Avec Codeigniter 3.1.0, j'ai eu le même problème. Il semble qu'il manque un "\ r\n":

Content-Type: application/pdf; name="test.pdf"<br>
Content-Disposition: attachment;<br>
Content-Transfer-Encoding: base64<br>
JVBERi0xLjYNJeLjz9MNCjQzNyAwIG9iag08PC9MaW5lYXJpemVkIDEvTCA3OTUyMTYvTyA0Mzkv<br>
RSA2ODEwODcvTiA0L1QgNzk0ODA3L0ggWyA1NjQgMjYxXT4+DWVuZG9iag0gICAgICAgICAgICAg<br>

devrait être:

Content-Type: application/pdf; name="test.pdf"<br>
Content-Disposition: attachment;<br>
Content-Transfer-Encoding: base64<br>
<br>
JVBERi0xLjYNJeLjz9MNCjQzNyAwIG9iag08PC9MaW5lYXJpemVkIDEvTCA3OTUyMTYvTyA0Mzkv<br>
RSA2ODEwODcvTiA0L1QgNzk0ODA3L0ggWyA1NjQgMjYxXT4+DWVuZG9iag0gICAgICAgICAgICAg<br>

J'ai changé la ligne 725 dans system/libraries/Email from

 'content'       => chunk_split(base64_encode($file_content)),<br>

à

'content'       => "\r\n" . chunk_split(base64_encode($file_content)),<br>

Cela fonctionne pour moi, mais pas la solution parfaite.

3
Torsten Arendrup

j'ai ce problème avant, le problème avec le fichier de chemin, alors je change le fichier de chemin en 


$attched_file= $_SERVER["DOCUMENT_ROOT"]."/uploads/".$file_name; $this->email->attach($attched_file);


Et ça marche bien avec moi

3
Ahmed Al Bermawy

Essayez de mettre le chemin complet dans $ ci-> email-> attach ();

Sur les fenêtres cela voudrait quelque chose comme

$ci->email->attach('d:/www/website/test/myfile.pdf');

Cette méthode a bien fonctionné pour moi par le passé.

2
dangermark

ici j'utilise phpmailer pour envoyer des mails
ici le code complet est mentionné ci-dessous 

$this->load->library('My_phpmailer');
                $mail = new PHPMailer();
                $mailBody = "test mail comes here2";
                $body = $mailBody;
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->Host = "ssl://smtp.gmail.com"; // SMTP server
                $mail->SMTPDebug = 1;// enables SMTP debug information (for testing)
                // 1 = errors and messages
                // 2 = messages only
                $mail->SMTPAuth = true;// enable SMTP authentication
                $mail->Host = "ssl://smtp.gmail.com"; // sets the SMTP server
                $mail->Port = 465;// set the SMTP port for the GMAIL server
                $mail->Username = "[email protected]"; // SMTP account username
                $mail->Password = "PasswordComesHere";// SMTP account password
                $mail->SetFrom('[email protected]', 'From Name Here');
                $mail->AddReplyTo("[email protected]", "Reply To Name Here");
                $mail->Subject = "Mail send by php mailer";
                $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
                $mail->MsgHTML($body);
                $mail->AddAttachment($cdnStorage . '/' . $fileName);
                $address ='[email protected]';
                $mail->AddAddress($address, "John Doe");
                if (!$mail->Send()) {
                    echo "Mailer Error: " . $mail->ErrorInfo;
                } else {
                    echo "Message sent!";
                }
0
Amit Joshi

utiliser assistant de chemin

$this->load->helper('path');
$path = set_realpath('./images/');

sur la ligne de courrier électronique

$this->email->attach($path . $your_file);
0
topimiring