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?
Vous pouvez essayer cette ligne de code qui définira le type de courrier comme étant pour HTML
:
$this->email->set_mailtype("html");
À 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.
Définir le type de courrier sur HTML
fonctionne pour moi:
$email_setting = array('mailtype'=>'html');
$this->email->initialize($email_setting);
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
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.
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);
}
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!!
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 .
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();