CodeIgniter 重命名电子邮件附件文件
Posted
技术标签:
【中文标题】CodeIgniter 重命名电子邮件附件文件【英文标题】:CodeIgniter rename email attachment file 【发布时间】:2013-08-10 07:08:03 【问题描述】:我有用于发送带有附件的电子邮件的 CodeIgniter 脚本。
$this->ci->email->attach("/path/to/file/myjhxvbXhjdSycv1y.pdf");
效果很好,但我不知道如何将附件重命名为更用户友好的字符串?
【问题讨论】:
rename()
附加文件之前服务器上的文件。
我无法在服务器目录上重命名它。发送前必须“即时”执行
您必须修改 CI 的电子邮件库才能使其正常工作。就目前的库而言,这是不可能的,尽管它是一个相当容易的修改。
很好,它有效,谢谢你的帮助!
【参考方案1】:
CodeIgniter v3.x
从CI v3开始添加此功能:
/**
* Assign file attachments
*
* @param string $file Can be local path, URL or buffered content
* @param string $disposition = 'attachment'
* @param string $newname = NULL
* @param string $mime = ''
* @return CI_Email
*/
public function attach($file, $disposition = '', $newname = NULL, $mime = '')
根据user guide:
如果您想使用自定义文件名,可以使用第三个 参数:
$this->email->attach('filename.pdf', 'attachment', 'report.pdf');
CodeIgniter v2.x
但是对于 CodeIgniter v2.x,您可以扩展 Email
库来实现它:
-
创建
system/libraries/Email.php
的副本并将其放入application/libraries/
重命名文件并添加MY_
前缀(或您在config.php
中设置的任何内容)application/libraries/MY_Email.php
打开文件并更改以下内容:
首先:在#72行插入:
var $_attach_new_name = array();
第二:将#161-166行的代码改为:
if ($clear_attachments !== FALSE)
$this->_attach_new_name = array();
$this->_attach_name = array();
$this->_attach_type = array();
$this->_attach_disp = array();
第三:在#409行找到attach()
函数并将其更改为:
public function attach($filename, $disposition = 'attachment', $new_name = NULL)
$this->_attach_new_name[] = $new_name;
$this->_attach_name[] = $filename;
$this->_attach_type[] = $this->_mime_types(pathinfo($filename, PATHINFO_EXTENSION));
$this->_attach_disp[] = $disposition; // Can also be 'inline' Not sure if it matters
return $this;
第四:最后在#1143行将代码更改为:
$basename = ($this->_attach_new_name[$i] === NULL)
? basename($filename) : $this->_attach_new_name[$i];
用法
$this->email->attach('/path/to/fileName.ext', 'attachment', 'newFileName.ext');
【讨论】:
Hashem 的回答很棒,但您必须覆盖到核心 Email.php 库,因此无需在副本前加上 MY_【参考方案2】:该方法也适用于 CodeIgniter v1.7x
但你一定不要忘记修改下面的这个函数来添加$this->_attach_new_name
也被清理:
public function clear($clear_attachments = FALSE)
$this->_subject = "";
$this->_body = "";
$this->_finalbody = "";
$this->_header_str = "";
$this->_replyto_flag = FALSE;
$this->_recipients = array();
$this->_cc_array = array();
$this->_bcc_array = array();
$this->_headers = array();
$this->_debug_msg = array();
$this->_set_header('User-Agent', $this->useragent);
$this->_set_header('Date', $this->_set_date());
if ($clear_attachments !== FALSE)
$this->_attach_new_name = array();
$this->_attach_name = array();
$this->_attach_type = array();
$this->_attach_disp = array();
return $this;
【讨论】:
以上是关于CodeIgniter 重命名电子邮件附件文件的主要内容,如果未能解决你的问题,请参考以下文章
当我有来自的命名附件时,Outlook 365 不接受 Python 电子邮件消息库输出