11 Pertanyaan: CodeIgniter tidak dapat mengirim email menggunakan surat PHP ()

pertanyaan dibuat di Mon, Oct 4, 2010 12:00 AM

Saya mencoba mengirim email dengan Codeigniter seperti ini:

 
$this->load->library('email');

$this->email->from("myemail@email.com");
$this->email->reply_to("myemail@email.com");
$this->email->to("myemail@email.com");
$this->email->subject("Test mail");
$this->email->message("Email body");
$this->email->set_alt_message("Email body txt");
$this->email->send();

dan saya mendapatkannya di debugger email: Tidak dapat mengirim email menggunakan surat PHP (). Server Anda mungkin tidak dikonfigurasikan untuk mengirim email menggunakan metode ini.

Jika saya melakukan e-mail PHP sederhana () berfungsi dengan alamat yang sama, itu berfungsi tetapi ketika saya menggunakan CodeIgniter itu memberi saya kesalahan. Jadi mengapa ini bekerja dengan mail sederhana () tetapi tidak dengan CodeIgniter? Ada ide?

Terima kasih.

    
17
  1. protokol mana yang Anda gunakan?
    2010-10-09 15: 56: 08Z
  2. var $protocol = "mail";
    2010-10-11 13: 46: 16Z
  3. Referensi di Formulir PHP mail () tidak menyelesaikan pengiriman email umumnya juga berlaku untuk pembungkus CodeIgniter.
    2017-11-04 22: 07: 30Z
11 Jawaban                              11                         

Apakah Anda memiliki file email.php di folder konfigurasi Anda? Mungkin ada masalah dengan konfigurasi Anda di sana.

    
7
2010-10-05 01: 00: 36Z
  1. Ya, saya memiliki konfigurasi email.php, ini default dan hanya menyimpan ini: $config ['mailtype'] = 'html'; $config ['charset'] = 'utf-8'; $config ['newline'] = '\r \n';
    2010-10-05 12: 38: 42Z
  2. Mungkin Anda harus mencoba $config ['mailtype'] = 'text'; Mailtype html telah menyebabkan beberapa masalah bagi saya. Atau coba hapus seluruh file konfigurasi untuk menggunakan pengaturan default.
    2010-10-06 12: 19: 59Z
  3. Saya akan mencobanya, terima kasih. Tetapi saya seharusnya tidak memiliki masalah ini, saya ingin dapat mengirim pesan HTML jika diperlukan. Dan saya bisa melakukannya dengan mail (), dan itu buruk bahwa saya tidak bisa melakukannya dengan kerangka kerja yang besar. Saya masih bertanya-tanya apakah saya melakukan sesuatu yang salah.
    2010-10-11 13: 48: 22Z
  4. $config['protocol'] = 'sendmail'; = > $config['protocol'] = 'mail';
    2018-09-06 17: 58: 56Z

Punya masalah serupa.

Itu kode yang berfungsi dari controller:

 
        $config = array();
        $config['useragent']           = "CodeIgniter";
        $config['mailpath']            = "/usr/bin/sendmail"; // or "/usr/sbin/sendmail"
        $config['protocol']            = "smtp";
        $config['smtp_host']           = "localhost";
        $config['smtp_port']           = "25";
        $config['mailtype'] = 'html';
        $config['charset']  = 'utf-8';
        $config['newline']  = "\r\n";
        $config['wordwrap'] = TRUE;

        $this->load->library('email');

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

        $this->email->from($fromEmail, $fromName);
        $this->email->to($email);

        $this->email->subject('Тест Email');
        $this->email->message($this->load->view('email/'.$type.'-html', $data, TRUE));

        $this->email->send();
    
15
2012-06-12 22: 26: 16Z
  1. Lokasi sendmail memecahkan masalah saya, saya menggunakan default bin ketika sebenarnya di sbin
    2015-05-16 14: 48: 39Z

Jelas, sepertinya tidak ada jawaban pasti 'satu ukuran cocok untuk semua'. Apa yang berhasil bagi saya berubah

 
$config['protocol'] = 'smtp';

KE:

 
$config['protocol'] = 'mail';

Semoga ini bisa membantu ...

    
12
2015-09-22 22: 23: 51Z
  1. Hah, lucu. Apa yang berhasil bagi saya justru sebaliknya, yaitu mengubah protocol dari 'mail' ke 'smtp' (dan menambahkan 'smtp_host' dan 'smtp_port' seperti yang ditunjukkan dalam jawaban @ Fedir). Seperti yang dinyatakan, satu ukuran tidak cocok untuk semua - terutama karena masing-masing melakukan ini di lingkungan server yang berbeda. Moral cerita: lihat semua dari jawaban ini, dan coba variasi. (Petunjuk bagi saya mencatat bahwa dokumentasi fungsi PHP mail() - yang berfungsi untuk saya - secara sepintas menyebutkan bahwa ia menggunakan SMTP.)
    2015-10-19 05: 47: 12Z
  2. baik ini bekerja dengan sangat baik untuk saya!
    2016-07-27 18: 45: 51Z
  3. Jika Anda menggunakan smtp, pastikan juga untuk mengatur smtp_host. localhost mungkin seharusnya menjadi smtp_host default untuk framework.
    2018-07-26 15: 06: 22Z

Sepertinya tidak ada yang benar-benar menemukan jawaban yang pasti, jadi saya melakukan beberapa penggalian dan mencari tahu mengapa.

dalam sistem /perpustakaan /Email.php, lihat pertama pada baris 1552:

 
if ( ! mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str, "-f ".$this->clean_email($this->_headers['From'])))

sepertinya mengirim semuanya seperti bagus. Saya juga memiliki gejala yang sama persis. Untuk mengetahui apakah saya gila, saya menyisipkannya langsung sebelum ...

 
mail($this->_recipients, $this->_subject, $this->_finalbody)

jadi pada dasarnya saya menghapus semua header dan membiarkan PHP memasukkan defaultnya. Bingo! Tanpa header CI, itu berfungsi. Dengan header CI, itu tidak. Jadi apa itu?

Menggali lebih banyak lagi, saya mencari ke tempat html diinisialisasi dan digunakan. Ternyata itu tidak benar-benar melakukan apa-apa sampai sekitar 1046, di mana ia membangun tubuh pesan.

dari baris 1048:

 
if ($this->send_multipart === FALSE)
{
    $hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
    $hdr .= "Content-Transfer-Encoding: quoted-printable";
}
else
{
    $hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline . $this->newline;

    $body .= $this->_get_mime_message() . $this->newline . $this->newline;
    $body .= "--" . $this->_alt_boundary . $this->newline;

    $body .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
    $body .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
    $body .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;

    $body .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
    $body .= "Content-Transfer-Encoding: quoted-printable" . $this->newline . $this->newline;
}

Membalik send_multipart antara TRUE dan FALSE akan membuat kelas mail berfungsi atau tidak berfungsi.

Melihat melalui Dokumentasi kelas email Code Ignitor tidak mengungkapkan apa pun. Pergi ke baris 52:

 
var $send_multipart = TRUE; // TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override.  Set to FALSE for Yahoo.

Jadi begitulah. Mungkin kesalahan dalam bagaimana CI melakukan pesan multi-bagian? Preferensi konfigurasi tersembunyi

 
$config['send_multipart'] = FALSE;

di email.php tampaknya berhasil,

    
8
2013-04-19 05: 16: 33Z
  1. Poin bagus, dan komentar ini dari skrip email codeigniter "Ini adalah pesan multi-bagian dalam format MIME. Aplikasi email Anda mungkin tidak mendukung format ini."
    2013-06-25 10: 44: 46Z
  2. Saya menemukan bahwa surat ($this- > _penerima, $this- > _subject, $this- > _finalbody) dikombinasikan dengan $config ['send_multipart '] = SALAH; $config ['mailpath'] = "/usr /sbin /sendmail"; Memecahkan masalah saya.
    2016-02-08 16: 30: 58Z

Tambahkan variabel protokol ke array konfigurasi dan berikan nilai "sendmail". File email.php dalam folder config harus dibaca seperti yang ditunjukkan di bawah ini. Milik saya berfungsi seperti ini:

 
$config['protocol'] = 'sendmail';
$config['mailtype'] = 'html';
$config['charset']  = 'utf-8';
$config['newline']  = "\r\n";
    
4
2011-11-03 22: 14: 23Z

Pastikan nama domain di

 
$this->email->from("myemail@**email.com**");

cocok dengan nama domain server

    
4
2013-05-24 20: 42: 32Z
  1. Ini adalah solusi nyata. Saya juga akan mempostingnya juga.
    2014-07-12 04: 19: 22Z

Mengalami masalah yang sama, Pastikan alamat 'dari' Anda adalah alamat email yang valid.

    
0
2014-01-19 18: 24: 34Z

Saya membaca komentar di file email.php:

 
// most documentation of sendmail using the "-f" flag lacks a space after it, however
        // we've encountered servers that seem to require it to be in place.
        return mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str, '-f '.$this->clean_email($this->_headers['Return-Path']));
Bendera

"-f" - masalah ini !!!

    
0
2015-10-23 12: 25: 37Z

Layaknya mengatakan bahwa jika Anda menggunakan WAMP (Windows) Anda harus menginstal sendmail jika tidak, tidak ada metode pengiriman SMTP standar. Saya ingin menggunakan Gmail tetapi tidak bisa karena tidak ada mekanisme email default.

    
0
2017-08-30 19: 40: 28Z

Saya memiliki masalah yang sama dan meskipun terasa konyol bagi saya sekarang, saya memiliki beberapa opsi array konfigurasi yang dikapitalisasi ketika semuanya perlu huruf kecil:

tadinya:

 
$mail_config['smtp_host'] = 'mail.example.com';
$mail_config['smtp_port'] = '587';
$mail_config['smtp_user'] = 'email@example.com';
$mail_config['smtp_pass'] = 'password';
$mail_config['smtp_crypto'] = 'TLS'; //ERROR
$mail_config['protocol'] = 'SMTP'; //ERROR
$mail_config['mailtype'] = 'HTML'; //ERROR
$mail_config['send_multipart'] = FALSE;
$this->email->initialize($mail_config);

Diperbaiki:

 
$mail_config['smtp_host'] = 'mail.example.com';
$mail_config['smtp_port'] = '587';
$mail_config['smtp_user'] = 'email@example.com';
$mail_config['smtp_pass'] = 'password';
$mail_config['smtp_crypto'] = 'tls'; //FIXED
$mail_config['protocol'] = 'smtp'; //FIXED
$mail_config['mailtype'] = 'html'; //FIXED
$mail_config['send_multipart'] = FALSE;
$this->email->initialize($mail_config);

Itu berhasil untuk saya

    
- 1
2016-06-05 05: 36: 48Z
 
    $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'email',
        'smtp_pass' => 'pass',
        'mailtype'  => 'html',
        'charset'   => 'iso-8859-1'
    );

    $this->load->library('email',$config);
**$this->email->set_newline("\r\n");**  <- add this line
   this code worked for me.
    
- 1
2017-02-09 05: 29: 46Z
sumber ditempatkan sini