web-dev-qa-db-fra.com

envoyer un courrier html en utilisant codeigniter

Erreur dans le contenu du courrier utilisant SMTP dans codeigniter En fait, mon courrier est envoyé avec les balises HTML et affiche les balises HTML qui sont incorrectes.

$config = Array(
'protocol' => 'smtp',
        'smtp_Host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => '[email protected]',
        'smtp_pass' => '',
        'mailtype'  => 'html', 
        'charset' => 'utf-8',
        'wordwrap' => TRUE

    );
    $this->load->library('email', $config);
    $this->email->set_newline("\r\n");
    $email_body ="<div>hello world</div>";
    $this->email->from('[email protected]', 'ddd');

    $list = array('[email protected]');
    $this->email->to($list);
    $this->email->subject('Testing Email');
    $this->email->message($email_body);

    $this->email->send();
    echo $this->email->print_debugger();

Si j'envoie un courrier sans utiliser SMTP, cela fonctionne bien. Quelle est mon erreur?

19
user1182623

Vous pouvez essayer cette ligne de code qui définira le type de courrier comme étant pour HTML:

 $this->email->set_mailtype("html");
71
Gabriel

À partir de CodeIgniter 3.x . Il y a beaucoup de fonctionnalités ajoutées. Cet exemple est presque identique aux versions précédentes, mais vous pouvez faire beaucoup plus. 

Suivez le lien pour la documentation.

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

// prepare email
$this->email
    ->from('[email protected]', 'Example Inc.')
    ->to('[email protected]')
    ->subject('Hello from Example Inc.')
    ->message('Hello, We are <strong>Example Inc.</strong>')
    ->set_mailtype('html');

// send email
$this->email->send();

Si vous avez un modèle de conception. Vous pouvez également inclure un modèle dans la méthode message comme ceci ...

->message($this->load->view('email_template', $data, true))

Ici, le premier paramètre est email_template.php dans votre répertoire de vues, le second paramètre les données à envoyer au modèle de courrier électronique, vous pouvez le définir '' ou array() ou [] si aucune donnée dynamique n'est transmise et le dernier paramètre true assurez-vous de saisir les données du modèle. au lieu de sortie.

J'espère que c'est utile.

20
Madan Sapkota

Définir le type de courrier sur HTML fonctionne pour moi:

$email_setting  = array('mailtype'=>'html');
$this->email->initialize($email_setting);
3
kebyang

Gmail empêche l'accès à votre compte. Vous avez besoin de quelques modifications sur votre gmail: -

Étape 1

Certaines applications et certains appareils utilisent une technologie de connexion moins sécurisée, ce qui rend votre compte plus vulnérable. Vous pouvez désactiver l'accès à ces applications, que nous recommandons, ou activer l'accès si vous souhaitez les utiliser malgré les risques.

Activer l'application moins sécurisée

Étape 2

Activer le statut IMAP
Activer le statut POP

Activer le statut IMAP et POP

1
Parimal Nakrani

Essayez de définir manuellement l'en-tête de type de contenu en procédant comme suit:

$this->email->set_header('Content-Type', 'text/html');

Cela résout le problème pour moi.

1
Carlos Atencio

Pouvez-vous s'il vous plaît essayer avec ce code, B'z je peux pouvoir envoyer un email HTML avec ce code.

$configemail = Array(
        'protocol' => 'smtp',
        'smtp_Host' => 'ssl://smtp.gmail.com', //mail.webconsort.com
        'smtp_port' => 465, //5074
        'smtp_user' => '[email protected]', //[email protected]
        'smtp_pass' => 'XXXXXXXX', //'T0r0r1d3'
        'mailtype'  => 'html', 
        'charset'   => 'iso-8859-1'
    );

    $CI =& get_instance();

    $CI->load->library('email', $configemail);

    $CI->email->initialize($configemail);
    $CI->email->set_newline("\r\n");

    $CI->email->from($from, $fromName);
    $CI->email->to($to); 

    $CI->email->subject($subject);
    $CI->email->message($body);
    if ($attachments != null && !empty($attachments)){
        foreach($attachments as $a){
            $CI->email->attach($a);
        }
    }

    try{
        $CI->email->send();
        return true;
    }
    catch (Exception $e){
        //var_dump($e);
    }
0
Nikunj K.

Pour envoyer un email HTML, vous devez d'abord composer votre message dans une variable, puis la transmettre à la méthode "$ this-> email-> message ()" de codeigniter, comme ci-dessous

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

 $message = "
     <html>
       <head>
         <title>your title</title>
       </head>
       <body>
         <p>Hello Sir,</p>
         <p>Your message</p>
       </body>
     </html>";

   $this->email->from('email id', 'name');
   $this->email->to('email id');

   $this->email->subject('email subject');
   $this->email->message($message);

   if ($this->email->send()) {
     print "success";
   } else {
     print "Could not send email, please try again later";
   }

j'espère que ça va aider.

prendre plaisir!!

0
Umesh Patil

Mon problème était que le filtrage XSS global de Codeigniter encodait des balises HTML telles que <html> afin que les clients de messagerie ne puissent plus les reconnaître. 

Pour résoudre ce problème, consultez mon autre post

0
zechdc

Utilisez-le comme ça .. ça marche très bien pour moi.

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

$config['charset'] = 'iso-8859-1';

$config['wordwrap'] = TRUE;

$config['mailtype'] = 'html';

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

$this->email->from($fromemail);

$this->email->to($toemail);

$this->email->subject('Subject');

$this->email->message($html);

$success=$this->email->send();
0
Vishal P Gothi