Sending HTML Email results in Email displaying HTML source (Codeigniter Email Class)

44,526

Solution 1

Try adding the mailtype to the config:

$config = Array(
    'mailtype' => 'html',
    ...etc...
);

See http://codeigniter.com/user_guide/libraries/email.html

Solution 2

Try this

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

Solution 3

Add these two lines after loading your codeigniter mail library

$this->email->set_header('MIME-Version', '1.0; charset=utf-8');
$this->email->set_header('Content-type', 'text/html');

full configuration: https://stackoverflow.com/a/38740292/4376484

Solution 4

Append the line commented in the example below:

$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$config['mailtype'] = 'html'; // Append This Line
$this->email->initialize($config);

Solution 5

Set $config['protocol'] = "sendmail";

has fixed that for me

Share:
44,526
Nyxynyx
Author by

Nyxynyx

Hello :) I have no formal education in programming :( And I need your help! :D These days its web development: Node.js Meteor.js Python PHP Laravel Javascript / jQuery d3.js MySQL PostgreSQL MongoDB PostGIS

Updated on May 04, 2020

Comments

  • Nyxynyx
    Nyxynyx about 4 years

    I am having problems with email sent via the email class in Codeigniter displaying the source HTML code in the email message instead of the rendered HTML view. For testing, I am currently having CI on XAMPP on Windows, and using Gmail SMTP to send to the same gmail address.

    The function that sends the email is as follows:

    $config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.googlemail.com',
            'smtp_port' => 465,
            'smtp_user' => '[email protected]',
            'smtp_pass' => 'mygmailpassword',
            );
    
        $this->load->library('email', $config); 
        $this->email->from($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
        $this->email->reply_to($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
        $this->email->to($email);
        $this->email->subject(sprintf($this->lang->line('auth_subject_'.$type), $this->config->item('website_name', 'tank_auth')));
        $this->email->message($this->load->view('email/'.$type.'-html', $data, TRUE));
        $this->email->set_alt_message($this->load->view('email/'.$type.'-txt', $data, TRUE));
    
        $this->email->set_newline("\r\n"); // require this, otherwise sending via gmail times out
    
        $this->email->send();
    

    There is no problem getting the text version sent. The view loaded is a html file that will be emailed out.

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head><title>Welcome to <?php echo $site_name; ?>!</title></head>
    <body>
    <div style="max-width: 800px; margin: 0; padding: 30px 0;">
    <table width="80%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="5%"></td>
    <td align="left" width="95%" style="font: 13px/18px Arial, Helvetica, sans-serif;">
    <h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">Welcome to <?php echo $site_name; ?>!</h2>
    Thanks for joining <?php echo $site_name; ?>. We listed your sign in details below, make sure you keep them safe.<br />
    To verify your email address, please follow this link:<br />
    <br />
    <big style="font: 16px/18px Arial, Helvetica, sans-serif;"><b><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;">Finish your registration...</a></b></big><br />
    <br />
    Link doesn't work? Copy the following link to your browser address bar:<br />
    <nobr><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;"><?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?></a></nobr><br />
    <br />
    Please verify your email within <?php echo $activation_period; ?> hours, otherwise your registration will become invalid and you will have to register again.<br />
    <br />
    <br />
    <?php if (strlen($username) > 0) { ?>Your username: <?php echo $username; ?><br /><?php } ?>
    Your email address: <?php echo $email; ?><br />
    <?php if (isset($password)) { /* ?>Your password: <?php echo $password; ?><br /><?php */ } ?>
    <br />
    <br />
    Have fun!<br />
    The <?php echo $site_name; ?> Team
    </td>
    </tr>
    </table>
    </div>
    </body>
    </html>
    

    Any ideas how to get HTML emails sent to be rendered instead of displaying its source code?

  • Braian Mellor
    Braian Mellor over 7 years
    Call to undefined method CI_Email::set_header()
  • Braian Mellor
    Braian Mellor over 7 years
    thanks for this, really extrange. Need to set twice? or inside the $this->load->library('email', $config); the $config it's not working. thanks again