Codeigniter send email with attach file

前端 未结 8 1511
走了就别回头了
走了就别回头了 2020-11-30 05:15

I am trying to send email on codeigniter with attach file.

I always receive email successfully. However , I never receive with attach file. Below is code and highly

相关标签:
8条回答
  • 2020-11-30 05:38

    here i am using phpmailer to send mail
    here full code is mention below

    $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 = "YourAccountIdComesHere@gmail.com"; // SMTP account username
                    $mail->Password = "PasswordComesHere";// SMTP account password
                    $mail->SetFrom('SetFromId@gmail.com', 'From Name Here');
                    $mail->AddReplyTo("SetReplyTo@gmail.com", "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 ='WhomeToSendMailId@gmail.com';
                    $mail->AddAddress($address, "John Doe");
                    if (!$mail->Send()) {
                        echo "Mailer Error: " . $mail->ErrorInfo;
                    } else {
                        echo "Message sent!";
                    }
    
    0 讨论(0)
  • 2020-11-30 05:39

    Try putting the full path in $ci->email->attach();

    On windows this would like something like

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

    This method has worked well for me in the past.

    0 讨论(0)
  • 2020-11-30 05:41

    With Codeigniter 3.1.0 I had same problem. Seems that there is missing a "\r\n":

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

    should be:

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

    I changed line 725 in system/libraries/Email from

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

    to

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

    It works for me, but not the perfect fix.

    0 讨论(0)
  • 2020-11-30 05:45

    i have this problem before , the problem with the path file , so i change the path file to


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


    And it works fine with me

    0 讨论(0)
  • 2020-11-30 05:45
        <?php
    
      class Email extends CI_Controller
    {
        public Function index();
    {
      $config = Array(
              'protocol' => 'smtp',
              'smpt_host' => 'ssl://googlemail.com',
              'smtp_port' => 465,
              'smtp_user' => 'example@gmail.com',
              'smtp_pass' => 'yourpass'
               );
     $this->load->library('email', $config);
     $this->email->set_newline("\r\n");
    
     $this->email->from('example@gmail.com');
     $this->email->to('example@gmail.com');
     $this->email->subject('This is a test email sending');
     $this->email->message('This is some message, you can type your own');
    
     if($this->email->send()
    {
        echo "Your email has been sent";
    }else{
       show_error($this->email->print_debugger());
    }
    
    }
    
    
     ?>
    
    0 讨论(0)
  • 2020-11-30 05:48

    Here Is Full Source Code

        $validation_rules = array(
            array('field' => 'name', 'rules' => COMMON_RULES),
            array('field' => 'email', 'rules' => COMMON_RULES),
            array('field' => 'message', 'rules' => COMMON_RULES),
        );
    
        $this->validation_errors($validation_rules);
    
        $name = $this->input->post('name');
        $email = $this->input->post('email');
        $message = $this->input->post('message');
    
        $this->load->library('email');
    
        //upload file
        $attachment_file = "";
        if (!empty($_FILES) && isset($_FILES["attachment_file"])) {
    
            $image_name = $_FILES["attachment_file"]['name'];
    
            $ext = pathinfo($image_name, PATHINFO_EXTENSION);
    
            $new_name = time() . '_' . $this->get_random_string();
    
            $config['file_name'] = $new_name . $ext;
            $config['upload_path'] = "uploads/email/";
            $config['allowed_types'] = "*";
    
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
    
            if ($this->upload->do_upload('attachment_file')) {
    
                $finfo = $this->upload->data();
                $attachment_file = base_url() . 'uploads/email/' . $finfo['file_name'];
            } else {
    
                $error = $this->upload->display_errors();
                $this->msg = $error;
                $this->_sendResponse(5);
            }
        }
    
        $this->email->from($email, "$name")
                ->to("example@gmail.com")
                ->subject("FeedBack From $name")
                ->message($message)
                ->attach($attachment_file);
    
        if ($this->email->send()) {
    
            // temp pass updated.
            $this->msg = "Email send successfully.";
            $this->_sendResponse(1);
        } else {
    
            $this->msg = "Internal server error/Something went wrong.";
            $this->_sendResponse(0);
        }
    
    0 讨论(0)
提交回复
热议问题