我的电子邮件有问题,html是好的,但是当我打开它们时,文本中的错误和链接中的某些字符变为= =
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.
每个图像和链接甚至文本都是borken 我认为它与{unwrap}有关,但没有帮助
这是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->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));
电子邮件正文
<!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>
感谢
答案 0 :(得分:2)
我找到了答案,所以如果有人有同样的问题
有原因
该标准对于数量有两个限制 一行中的字符。每行字符必须不超过
998个字符,不应超过78个字符,不包括
CRLF。998字符限制是由于许多限制 发送,接收或存储Internet消息的实现 格式化消息,无法处理超过998个字符 在一条线上。接收实现将很好地处理 为了鲁棒性,一行中任意大量的字符 清酒。但是,有很多实现(in 符合[RFC2821]的运输要求) 接受包含超过1000个字符的消息,包括 每行CR和LF,对于不执行的实现很重要 创造这样的信息。
更为保守的78字符建议是适应 显示这些的用户界面的许多实现 可能截断或灾难性地包装的信息 尽管有这样的事实,但每行超过78个字符 实现不符合本文的意图 规范(和[RFC2821]的规范,如果它们实际上导致
的实现的障碍
信息丢失)。同样,即使有这种限制 消息,它是显示消息
这是您更改代码以覆盖此限制的位置 系统/库/ email.php
原单
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';
}
答案 1 :(得分:0)
我认为问题出在_prep_quoted_printable函数中。幸运的是,从v5.3开始,这个函数的本机PHP版本
我能够通过使用PHP本机函数quoted_printable_encode替换Email类中的_prep_quoted_printable实例来解决类似问题。
这相当于我的_build_message(),如下所示:
/**
* 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;
}
答案 2 :(得分:0)
使用Outlook封闭环境,不希望发送到另一个邮件客户端。
相似的结果,但是不同版本的codeigniter。 我有一个wrapchars变量可以更改它。 问题是它在_prep_quoted_printable中使用了硬编码76。 我将76更改为
$this->wrapchars
一切都变得美好。