it-swarm.com.de

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

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

Mit PORT 25/587

Ich habe diesen Fehler bekommen:

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 phpmailer jetzt nicht benutzen. (Eigentlich habe ich versucht, phpmailer zu benutzen, aber ich bin gescheitert).

Wie löse ich dieses Problem Jungs?

72
Shiv Kumar
$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 Forums

115
Thorpe Obazee

Sie müssen SSL in Ihrer PHP config. Load up php.ini und finde eine Zeile mit folgendem:

;extension=php_openssl.dll

Kommentiere es aus. : D

(durch Entfernen des Semikolons aus der Anweisung)

extension=php_openssl.dll

18
Cerebro

Laut den 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 Array $ config 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 eingab.

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

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

extension=php_openssl.dll
15
Luke

Ä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();
7
RobinCominotto

sende eine HTML-E-Mail per 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());
    }
5
Chamil Sanjeewa

Eine andere Option, die ich habe, in einem Linux-Server mit Postfix zu arbeiten:

Konfigurieren Sie zunächst CI-E-Mail für die Verwendung des E-Mail-Systems Ihres Servers, z. B. in email.php

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

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

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
leonbloy

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 alle Standardeinstellungen bei, wie zum Beispiel:

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

1
Shiplu

Das kann sein:

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

Fehler beim Versenden einer E-Mail mit CodeIgniter

1
Adrian P.