Senden von E-Mails mit Google Mail-SMTP mit Codeigniter-E-Mail-Bibliothek

79
<?php
class Email extends Controller {

    function Email()
    {
        parent::Controller();   
        $this->load->library('email');
    }

    function index()
    {
        $config['protocol']    = 'smtp';
        $config['smtp_host']    = 'ssl://smtp.gmail.com';
        $config['smtp_port']    = '465';
        $config['smtp_timeout'] = '7';
        $config['smtp_user']    = '[email protected]';
        $config['smtp_pass']    = '*******';
        $config['charset']    = 'utf-8';
        $config['newline']    = "\r\n";
        $config['mailtype'] = 'text'; // or html
        $config['validation'] = TRUE; // bool whether to validate email or not      

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

        $this->email->from('[email protected]', 'myname');
        $this->email->to('[email protected]'); 

        $this->email->subject('Email Test');
        $this->email->message('Testing the email class.');  

        $this->email->send();

        echo $this->email->print_debugger();

        $this->load->view('email_view');
    }
}

Ich erhalte diesen Fehler:

A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Connection timed out)
Filename: libraries/Email.php
Line Number: 1641

Verwenden von PORT 25/587

Ich habe diesen Fehler erhalten:

A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:func(119):reason(252)
Filename: libraries/Email.php
Line Number: 1641

Ich möchte jetzt phpmailer nicht verwenden. (Eigentlich habe ich versucht, phpmailer zu verwenden, aber ich bin gescheitert).

Wie löse ich dieses Problem, Leute?

Shiv
quelle
$config['validation'] = TRUEist falsch, der Indexschlüssel ist validiert, also verwenden Sie$config['validate'] = TRUE
Delmo

Antworten:

122
$config = Array(
    'protocol' => 'smtp',
    'smtp_host' => 'ssl://smtp.googlemail.com',
    'smtp_port' => 465,
    'smtp_user' => 'xxx',
    'smtp_pass' => 'xxx',
    'mailtype'  => 'html', 
    'charset'   => 'iso-8859-1'
);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

// Set to, from, message, etc.

$result = $this->email->send();

Aus den CodeIgniter-Foren

Teej
quelle
10
+1, Beachten Sie, dass alle Array-Elemente in einfache Anführungszeichen und nur die Parameter von $this->email->set_newlinein doppelte Anführungszeichen eingeschlossen sind. das ist sehr wichtig oder es funktioniert nicht.
Naveen Kumar
11
Das liegt daran, dass in PHP (und einigen anderen Sprachen) \nnur dann eine neue Zeile in doppelten Anführungszeichen steht. In einfachen Anführungszeichen bedeutet dies die Literalzeichen \ n.
DMin
1
Die Lösung war, danke: für die $ this-> email-> set_newline ("\ r \ n")
TooCooL
1
@NaveenKumar kann die E-Mail immer noch nicht senden. keine Antwort bekommen in$result = $this->email->send();
Pathik Vejani
1
@ThorpeObazee Sir Können wir der Mail-Konfigurationsdatei weitere Konfigurationen hinzufügen? wie $ config ['subjectEnquiry'] => "Anfrage E-Mail"; oder $ config ['subjectSuccess'] => "Daten erfolgreich hinzugefügt";
Ankit Suthar
19

Sie müssen SSL in Ihrer PHP-Konfiguration aktivieren. Laden Sie php.iniund finden Sie eine Zeile mit den folgenden:

;extension=php_openssl.dll

Kommentieren Sie es aus. : D.

(durch Entfernen des Semikolons aus der Anweisung)

extension=php_openssl.dll

Cerebro
quelle
1
Dies gilt nur für Windows-Server. Verwenden Sie phpinfo (), um festzustellen, ob die richtigen Sockets verfügbar sind und ob sich openssl auf Ihrem Server befindet.
JJWDesign
17

Laut CI-Dokumenten ( CodeIgniter Email Library ) ...

Wenn Sie die Einstellungen nicht mit der oben beschriebenen Methode festlegen möchten, können Sie sie stattdessen in eine Konfigurationsdatei einfügen. Erstellen Sie einfach eine neue Datei mit dem Namen email.php und fügen Sie das $ config-Array in diese Datei ein. Speichern Sie dann die Datei unter config / email.php und sie wird automatisch verwendet. Sie müssen die Funktion $ this-> email-> initialize () NICHT verwenden, wenn Sie Ihre Einstellungen in einer Konfigurationsdatei speichern.

Ich konnte dies zum Laufen bringen, indem ich alle Einstellungen in application / config / email.php ablegte .

$config['useragent'] = 'CodeIgniter';
$config['protocol'] = 'smtp';
//$config['mailpath'] = '/usr/sbin/sendmail';
$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = 'YOURPASSWORDHERE';
$config['smtp_port'] = 465; 
$config['smtp_timeout'] = 5;
$config['wordwrap'] = TRUE;
$config['wrapchars'] = 76;
$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['validate'] = FALSE;
$config['priority'] = 3;
$config['crlf'] = "\r\n";
$config['newline'] = "\r\n";
$config['bcc_batch_mode'] = FALSE;
$config['bcc_batch_size'] = 200;

Dann habe ich in einer der Controller-Methoden so etwas wie:

$this->load->library('email'); // Note: no $config param needed
$this->email->from('[email protected]', '[email protected]');
$this->email->to('[email protected]');
$this->email->subject('Test email from CI and Gmail');
$this->email->message('This is a test.');
$this->email->send();

Außerdem musste ich, wie Cerebro schrieb, diese Zeile in meiner php.ini-Datei auskommentieren und PHP neu starten:

extension=php_openssl.dll
Luke
quelle
Geben Sie mir jedes Mal einen E-Mail-Bibliothekscode, wenn ich $ this-> load-> library ('email') sehe, aber keine E-Mail-Bibliothek habe. Was kann ich tun? Bitte, Sir, geben Sie mir einen Weg, wie ich in CI & Codierung neuer bin. danke :)
Prakash Pokhrel
7

Ändern Sie es wie folgt:

$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'] = "yourpassword";
$config['charset'] = "utf-8";
$config['mailtype'] = "html";
$config['newline'] = "\r\n";

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

$ci->email->from('[email protected]', 'Blabla');
$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->send();
RobinCominotto
quelle
5

Senden Sie eine HTML-E-Mail über Codeiginater

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



    $this->email->clear();
    $config['mailtype'] = "html";
    $this->email->initialize($config);
    $this->email->set_newline("\r\n");
    $this->email->from('[email protected]', 'Website');
    $list = array('[email protected]', '[email protected]');
    $this->email->to($list);
    $data = array();
    $htmlMessage = $this->parser->parse('messages/email', $data, true);
    $this->email->subject('This is an email test');
    $this->email->message($htmlMessage);



    if ($this->email->send()) {
        echo 'Your email was sent, thanks chamil.';
    } else {
        show_error($this->email->print_debugger());
    }
Chamil Sanjeewa
quelle
1

Eine weitere Option, die ich auf einem Linux-Server mit Postfix habe:

Konfigurieren Sie zunächst CI-E-Mails so, dass sie das E-Mail-System Ihres Servers verwenden: z. email.phpB. in

# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail'; 
$config['mailpath'] = '/usr/sbin/sendmail'; 

Konfigurieren Sie dann Ihren Postfix so, dass die E-Mail an Google weitergeleitet wird (möglicherweise abhängig von der Absenderadresse). Sie müssen wahrscheinlich Ihre Benutzerkennworteinstellungen in (docs) eingeben./etc/postfix/sasl_passwd

Dies ist viel einfacher (und weniger fragmentarisch), wenn Sie eine Linux-Box haben, die bereits so konfiguriert ist, dass einige / alle ausgehenden E-Mails an Google gesendet werden.

leonbloy
quelle
1

Möglicherweise befinden sich Ihr Hosting-Server und Ihr E-Mail-Server am selben Ort, und Sie müssen keine SMTP-Authentifizierung durchführen. Behalten Sie einfach alles wie folgt bei:

$config = array(        
    'protocol' => '',
    'smtp_host' => '',
    'smtp_port' => '',
    'smtp_user' => '[email protected]',
    'smtp_pass' => '**********'
    );

oder

$config['protocol'] = '';
$config['smtp_host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = 'password';

Für mich geht das.

Shiplu
quelle
Arbeiten Sie nicht für mich ohne $ config ['crlf'] = "\ r \ n"; $ config ['newline'] = "\ r \ n";
BoCyrill
1

Es kann sein:

Wenn Sie cpanel für Ihre Website verwenden, sind SMTP-Einschränkungen problematisch und verursachen diesen Fehler. SMTP-Einschränkungen

Fehler beim Senden einer E-Mail mit CodeIgniter

Adrian P.
quelle