Codeigniter отправляет электронное письмо с прикрепленным файлом

Я пытаюсь отправить электронное письмо на codeigniter с прикрепленным файлом.

Я всегда получаю электронную почту успешно. Однако я никогда не получаю с прикрепленным файлом. Ниже приведен код и высоко оценен для всех комментариев.

$ci = get_instance(); $ci->load->library('email'); $config['protocol'] = "smtp"; $config['smtp_host'] = "ssl://smtp.gmail.com"; $config['smtp_port'] = "465"; $config['smtp_user'] = "test@gmail.com"; $config['smtp_pass'] = "test"; $config['charset'] = "utf-8"; $config['mailtype'] = "html"; $config['newline'] = "\r\n"; $ci->email->initialize($config); $ci->email->from('test@test.com', 'Test Email'); $list = array('test2@gmail.com'); $ci->email->to($list); $this->email->reply_to('my-email@gmail.com', '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(); 

Solutions Collecting From Web of "Codeigniter отправляет электронное письмо с прикрепленным файлом"

$ this-> email-> присоединять ()

Позволяет отправлять вложение. Поместите путь / имя файла в первый параметр. Примечание. Используйте путь к файлу, а не URL-адрес. Для нескольких приложений используется функция несколько раз. Например:

 public function setemail() { $email="xyz@gmail.com"; $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' => 'abc@gmail.com', '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('abc@gmail.com'); $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()); } } при public function setemail() { $email="xyz@gmail.com"; $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' => 'abc@gmail.com', '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('abc@gmail.com'); $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()); } } 

У меня есть эта проблема раньше, проблема с файлом пути, поэтому я меняю файл пути на


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


И он отлично работает со мной

Попробуйте поместить полный путь в $ ci-> email-> attach ();

В окнах это похоже на что-то вроде

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

Этот метод хорошо работал для меня в прошлом.

С Codeigniter 3.1.0 у меня была такая же проблема. Кажется, отсутствует «\ r \ n»:

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

должно быть:

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

Я изменил строку 725 в системе / library / Email из

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

в

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

Это работает для меня, но не идеальное решение.

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

использовать помощник пути

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

по электронной почте

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

здесь я использую phpmailer для отправки почты
здесь полный код упоминается ниже

 $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!"; }