Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Enhancing email component to allow using alias for attachments. Closes

  • Loading branch information...
commit 1b8165d8901076ebefce39f313dd276ed9d6c1c5 1 parent fdd8a51
@ADmad ADmad authored
View
17 cake/libs/controller/components/email.php
@@ -556,15 +556,15 @@ function _createHeader() {
if ($this->delivery == 'smtp') {
$headers['Subject'] = $this->_encode($this->subject);
}
-
+
if ($this->messageId !== false) {
if ($this->messageId === true) {
$headers['Message-ID'] = '<' . String::UUID() . '@' . env('HTTP_HOST') . '>';
} else {
- $headers['Message-ID'] = $this->messageId;
+ $headers['Message-ID'] = $this->messageId;
}
}
-
+
$headers['X-Mailer'] = $this->xMailer;
if (!empty($this->headers)) {
@@ -624,14 +624,17 @@ function _formatMessage($message) {
*/
function _attachFiles() {
$files = array();
- foreach ($this->attachments as $attachment) {
+ foreach ($this->attachments as $filename => $attachment) {
$file = $this->_findFiles($attachment);
if (!empty($file)) {
- $files[] = $file;
+ if (is_int($filename)) {
+ $filename = basename($file);
+ }
+ $files[$filename] = $file;
}
}
- foreach ($files as $file) {
+ foreach ($files as $filename => $file) {
$handle = fopen($file, 'rb');
$data = fread($handle, filesize($file));
$data = chunk_split(base64_encode($data)) ;
@@ -640,7 +643,7 @@ function _attachFiles() {
$this->__message[] = '--' . $this->__boundary;
$this->__message[] = 'Content-Type: application/octet-stream';
$this->__message[] = 'Content-Transfer-Encoding: base64';
- $this->__message[] = 'Content-Disposition: attachment; filename="' . basename($file) . '"';
+ $this->__message[] = 'Content-Disposition: attachment; filename="' . basename($filename) . '"';
$this->__message[] = '';
$this->__message[] = $data;
$this->__message[] = '';
View
28 cake/tests/cases/libs/controller/components/email.test.php
@@ -780,6 +780,32 @@ function testMultibyte() {
* @return void
* @access public
*/
+ function testSendWithAttachments() {
+ $this->Controller->EmailTest->to = 'postmaster@localhost';
+ $this->Controller->EmailTest->from = 'noreply@example.com';
+ $this->Controller->EmailTest->subject = 'Attachment Test';
+ $this->Controller->EmailTest->replyTo = 'noreply@example.com';
+ $this->Controller->EmailTest->template = null;
+ $this->Controller->EmailTest->delivery = 'debug';
+ $this->Controller->EmailTest->attachments = array(
+ __FILE__,
+ 'some-name.php' => __FILE__
+ );
+ $body = '<p>This is the body of the message</p>';
+
+ $this->Controller->EmailTest->sendAs = 'text';
+ $this->assertTrue($this->Controller->EmailTest->send($body));
+ $msg = $this->Controller->Session->read('Message.email.message');
+ $this->assertPattern('/' . preg_quote('Content-Disposition: attachment; filename="email.test.php"') . '/', $msg);
+ $this->assertPattern('/' . preg_quote('Content-Disposition: attachment; filename="some-name.php"') . '/', $msg);
+ }
+
+/**
+ * testSendAsIsNotIgnoredIfAttachmentsPresent method
+ *
+ * @return void
+ * @access public
+ */
function testSendAsIsNotIgnoredIfAttachmentsPresent() {
$this->Controller->EmailTest->to = 'postmaster@localhost';
$this->Controller->EmailTest->from = 'noreply@example.com';
@@ -812,7 +838,7 @@ function testSendAsIsNotIgnoredIfAttachmentsPresent() {
}
/**
- * undocumented function
+ * testNoDoubleNewlinesInHeaders function
*
* @return void
* @access public
Please sign in to comment.
Something went wrong with that request. Please try again.