0

我花了最后一天创建一个脚本,当客户从我们的网站购买东西时,它将创建一个 PDF 收据。创建 PDF 后,我使用ob_get_clean()将输出保存到变量

然后我把这个变量变成一个 base64_encoded 字符串。完成后,我将字符串保存到数据库中。现在,在那之后我想做的是获取字符串并以某种方式将其保存为电子邮件的附件,以便用户可以将其作为文件下载。我试过谷歌,但我没有发现任何真正有用的东西。

我找到了这个线程,但据我在 Codeigniter 电子邮件库中看到的(我可能错过了),请求的功能没有实现。这是请求,电子邮件类:从字符串添加附件

4

2 回答 2

2

您可以创建自己的库并使用 php 邮件功能和适当的标头发送电子邮件。

function send_email($to, $from, $subject, $body, $attachment_string)
{

$filename = "receipt.pdf";
$uid = md5(uniqid(time())); 
$attachment=chunk_split($attachment_string);

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$headers .= "From: <".$from.">\r\n";
$headers .= "This is a multi-part message in MIME format.\r\n";
$headers .= "--".$uid."\r\n";
$headers .= "Content-type:text/html; charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$headers .= $body."\r\n\r\n";
$headers .= "--".$uid."\r\n";
$headers .= "Content-Type: application/pdf; name=\"".basename($filename)."\"\r\n"; // use different content types here
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"".basename($filename)."\"\r\n\r\n";
$headers .= $attachment."\r\n\r\n";
$headers .= "--".$uid."--";

if(mail($to, $subject, $body, $headers))
{
    echo "success";
}

}
于 2012-05-09T09:50:32.773 回答
0

在 codeigniter 电子邮件类中,当我们将 mime 类型作为参数传递时,将执行以下代码。

$file_content =& $file; // buffered file

$this->_attachments[] = array(
        'name'      => array($file, $newname),
        'disposition'   => empty($disposition) ? 'attachment' :    $disposition,  // Can also be 'inline'  Not sure if it matters
        'type'      => $mime,
        'content'   => chunk_split(base64_encode($file_content)),
        'multipart' => 'mixed'
    );

chunk_split(base64_encode($file_content)) 将破坏我们传递给$this->email->attach()函数的 base64 文件。

所以我将代码更改为

    $file_content =& $file; // buffered file
    $file_content = ($this->_encoding == 'base64') ? $file_content   :  chunk_split(base64_encode($file_content));

现在附件数组为:

 $this->_attachments[] = array(
        'name'      => array($file, $newname),
        'disposition'   => empty($disposition) ? 'attachment' :  $disposition,  // Can also be 'inline'  Not sure if it matters
        'type'      => $mime,
        'content'   => $file_content,
        'multipart' => 'mixed'
    );

现在,当我使用以下命令初始化电子邮件时:

   $config['_bit_depths'] = array('7bit', '8bit','base64');
   $config['_encoding'] = 'base64'
   $this->load->library('email',$config);

可能是我做错了,但它有效。

   $this->email->attach($base64,'attachment','report.pdf','application/pdf');     

下载修改后的电子邮件类:

https://github.com/aqueeel/CI-Base64EmailAttach

于 2017-02-27T12:48:01.733 回答