web-dev-qa-db-fra.com

Codeigniter $ this-> email-> send () ne fonctionne pas alors que mail () le fait

Je ne peux pas comprendre pourquoi si j'essaie d'utiliser la classe de messagerie CI, il n'envoie pas d'e-mails, tandis que si j'utilise la classe native PHP mail () fonctionne.

Il faut noter que parfois je reçois des "e-mails envoyés" alors qu'ils ne sont pas réellement envoyés et parfois j'obtiens l'erreur "mon serveur n'est pas configuré".

J'ai essayé de comprendre comment le configurer mais ... rien ...

Le code du contrôleur suit:

 if($this->form_validation->run()){

                //Set Language
                $this->lang->load('site', $this->session->userdata('lang'));

                //Random key
                $user_valid_key = md5(uniqid());

                //Prepare email
                $this->load->library('email', array('mailtype' => 'html'));
                $this->email->from($this->config->item('email_signup_from'), 'Wondermark.net');
                $this->email->to($this->input->post('email'));
                $this->email->subject($this->lang->line('email_signup_subject'));

                //Format mail con %s per inserire i campi necessari
                $signup_msg = sprintf($this->lang->line('email_signup_message'), $this->input->post('fname'), base_url().'main/signup_confirm/'.$user_valid_key);

                $this->email->message((string)$signup_msg);

                if($this->email->send()){
                    //TODO: load view...
                    echo "email sent";
                }else{
                    $to = $this->input->post('email');
                    mail($to, 'test', 'Other sent option failed');
                    echo $this->input->post('email');
                    show_error($this->email->print_debugger());
                }

                //TODO: Add to db

            }else{

            // Form validation failed

}
12
Mr.Web

Utilisez cet e-mail de configuration.

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

$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']    = 'password';
$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]', 'sender_name');
$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();
24
Anand

J'ai fait face à ce problème et j'ai trouvé la solution suivante. Juste un petit changement dans la configuration de l'email et ça marche à 100%:

$config['protocol'] = 'ssmtp';
$config['smtp_Host'] = 'ssl://ssmtp.gmail.com';
9
amisha

J'utilise beaucoup de temps Exécutez mon code de configuration dans localhost mais cela me donne toujours une erreur (Impossible d'envoyer un e-mail à l'aide de PHP SMTP. Votre le serveur n'est peut-être pas configuré pour envoyer du courrier à l'aide de cette méthode.)

Mais lorsque vous exécutez ce code ci-dessous sur mon serveur , cela fonctionne pour moi.

application> contrôleur> Sendingemail_Controller.php

public function send_mail() {
    $this->load->library('email');   
    $config = array();
    $config['protocol']     = "smtp"; // you can use 'mail' instead of 'sendmail or smtp'
    $config['smtp_Host']    = "ssl://smtp.googlemail.com";// you can use 'smtp.googlemail.com' or 'smtp.gmail.com' instead of 'ssl://smtp.googlemail.com'
    $config['smtp_user']    = "[email protected]"; // client email gmail id
    $config['smtp_pass']    = "******"; // client password
    $config['smtp_port']    =  465;
    $config['smtp_crypto']  = 'ssl';
    $config['smtp_timeout'] = "";
    $config['mailtype']     = "html";
    $config['charset']      = "iso-8859-1";
    $config['newline']      = "\r\n";
    $config['wordwrap']     = TRUE;
    $config['validate']     = FALSE;
    $this->load->library('email', $config); // intializing email library, whitch is defiend in system

    $this->email->set_newline("\r\n"); // comuplsory line attechment because codeIgniter interacts with the SMTP server with regards to line break

    $from_email = $this->input->post('f_email'); // sender email, coming from my view page 
    $to_email = $this->input->post('email'); // reciever email, coming from my view page
    //Load email library

    $this->email->from($from_email);
    $this->email->to($to_email);
    $this->email->subject('Send Email Codeigniter'); 
    $this->email->message('The email send using codeigniter library');  // we can use html tag also beacause use $config['mailtype'] = 'HTML'
    //Send mail
    if($this->email->send()){
        $this->session->set_flashdata("email_sent","Congragulation Email Send Successfully.");
        echo "email_sent";
    }
    else{
        echo "email_not_sent";
        echo $this->email->print_debugger();  // If any error come, its run
    }
}

et ma page d'affichage où j'ai défini f_email et l'email passe par la méthode post . application> affichage> emailtesting.php

<html>
<head>    
    <title> Send Email Codeigniter </title>
</head>
<body>
<?php
echo $this->session->flashdata('email_sent');
echo form_open('/Sendingemail_Controller/send_mail');
?>
<input type = "email" name = "f_email" placeholder="sender email id (from)"  required />
<input type = "email" name = "email"  placeholder="reciever email id (to)" required />
<input type = "submit" value = "SEND MAIL">
<?php
echo form_close();
?>
</body>

si une erreur se reproduit, veuillez consulter la documentation officielle ci-dessous:

https://codeigniter.com/user_guide/libraries/email.html

2
sonu prajapati

Guide de l'utilisateur Codeigniter: https://www.codeigniter.com/user_guide/libraries/email.html

Cette configuration fonctionne pour moi:

$config = Array(
            'protocol' => 'smtp',
            'smtp_Host' => 'Your SMTP Server',
            'smtp_port' => 25,
            'smtp_user' => 'Your SMTP User',
            'smtp_pass' => 'Your SMTP Pass',
            'mailtype'  => 'html'
            );
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

//Add file directory if you need to attach a file
$this->email->attach($file_dir_name);

$this->email->from('Sending Email', 'Sending Name');
$this->email->to('Recieving Email address'); 

$this->email->subject('Email Subject');
$this->email->message('Email Message'); 

if($this->email->send()){
   //Success email Sent
   echo $this->email->print_debugger();
}else{
   //Email Failed To Send
   echo $this->email->print_debugger();
}
2
Tim

Après avoir combattu avec ce même problème pendant quelques heures, j'ai finalement décidé de changer ma configuration pour l'envoyer via un autre serveur. Mon serveur d'origine, pour une raison quelconque, enverrait à certaines adresses mais pas à d'autres (dans le même domaine). Dès que j'ai changé pour sendgrid, cela a fonctionné comme prévu.

Si vous n'obtenez pas les résultats attendus, essayez un autre serveur smtp. Le problème n'est peut-être pas votre code ...

1
Tim Duncklee

J'ai eu le même problème et j'essaie le code ci-dessous au lieu de la fonction de messagerie de Codeignitor.

mail('[email protected]' , 'Test', 'Test Email');

Cela fonctionne et le courrier est envoyé à l'adresse e-mail. Ce courrier a été envoyé par une adresse e-mail déjà créée (comme je pense). Dans mon cas, c'est:

[email protected]

Je copie donc cette adresse e-mail et l'essaye avec le code ci-dessous.

$this->email->from('[email protected]', 'www.domainserver.com');

Et ça marche bien. Il semble que certains serveurs aient besoin d'une adresse e-mail déjà créée pour envoyer l'e-mail alors que d'autres ne le sont PAS.

J'espère que cela est clair et utile.

1
Niroshan