1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-18 21:02:41 +01:00
phorge-phorge/externals/mimemailparser/attachment.class.php
epriestley 25dee6ecd2 Support email replies in Phabricator
Summary:
Provides support for per-user x per-object unique reply-to email addresses, plus
SMTP integration.

This does not actually make Phabricator use these in outbound email.

Test Plan:
Used test console to validate in-Phabricator routing and handling.

Piped emails into the "mail_handler.php" script to validate mail parsing.

Configured sendmail and sent mail to Phabricator.

Technically I haven't conducted all parts of this test on the same machine since
I lost the will to configure more SMTP servers after configuring phabricator.com

Reviewed By: jungejason
Reviewers: jungejason, tuomaspelkonen, aran
CC: aran, epriestley, jungejason
Differential Revision: 226
2011-05-05 14:58:57 -07:00

136 lines
2.8 KiB
PHP

<?php
/**
* Model of an Attachment
*/
class MimeMailParser_attachment {
/**
* @var $filename Filename
*/
public $filename;
/**
* @var $content_type Mime Type
*/
public $content_type;
/**
* @var $content File Content
*/
private $content;
/**
* @var $extension Filename extension
*/
private $extension;
/**
* @var $content_disposition Content-Disposition (attachment or inline)
*/
public $content_disposition;
/**
* @var $headers An Array of the attachment headers
*/
public $headers;
private $stream;
public function __construct($filename, $content_type, $stream, $content_disposition = 'attachment', $headers = array()) {
$this->filename = $filename;
$this->content_type = $content_type;
$this->stream = $stream;
$this->content = null;
$this->content_disposition = $content_disposition;
$this->headers = $headers;
}
/**
* retrieve the attachment filename
* @return String
*/
public function getFilename() {
return $this->filename;
}
/**
* Retrieve the Attachment Content-Type
* @return String
*/
public function getContentType() {
return $this->content_type;
}
/**
* Retrieve the Attachment Content-Disposition
* @return String
*/
public function getContentDisposition() {
return $this->content_disposition;
}
/**
* Retrieve the Attachment Headers
* @return String
*/
public function getHeaders() {
return $this->headers;
}
/**
* Retrieve the file extension
* @return String
*/
public function getFileExtension() {
if (!$this->extension) {
$ext = substr(strrchr($this->filename, '.'), 1);
if ($ext == 'gz') {
// special case, tar.gz
// todo: other special cases?
$ext = preg_match("/\.tar\.gz$/i", $ext) ? 'tar.gz' : 'gz';
}
$this->extension = $ext;
}
return $this->extension;
}
/**
* Read the contents a few bytes at a time until completed
* Once read to completion, it always returns false
* @return String
* @param $bytes Int[optional]
*/
public function read($bytes = 2082) {
return feof($this->stream) ? false : fread($this->stream, $bytes);
}
/**
* Retrieve the file content in one go
* Once you retreive the content you cannot use MimeMailParser_attachment::read()
* @return String
*/
public function getContent() {
if ($this->content === null) {
fseek($this->stream, 0);
while(($buf = $this->read()) !== false) {
$this->content .= $buf;
}
}
return $this->content;
}
/**
* Allow the properties
* MimeMailParser_attachment::$name,
* MimeMailParser_attachment::$extension
* to be retrieved as public properties
* @param $name Object
*/
public function __get($name) {
if ($name == 'content') {
return $this->getContent();
} else if ($name == 'extension') {
return $this->getFileExtension();
}
return null;
}
}
?>