使用CodeIgniter发送base64编码的电子邮件

时间:2015-07-03 17:13:14

标签: php codeigniter html-email

我正在尝试使用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

2 个答案:

答案 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'。检查我的代码。

对于HTML消息

按照步骤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编码的电子邮件将正确发送。