我正在尝试使用CodeIgniter发送base64编码的电子邮件。 代码下方:
$message = base64_encode($body);
$config = Array('protocol' => 'smtp', 'smtp_host' => $smtp, 'smtp_port' => $port, 'smtp_user' => $user, 'smtp_pass' => $pass, 'mailtype' => 'html', 'charset' => 'utf-8','_bit_depths' => array('7bit', '8bit', 'base64'),'_encoding' => 'base64',);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");
$this->email->from($disemail, $disname);
$this->email->reply_to($disemail, $disname);
$this->email->to($email);
$this->email->subject($subject);
$this->email->message($message);
但电子邮件发送不正确。我只是在邮件中找到了base64编码的文本,而不是base64解码。
以下是发送的调试:
Mime-Version:1.0
内容类型:multipart / alternative;边界= “B_ALT_5596ca8577c5c” 这是MIME格式的多部分消息。您的电邮申请表 可能不支持这种格式。
- B_ALT_5596ca8577c5c Content-Type:text / plain; charset = utf-8 Content-Transfer-Encoding:base64
PGh0bWw + PGJvZHk + PGgxPnRoaXMgaXMgaHRtbDwvaDE + PC9ib2R5PjwvaHRtbD4 =
- B_ALT_5596ca8577c5c Content-Type:text / html; charset = utf-8 Content-Transfer-Encoding:quoted-printable
PGh0bWw + PGJvZHk + PGgxPnRoaXMgaXMgaHRtbDwvaDE + PC9ib2R5PjwvaHRtbD4 = 3D
- B_ALT_5596ca8577c5c -
我找不到确切的问题。
我使用的是CodeIgniter版本2.1.3
。
答案 0 :(得分:0)
您必须将内容标题设置为Content-Transfer-Encoding:base64
。 CodeIgniter默认不设置此项。为此,您必须修改其电子邮件库或只是扩展其电子邮件类并添加此标题,以符合标准并确保您不破解核心。
答案 1 :(得分:0)
CodeIgniter版本2.1.3
没有base64
编码电子邮件的任何选项。在核心文件中编辑后,找到了解决方案。我已经分享了解决方案。
注意:这是对核心文件的攻击。如果您只需要base64编码的消息,请尝试它。否则,请创建其他库文件。
我们需要在库文件email.php中编辑一些东西。它位于“libraries / Email.php”。
<强> 1 / 强>
首先添加base64
作为编码选项。
修改:$_bit_depths
变量。
var $_bit_depths = array('7bit', '8bit','base64');
<强> 2 / 强>
然后发送控制器。在电子邮件配置中添加'_encoding' => 'base64'
。检查我的代码。
按照步骤1和2.然后执行以下步骤:
第3 / 强>
在Email.php文件中的,找到函数function _build_message()
。
在此功能中,找到switch ($this->_get_content_type())
并转到case 'html '
并删除或评论两个地方。
编辑代码如下:
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;
// change this to text/plain to text/html
$body .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
$body .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
// I have commented 3 lines
/*
$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;
*/
}
//Instead of this commented line, use line below.
//$this->_finalbody = $body . $this->_prep_quoted_printable($this->_body) . $this->newline . $this->newline;
$this->_finalbody = $body . $this->_body . $this->newline . $this->newline;
就是这样。现在base64编码的电子邮件将正确发送。