diff --git a/src/Header/HeaderLoader.php b/src/Header/HeaderLoader.php index 10eb4014..401affc0 100644 --- a/src/Header/HeaderLoader.php +++ b/src/Header/HeaderLoader.php @@ -32,6 +32,7 @@ class HeaderLoader extends PluginClassLoader 'content-type' => 'Zend\Mail\Header\ContentType', 'date' => 'Zend\Mail\Header\Date', 'from' => 'Zend\Mail\Header\From', + 'message-id' => 'Zend\Mail\Header\MessageId', 'mimeversion' => 'Zend\Mail\Header\MimeVersion', 'mime_version' => 'Zend\Mail\Header\MimeVersion', 'mime-version' => 'Zend\Mail\Header\MimeVersion', diff --git a/src/Header/MessageId.php b/src/Header/MessageId.php new file mode 100644 index 00000000..9a8f2823 --- /dev/null +++ b/src/Header/MessageId.php @@ -0,0 +1,121 @@ +setId($value); + + return $header; + } + + public function getFieldName() + { + return 'Message-ID'; + } + + public function getFieldValue($format = HeaderInterface::FORMAT_RAW) + { + return $this->messageId; + } + + public function setEncoding($encoding) + { + // This header must be always in US-ASCII + return $this; + } + + public function getEncoding() + { + return 'ASCII'; + } + + public function toString() + { + return 'Message-ID: ' . $this->getFieldValue(); + } + + /** + * Set the message id + * + * @return MessageId + */ + public function setId($id = null) + { + if ($id === null) { + $id = $this->createMessageId(); + } + + $id = sprintf('<%s>', $id); + $this->messageId = $id; + return $this; + } + + /** + * Retrieve the message id + * + * @return string + */ + public function getId() + { + return $this->messageId; + } + + /** + * Creates the Message-ID + * + * @return string + */ + public function createMessageId() { + + $time = time(); + + if (isset($_SERVER['REMOTE_ADDR'])) { + $user = $_SERVER['REMOTE_ADDR']; + } else { + $user = getmypid(); + } + + $rand = mt_rand(); + + if (isset($_SERVER["SERVER_NAME"])) { + $hostName = $_SERVER["SERVER_NAME"]; + } else { + $hostName = php_uname('n'); + } + + return sha1($time . $user . $rand) . '@' . $hostName; + } + +} diff --git a/test/Header/MessageIdTest.php b/test/Header/MessageIdTest.php new file mode 100644 index 00000000..9443ba94 --- /dev/null +++ b/test/Header/MessageIdTest.php @@ -0,0 +1,40 @@ +setId($id); + + $expected = sprintf('<%s>', $id); + $this->assertEquals($expected, $messageid->getFieldValue()); + } + + public function testAutoGeneration() + { + $messageid = new Header\MessageId(); + $messageid->setId(); + + $this->assertContains('@', $messageid->getFieldValue()); + } +} diff --git a/test/_files/mail.txt b/test/_files/mail.txt index 5bba2339..52587bac 100644 --- a/test/_files/mail.txt +++ b/test/_files/mail.txt @@ -3,6 +3,7 @@ Subject: multipart Date: Sun, 01 Jan 2000 00:00:00 +0000 From: =?UTF-8?Q?"Peter M=C3=BCller"?= ContENT-type: multipart/alternative; boUNDary="crazy-multipart" +Message-ID: MIME-version: 1.0 multipart message