Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

tests: Mail\Message produced output not usable by Storage\Message #159

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions test/Storage/MessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Zend\Mail\Storage\Message;
use Zend\Mime;
use Zend\Mime\Exception as MimeException;
use Zend\Mail;

/**
* @group Zend_Mail
Expand Down Expand Up @@ -415,6 +416,35 @@ public function testMultivalueToHeader()
$this->assertEquals('nicpoń', $addressList->get('[email protected]')->getName());
}

/**
* Test case for creating mail with Mail\Message containing \n\n,
* serializing it to text and loading with Storage\Message.
*
* Testcase showing that if mail is created with text body
* that is \n separated, loading such mail with Storage\Message
* causes parse error because it goes into mail body to find headers.
*/
public function testDogFood() {
$text = "Hello, bödi tekst\n\nBye";

$part = new Mime\Part($text);
$part->type = 'text/plain';
$part->charset = 'UTF-8';

$mime = new Mime\Message();
$mime->addPart($part);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

None of the preceding 7 lines are ever used within the test. Is your setup missing something (attaching a MIME part to the message)? Or can the lines be removed safely?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think they can be removed as the reproducer worked. otherwise i wouldn't had pushed it this way.


$message = new Mail\Message();
$message->setEncoding('UTF-8');
$message->setBody($text);

$raw = $message->toString();
$this->assertContains($text, $raw, "original text is preserved");

$message = new Storage\Message(['raw' => $raw]);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a Zend\Mime\Decode::splitMessage() issue.

Zend\Mail\Storage\Part calls on that method to split the message into headers and content. My suspicion is that it's searching until the last occurence of the \n\n sequence, instead of the first.

Can you please try and create and post a reproduce case against the zend-mime component? Thanks in advance!

$this->assertNotNull($message);
}

public function filesProvider()
{
$filePath = __DIR__ . '/../_files/mail.txt';
Expand Down