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'] = "[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();

Ответ 1

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

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

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

    }

Ответ 2

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


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


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

Ответ 3

С 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 в системе/библиотеках/Электронная почта из

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

для изображения

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

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

Ответ 4

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

В окнах это похоже на

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

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

Ответ 5

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

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

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

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

Ответ 6

здесь я использую 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 = "[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!";
                }

Ответ 7

Есть ли какой-нибудь "Предельный размер", когда мы прикрепляем файл с помощью smtp gmail? Например, когда я прикрепляю файл размером менее 80 КБ, он работает, но при размере файла до 80 КБ вложение файла не отправляется, но электронное письмо все еще отправляется

Ответ 8

    <?php

  class Email extends CI_Controller
{
    public Function index();
{
  $config = Array(
          'protocol' => 'smtp',
          'smpt_host' => 'ssl://googlemail.com',
          'smtp_port' => 465,
          'smtp_user' => '[email protected]',
          'smtp_pass' => 'yourpass'
           );
 $this->load->library('email', $config);
 $this->email->set_newline("\r\n");

 $this->email->from('[email protected]');
 $this->email->to('[email protected]');
 $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());
}

}


 ?>