Envoyer un e-mail avec gmail smtp avec codeigniter email library

<?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']    = "rn";
        $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');
    }
}

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

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 résoudre ce problème les gars?

70
demandé sur Ijas Ameenudeen 2009-10-12 19:11:20

8 réponses

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

From the CodeIgniter Forums

111
répondu Thorpe Obazee 2016-01-30 12:48:09

vous devez activer SSL dans votre config PHP. Charger php.ini et trouver une ligne avec le suivant:

;extension=php_openssl.dll

décommentez-le. : D

(en enlevant le point-virgule de l'énoncé)

extension=php_openssl.dll

18
répondu Cerebro 2013-11-12 04:39:02

selon le CI docs ( CodeIgniter Email Library )...

si vous préférez ne pas définir les préférences en utilisant la méthode ci-dessus, vous pouvez mettez-les plutôt dans un fichier de configuration. Il suffit de créer un nouveau fichier appelé courriel.php, ajoute le tableau $ config dans ce fichier. Puis sauvegarder le fichier à config/e-mail.php et il sera utilisé automatiquement. Vous ne serez PAS besoin d'utiliser la fonction $ this->email->initialize () si vous enregistrez votre préférences dans un fichier de configuration.

j'ai été en mesure de faire fonctionner ceci en mettant 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'] = '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;

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

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

aussi, comme L'a écrit Cerebro, j'ai dû décommenter cette ligne dans mon php.fichier ini et redémarrer PHP:

extension=php_openssl.dll
13
répondu Luke 2016-01-11 21:46:29

Modifier pour ce qui 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'] = "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();
7
répondu RobinCominotto 2014-01-23 21:52:57

envoyer html courriel 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@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());
    }
4
répondu Chamil Sanjeewa 2013-09-23 15:49:25

une autre option qui fonctionne, dans un serveur linux avec Postfix:

tout d'abord, configurer CI email 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'; 

puis configurez votre postfix pour relayer le courrier à 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)

C'est beaucoup plus simple (et moins fragmente) si vous avez une machine linux, déjà configurée pour envoyer une partie ou la totalité de ses e-mails sortants à Google.

1
répondu leonbloy 2011-05-02 17:38:29

peut-être que votre serveur d'hébergement et votre serveur de messagerie sont situés au même endroit et vous n'avez pas besoin d'aller pour l'authentification smtp. Il suffit de garder toutes les choses par défaut comme:

$config = array(        
    'protocol' => '',
    'smtp_host' => '',
    'smtp_port' => '',
    'smtp_user' => 'yourname@gmail.com',
    'smtp_pass' => '**********'
    );

ou

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

ça me va.

1
répondu Shiplu 2015-05-07 15:14:28

Il peut être:

si vous utilisez cpanel pour votre site web les restrictions smtp sont un problème et l'origine de cette erreur. Restrictions SMTP

erreur lors de l'envoi d'un e-mail avec CodeIgniter

1
répondu Adrian P. 2017-05-23 12:34:47