web-dev-qa-db-fra.com

Envoi d'e-mails avec gmail smtp avec la bibliothèque d'e-mails codeigniter

<?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');
    }
}

Je reçois cette erreur:

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

En utilisant PORT 25/587

J'ai eu cette erreur:

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

Je ne veux pas utiliser phpmailer maintenant. (En fait, j'ai essayé d'utiliser phpmailer, mais j'ai échoué).

Comment puis-je résoudre ce problème les gars?

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

De la Forums CodeIgniter

115
Thorpe Obazee

Vous devez activer SSL dans votre PHP config. Load up php.ini et trouvez une ligne avec les éléments suivants:

;extension=php_openssl.dll

Décommentez-le. :RÉ

(en supprimant le point-virgule de la déclaration)

extension=php_openssl.dll

18
Cerebro

Selon la documentation de CI ( CodeIgniter Email Library ) ...

Si vous préférez ne pas définir de préférences à l'aide de la méthode ci-dessus, vous pouvez les placer dans un fichier de configuration. Créez simplement un nouveau fichier appelé email.php, ajoutez le tableau $ config dans ce fichier. Enregistrez ensuite le fichier à config/email.php et il sera utilisé automatiquement. Vous n'aurez PAS besoin d'utiliser la fonction $ this-> email-> initialize () si vous enregistrez vos préférences dans un fichier de configuration.

J'ai réussi à faire fonctionner cela en plaçant tous les paramètres dans application/config/email.php .

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

Ensuite, dans l'une des méthodes du contrôleur, j'ai quelque chose comme:

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

De plus, comme Cerebro l'a écrit, j'ai dû supprimer cette ligne de commentaire dans mon fichier php.ini et redémarrer PHP:

extension=php_openssl.dll
15
Luke

Changez-le comme suit:

$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

envoyer un email html via 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

Une autre option que j'ai, sur un serveur Linux avec Postfix:

Commencez par configurer le courrier électronique CI pour utiliser le système de messagerie de votre serveur: par exemple, dans email.php, par exemple

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

Configurez ensuite votre postfix pour relayer le courrier sur Google (peut-être en fonction de l'adresse de l'expéditeur). Vous aurez probablement besoin de mettre vos paramètres de mot de passe utilisateur dans /etc/postfix/sasl_passwd(docs)

Ceci est beaucoup plus simple (et moins fragmenté) si vous avez une boîte Linux, déjà configurée pour envoyer tout ou partie de ses courriels sortants à Google.

1
leonbloy

Peut-être que votre serveur d'hébergement et votre serveur de messagerie sont situés au même endroit et que vous n'avez pas besoin de vous authentifier par smtp. Il suffit de garder chaque chose par défaut comme:

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

ou

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

ça marche pour moi.

1
Shiplu

Cela peut être ceci:

Si vous utilisez cpanel pour votre site Web, les restrictions smtp posent problème et causent cette erreur. Restrictions SMTP

Erreur lors de l'envoi d'un email avec CodeIgniter

1
Adrian P.