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']    = 'mygmail@gmail.com';
        $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('mygmail@gmail.com', 'myname');
        $this->email->to('target@gmail.com'); 

        $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?


$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


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


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'] = 'YOUREMAILHERE@gmail.com';
$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('YOUREMAILHERE@gmail.com', 'YOUREMAILHERE@gmail.com');
$this->email->to('SOMEEMAILHERE@gmail.com');
$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

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

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

$ci->email->from('blablabla@gmail.com', 'Blabla');
$list = array('xxx@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->send();

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@example.com', 'Website');
    $list = array('xxxxxxxx@archmage.lk', 'xxxxx@gmail.com');
    $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());
    }

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.


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' => 'yourname@gmail.com',
    'smtp_pass' => '**********'
    );

oder

$config['protocol'] = '';
$config['smtp_host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = 'yourname@gmail.com';
$config['smtp_pass'] = 'password';

Für mich geht das.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.