it-swarm.com.de

CodeIgniter kann keine E-Mail senden PHP mail ()

Ich versuche, eine E-Mail mit Codeigniter wie folgt zu senden:

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

$this->email->from("[email protected]");
$this->email->reply_to("[email protected]");
$this->email->to("[email protected]");
$this->email->subject("Test mail");
$this->email->message("Email body");
$this->email->set_alt_message("Email body txt");
$this->email->send();

und ich habe dies im E-Mail-Debugger erhalten: E-Mail kann nicht mit PHP mail () gesendet werden. Ihr Server ist möglicherweise nicht zum Senden von E-Mails mit dieser Methode konfiguriert.

Wenn ich eine einfache PHP mail () - Funktion mit denselben Adressen mache, funktioniert es, aber wenn ich CodeIgniter verwende, wird mir der Fehler angezeigt. Warum sollte es mit einfacher Mail () funktionieren, aber nicht mit CodeIgniter? Irgendwelche Ideen ?

Vielen Dank.

17
Manny Calavera

Haben Sie eine email.php-Datei in Ihrem Konfigurationsordner? Möglicherweise gibt es dort ein Problem mit Ihrer Konfiguration.

7
mseo

Hatte ein ähnliches Problem.

Das ist Arbeitscode vom 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
Fedir RYKHTIK

Offensichtlich scheint es keine endgültige Antwort zu geben. Was für mich funktionierte, veränderte sich

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

ZU:

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

Hoffe das hilft...

12
mc_kaiser

Niemand schien wirklich eine endgültige Antwort zu finden, also grub ich herum und fand heraus, warum.

in system/libraries/Email.php schauen Sie sich zuerst Zeile 1552 an:

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

es scheint alles peachy wie zu senden. Ich hatte genau die gleichen Symptome. Um zu sehen, ob ich verrückt war, habe ich direkt davor eingefügt ...

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

also entfernte ich im Grunde alle Header und ließ PHP die Standardeinstellungen übernehmen. Bingo! Ohne CI-Header funktioniert es. Bei den CI-Headern ist dies nicht der Fall. Also, was ist es?

Ich grub noch etwas herum und sah nach, wo HTML initialisiert und verwendet wird. Es stellt sich heraus, dass es erst um 1046 etwas tut, wo es den Nachrichtentext bildet.

aus Zeile 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;
}

Durch das Umkehren von send_multipart zwischen TRUE und FALSE wird die Mail-Klasse funktionieren oder nicht funktionieren.

Durchsucht die Code Ignitor-E-Mail-Klasse docs enthüllt nichts. Zu Zeile 52 wechseln:

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

Also da hast du es. Möglicherweise ein Fehler, wie CI mehrteilige Nachrichten ausführt? Die verborgene Konfigurationseinstellung

$config['send_multipart'] = FALSE;

in der email.php scheint das zu tun.

8
pxl

Fügen Sie dem Konfigurationsarray eine Protokollvariable hinzu und weisen Sie ihm den Wert "sendmail" zu. Die email.php-Datei im config-Ordner sollte wie folgt lauten. Meines funktioniert so:

$config['protocol'] = 'sendmail';
$config['mailtype'] = 'html';
$config['charset']  = 'utf-8';
$config['newline']  = "\r\n";
4
Adam

Stellen Sie sicher, dass Sie den Domänennamen eingeben

$this->email->from("[email protected]**email.com**");

Übereinstimmung mit dem Serverdomänennamen

4
Roma Dov

Ich habe einen Kommentar in der Datei email.php gelesen:

// 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']));

"-f" -Flagge - dieses Problem !!!

0
MrM
    $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.
0
user7374090

Es lohnt sich zu sagen, dass Sie unter WAMP (Windows) sendmail installieren müssen. Andernfalls gibt es keine Standard-SMTP-Methode zum Senden. Ich wollte Google Mail verwenden, konnte es jedoch nicht, da es einfach keinen Standard-E-Mail-Mechanismus gibt.

0
Antony

Ich hatte das gleiche Problem und obwohl es mir jetzt dumm vorkommt, hatte ich einige der Konfigurations-Array-Optionen groß geschrieben, wenn sie alle klein geschrieben werden mussten:

war:

$mail_config['smtp_Host'] = 'mail.example.com';
$mail_config['smtp_port'] = '587';
$mail_config['smtp_user'] = '[email protected]';
$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);

Fest:

$mail_config['smtp_Host'] = 'mail.example.com';
$mail_config['smtp_port'] = '587';
$mail_config['smtp_user'] = '[email protected]';
$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);

Das hat bei mir funktioniert

0
OGZStudio

Hatte dasselbe Problem Stellen Sie sicher, dass Ihre Absenderadresse eine gültige E-Mail-Adresse ist.

0
Oren Yakobi