Codeigniter html change email name

I have a problem with emails, the html is fine, but when I open them, there are errors in the text and in the links and some characters are replaced with = like

Thanks for joining . your log=n details are here ma=e sure you keep them safe.
To verify your email address, please follow this link:

 Finish your registration...

Link doesn't work? Copy the following link to your browser address bar:  http://www.myurl.com/dev=l/panel/auth/activate/123131/123131

Please verify your email within 123131 hours, otherwise your registration =ill become invalid and you will have to register again.

      

every image and link even text borken up i thought it had to do with {unpacking} but didn't help

this is config / email.php

$config['email_notification']['protocol'] = 'smtp';
$config['email_notification']['smtp_host'] = 'smtp.live.com';
$config['email_notification']['smtp_user'] = 'xxxxx';
$config['email_notification']['smtp_pass'] = 'xxxxxxx';
$config['email_notification']['smtp_port'] = '587';
$config['email_notification']['mailtype'] = 'html';
$config['email_notification']['charset'] = 'utf-8';
$config['email_notification']['wordwrap'] = false;
$config['email_notification']['smtp_crypto'] = 'tls';

      

this is the controller

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



    $this->email->initialize($this->config->item('email_notification'));
    $this->email->subject('Email Test');

    $this->email->set_newline("\r\n");
    $this->email->from('xxxxxx'); // change it to yours
    $this->email->to('xxxxx');
    $this->email->subject('Email Test');

    $data=array(
        'site_name'=>'tralalalal',
        'user_id'=>'123131',
        'new_email_key'=>'123131',
        'activation_period'=>'123131',
        'email'=>'123131',
        'title'=>'123131',

    );
    $this->email->message($this->load->view('email/activate_account/en',$data,true));

      

email body

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style type="text/css">
    /* Client-specific Styles */
#outlook a{padding:0;} /* Force Outlook to provide a "view in browser" button. */
body{width:100% !important;} .ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
body{-webkit-text-size-adjust:none;} /* Prevent Webkit platforms from changing default text sizes. */

    /* Reset Styles */
body{margin:0; padding:0;}
img{border:0; height:auto; line-height:100%; outline:none; text-decoration:none;}
table td{border-collapse:collapse;}
#backgroundTable{height:100% !important; margin:0; padding:0; width:100% !important;}
</style>
</head>
<body>

      

thank

+3


source to share


2 answers


i found the answer so if anyone has the same problem

why

There are two limits that this standard places on the number of characters per line. Each character string MUST be no more than 998 characters, and MUST be no more than 78 characters, excluding CRLF.

The 998 character limit is due to limitations in many implementations that send, receive, or store a message on the Internet. Format messages that simply cannot handle more than 998 characters on a line. Obtaining implementations will be useful for handling an arbitrarily large number of characters in a string for the sake of reliability. However, there are so many implementations that (in compliance with the transport requirements of [RFC2821]) do not accept messages containing more than 1000 characters, including CR and LF per line, it is important that implementations do not create such messages.

A more conservative 78 character recommendation many UI implementations that display these messages, which can truncate or disastrously wrap the screen display of more than 78 characters per line, even though such implementations are incompatible with the intent of this
specification (and RFC2821), if indeed they are cause the information will be lost). Again, although this is a message limitation, it supports solutions displaying messages

and this is where you change your code to rewrite this limit System / Libraries / email.php



Orginal

protected function _prep_quoted_printable($str, $charlim = '')
{
    // Set the character limit
    // Don't allow over 76, as that will make servers and MUAs barf
    // all over quoted-printable data
    if ($charlim == '' OR $charlim > '76')
    {
        $charlim = '76';
    }

      

QUICK FIX :)

protected function _prep_quoted_printable($str, $charlim = '')
{
    // Set the character limit
    // Don't allow over 76, as that will make servers and MUAs barf
    // all over quoted-printable data
    if ($charlim == '' OR $charlim > '76')
    {
        $charlim = '200';
    }

      

+2


source


I think the problem is in the _prep_quoted_printable function. Fortunately, there is a native PHP version of this function as of v5.3

I was able to solve a similar problem by replacing the _prep_quoted_printable instances in the email class with the PHP built-in quoted_printable_encode function.



This equaled my _build_message () looking like this:

    /**
 * Build Final Body and attachments
 *
 * @access  protected
 * @return  void
 */
protected function _build_message()
{
    if ($this->wordwrap === TRUE  AND  $this->mailtype != 'html')
    {
        $this->_body = $this->word_wrap($this->_body);
    }

    $this->_set_boundaries();
    $this->_write_headers();

    $hdr = ($this->_get_protocol() == 'mail') ? $this->newline : '';
    $body = '';

    switch ($this->_get_content_type())
    {
        case 'plain' :

            $hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
            $hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding();

            if ($this->_get_protocol() == 'mail')
            {
                $this->_header_str .= $hdr;
                $this->_finalbody = $this->_body;
            }
            else
            {
                $this->_finalbody = $hdr . $this->newline . $this->newline . $this->_body;
            }

            return;

        break;
        case 'html' :

            if ($this->send_multipart === FALSE)
            {
                $hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
                $hdr .= "Content-Transfer-Encoding: quoted-printable";
            }
            else
            {
                $hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline . $this->newline;

                $body .= $this->_get_mime_message() . $this->newline . $this->newline;
                $body .= "--" . $this->_alt_boundary . $this->newline;

                $body .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
                $body .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
                $body .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;

                $body .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
                $body .= "Content-Transfer-Encoding: quoted-printable" . $this->newline . $this->newline;
            }

            // $this->_finalbody = $body . $this->_prep_quoted_printable($this->_body) . $this->newline . $this->newline;
            $this->_finalbody = $body . quoted_printable_encode($this->_body) . $this->newline . $this->newline;


            if ($this->_get_protocol() == 'mail')
            {
                $this->_header_str .= $hdr;
            }
            else
            {
                $this->_finalbody = $hdr . $this->_finalbody;
            }


            if ($this->send_multipart !== FALSE)
            {
                $this->_finalbody .= "--" . $this->_alt_boundary . "--";
            }

            return;

        break;
        case 'plain-attach' :

            $hdr .= "Content-Type: multipart/".$this->multipart."; boundary=\"" . $this->_atc_boundary."\"" . $this->newline . $this->newline;

            if ($this->_get_protocol() == 'mail')
            {
                $this->_header_str .= $hdr;
            }

            $body .= $this->_get_mime_message() . $this->newline . $this->newline;
            $body .= "--" . $this->_atc_boundary . $this->newline;

            $body .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
            $body .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;

            $body .= $this->_body . $this->newline . $this->newline;

        break;
        case 'html-attach' :

            $hdr .= "Content-Type: multipart/".$this->multipart."; boundary=\"" . $this->_atc_boundary."\"" . $this->newline . $this->newline;

            if ($this->_get_protocol() == 'mail')
            {
                $this->_header_str .= $hdr;
            }

            $body .= $this->_get_mime_message() . $this->newline . $this->newline;
            $body .= "--" . $this->_atc_boundary . $this->newline;

            $body .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline .$this->newline;
            $body .= "--" . $this->_alt_boundary . $this->newline;

            $body .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
            $body .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
            $body .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;

            $body .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
            $body .= "Content-Transfer-Encoding: quoted-printable" . $this->newline . $this->newline;

            // $body .= $this->_prep_quoted_printable($this->_body) . $this->newline . $this->newline;
            $body .= quoted_printable_encode($this->_body) . $this->newline . $this->newline;
            $body .= "--" . $this->_alt_boundary . "--" . $this->newline . $this->newline;

        break;
    }

    $attachment = array();

    $z = 0;

    for ($i=0; $i < count($this->_attach_name); $i++)
    {
        $filename = $this->_attach_name[$i];
        $basename = basename($filename);
        $ctype = $this->_attach_type[$i];

        if ( ! file_exists($filename))
        {
            $this->_set_error_message('lang:email_attachment_missing', $filename);
            return FALSE;
        }

        $h  = "--".$this->_atc_boundary.$this->newline;
        $h .= "Content-type: ".$ctype."; ";
        $h .= "name=\"".$basename."\"".$this->newline;
        $h .= "Content-Disposition: ".$this->_attach_disp[$i].";".$this->newline;
        $h .= "Content-Transfer-Encoding: base64".$this->newline;

        $attachment[$z++] = $h;
        $file = filesize($filename) +1;

        if ( ! $fp = fopen($filename, FOPEN_READ))
        {
            $this->_set_error_message('lang:email_attachment_unreadable', $filename);
            return FALSE;
        }

        $attachment[$z++] = chunk_split(base64_encode(fread($fp, $file)));
        fclose($fp);
    }

    $body .= implode($this->newline, $attachment).$this->newline."--".$this->_atc_boundary."--";


    if ($this->_get_protocol() == 'mail')
    {
        $this->_finalbody = $body;
    }
    else
    {
        $this->_finalbody = $hdr . $body;
    }

    return;
}

      

0


source







All Articles