Shikiryu_Backup/app/code/Transport/Email.php

291 lines
8.3 KiB
PHP
Raw Normal View History

2015-07-03 00:00:30 +02:00
<?php
2015-07-10 19:07:14 +02:00
namespace Shikiryu\Backup\Transport;
class Email extends TransportAbstract
2015-07-09 00:46:17 +02:00
{
2015-07-03 00:00:30 +02:00
2015-07-09 00:46:17 +02:00
private $to;
private $from;
private $encoding;
private $subject;
private $message;
private $files;
private $streams;
2015-07-03 00:00:30 +02:00
public static $mimeTypes = array(
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'php' => 'text/html',
'css' => 'text/css',
'js' => 'application/javascript',
'json' => 'application/json',
'xml' => 'application/xml',
'xslt' => 'application/xslt+xml',
'xsl' => 'application/xml',
'dtd' => 'application/xml-dtd',
'atom' => 'application/atom+xml',
'mathml' => 'application/mathml+xml',
'rdf' => 'application/rdf+xml',
'smi' => 'application/smil',
'smil' => 'application/smil',
'vxml' => 'application/voicexml+xml',
'latex' => 'application/x-latex',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'wrl' => 'model/vrml',
'wrml' => 'model/vrml',
'ics' => 'text/calendar',
'ifb' => 'text/calendar',
'sgml' => 'text/sgml',
'htc' => 'text/x-component',
// images
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
'ico' => 'image/x-icon',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
// archives
'zip' => 'application/zip',
'rar' => 'application/x-rar-compressed',
'exe' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'cab' => 'application/vnd.ms-cab-compressed',
'tar' => 'application/x-tar',
'gz' => 'application/x-gzip',
'tgz' => 'application/x-gzip',
// audio/video
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'wav' => 'audio/wav',
'aiff' => 'audio/aiff',
'aif' => 'audio/aiff',
'avi' => 'video/msvideo',
'wmv' => 'video/x-ms-wmv',
'ogg' => 'application/ogg',
'flv' => 'video/x-flv',
'dvi' => 'application/x-dvi',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'm3u' => 'audio/x-mpegurl',
'm4u' => 'video/vnd.mpegurl',
'ram' => 'audio/x-pn-realaudio',
'ra' => 'audio/x-pn-realaudio',
'rm' => 'application/vnd.rn-realmedia',
// adobe
'pdf' => 'application/pdf',
'psd' => 'image/vnd.adobe.photoshop',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'swf' => 'application/x-shockwave-flash',
// ms office
'doc' => 'application/msword',
'docx' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'xlm' => 'application/vnd.ms-excel',
'xla' => 'application/vnd.ms-excel',
'xld' => 'application/vnd.ms-excel',
'xlt' => 'application/vnd.ms-excel',
'xlc' => 'application/vnd.ms-excel',
'xlw' => 'application/vnd.ms-excel',
'xll' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'pps' => 'application/vnd.ms-powerpoint',
// open office
'odt' => 'application/vnd.oasis.opendocument.text',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
);
/**
* Determine mime type
*
* @param string $file path to the file
*
* @return string
*/
public static function getMimeType($file) {
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = (string) finfo_file($finfo, $file);
finfo_close($finfo);
return $type;
} else if (function_exists('mime_content_type')) {
return mime_content_type($file);
} else {
$ext = strtolower(array_pop(explode('.', $file)));
if (array_key_exists($ext, self::$mimeTypes))
return self::$mimeTypes[$ext];
else
return 'application/octet-stream';
}
}
/**
2015-07-09 00:46:17 +02:00
* @param Shikiryu_Backup_Abstract $backup
2015-07-03 00:00:30 +02:00
*/
2015-07-09 00:46:17 +02:00
public function __construct(Shikiryu_Backup_Abstract $backup) {
parent::__construct($backup);
$this->setFiles($this->backup->getFilesToBackup());
$this->setStreams($this->backup->getStreamsToBackup());
$this->to = $this->config['to'];
$this->from = $this->config['from'];
$this->encoding = $this->config['encoding'];
$this->subjet = $this->config['subject'];
$this->message = $this->config['message'];
$this->encoding = $this->config['encoding'];
2015-07-03 00:00:30 +02:00
}
/**
* Add a recipient
*
* @param string $to
*
* @return $this
*/
2015-07-09 00:46:17 +02:00
private function addTo($to)
{
$this->to = $to;
2015-07-03 00:00:30 +02:00
return $this;
}
/**
* Add the sender
*
* @param $from
*
* @return $this
*/
2015-07-09 00:46:17 +02:00
private function setFrom($from)
{
$this->from = $from;
2015-07-03 00:00:30 +02:00
return $this;
}
/**
* Add the subject
*
* @param $sub
*
* @return $this
*/
2015-07-09 00:46:17 +02:00
private function setSubject($sub)
{
$this->subject = strip_tags($sub);
2015-07-03 00:00:30 +02:00
return $this;
}
/**
* Add the message (in text)
*
* @param $mes
*
* @return $this
*/
2015-07-09 00:46:17 +02:00
private function setMessage($mes)
{
$this->message = strip_tags($mes);
2015-07-03 00:00:30 +02:00
return $this;
}
2015-07-09 00:46:17 +02:00
private function setFiles($files = array())
{
2015-07-03 00:00:30 +02:00
if (is_array($files) && !empty($files)) {
2015-07-09 00:46:17 +02:00
$this->files = $files;
2015-07-03 00:00:30 +02:00
}
return $this;
}
2015-07-09 00:46:17 +02:00
private function setStreams($streams = array())
{
2015-07-03 00:00:30 +02:00
if (is_array($streams) && !empty($streams)) {
2015-07-09 00:46:17 +02:00
$this->streams = $streams;
2015-07-03 00:00:30 +02:00
}
return $this;
}
/**
* Send the mail
*
* @see #mail
*
* @return bool
*/
2015-07-09 00:46:17 +02:00
public function send() {
2015-07-03 00:00:30 +02:00
// Checking files are selected
$zip = new ZipArchive(); // Load zip library
$zip_name = time().".zip"; // Zip name
if($zip->open(dirname(__FILE__).'/bu/'.$zip_name, ZIPARCHIVE::CREATE)==TRUE) {
2015-07-09 00:46:17 +02:00
if(!empty($this->files)) {
foreach($this->files as $file)
2015-07-03 00:00:30 +02:00
{
$zip->addFile($file); // Adding files into zip
}
}
$zip->close();
}
2015-07-09 00:46:17 +02:00
$this->files = array(dirname(__FILE__).'/bu/'.$zip_name=>dirname(__FILE__).'/bu/'.$zip_name);
2015-07-03 00:00:30 +02:00
$random_hash = md5(date('r', time()));
2015-07-09 00:46:17 +02:00
$headers = "From: " . $this->from . "\r\nReply-To: " . $this->from;
2015-07-03 00:00:30 +02:00
$headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"" . $random_hash . "\"";
$output = "
--$random_hash
2015-07-09 00:46:17 +02:00
Content-Type: text/plain; charset='" . strtolower($this->encoding) . "'
2015-07-03 00:00:30 +02:00
Content-Transfer-Encoding: 8bit
2015-07-09 00:46:17 +02:00
" . $this->message . "\r\n";
2015-07-03 00:00:30 +02:00
2015-07-09 00:46:17 +02:00
if(!empty($this->files))
foreach($this->files as $file=>$name) {
2015-07-03 00:00:30 +02:00
$name = end(explode('/', $name));
$output .= "
--$random_hash
Content-Type: " . self::getMimeType($file) . "; name=" . $name . "
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=" . $name . "
" . chunk_split(base64_encode(file_get_contents($file)));
}
2015-07-09 00:46:17 +02:00
if(!empty($this->streams))
foreach($this->streams as $name=>$stream) {
2015-07-03 00:00:30 +02:00
if(count(explode('.',$name))<2) $name = 'backup'.$name.'.txt';
$output .= "
--$random_hash
Content-Type: text/plain; name=" . $name . "
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=" . $name . "
" . chunk_split(base64_encode($stream));
}
$output.="--$random_hash--";
2015-07-09 00:46:17 +02:00
return mail($this->to, $this->subject, $output, $headers);
2015-07-03 00:00:30 +02:00
}
}
?>