phpcompta-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpcompta-dev] r5596 - phpcompta/trunk/include


From: phpcompta-dev
Subject: [Phpcompta-dev] r5596 - phpcompta/trunk/include
Date: Tue, 17 Dec 2013 18:28:09 +0100 (CET)

Author: danydb
Date: 2013-12-17 18:28:09 +0100 (Tue, 17 Dec 2013)
New Revision: 5596

Added:
   phpcompta/trunk/include/class_filetosend.php
   phpcompta/trunk/include/class_sendmail.php
Log:
Task #946 : envoi de fichier par email
Task #946 - Envoi de fichier par email

Added: phpcompta/trunk/include/class_filetosend.php
===================================================================
--- phpcompta/trunk/include/class_filetosend.php                                
(rev 0)
+++ phpcompta/trunk/include/class_filetosend.php        2013-12-17 17:28:09 UTC 
(rev 5596)
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @brief  file to add to a message
+ *
+ * @see Sendmail
+ * @author dany
+ */
+class FileToSend
+{
+    var $filename;
+    var $type;
+    var $path;
+    var $full_name;
+    function __construct($p_filename,$p_type="")
+    {
+        $this->full_name=$p_filename;
+        if (strpos($p_filename,'/') != false)
+        {
+            $this->path=dirname($p_filename);
+        }
+        $this->filename=basename ($p_filename);
+        if ( $p_type=="")
+        {
+            $this->guess_type();
+            
+        }
+    }
+    function guess_type()
+    {
+        $ext_pos=  strrpos($this->filename,'.');
+        if ( $ext_pos == false ) {
+            $this->type="application/octect";
+            return;
+        }
+        $ext=  substr($this->filename, $ext_pos+1, 3);
+        switch ($ext)
+        {
+            case 'odt':
+                $this->type='application/vnd.oasis.opendocument.text';
+                break;
+            case 'ods':
+                $this->type='application/vnd.oasis.opendocument.spreadsheet';
+                break;
+            case 'pdf':
+                $this->type="application/pdf";
+                break;
+            case 'zip':
+                $this->type="application/zip";
+                break;
+            default:
+                $this->type="application/octect";
+        }
+        
+    }
+  
+}

Added: phpcompta/trunk/include/class_sendmail.php
===================================================================
--- phpcompta/trunk/include/class_sendmail.php                          (rev 0)
+++ phpcompta/trunk/include/class_sendmail.php  2013-12-17 17:28:09 UTC (rev 
5596)
@@ -0,0 +1,141 @@
+<?php
+
+
+/**
+ * Description of class_sendmail
+ *
+ * @author dany
+ */
+require_once 'class_filetosend.php';
+
+class Sendmail
+{
+
+    private $mailto;
+    private $afile;
+    private $subject;
+    private $message;
+    private $from;
+    private $content;
+
+    /**
+     * set the from
+     * @parameter $p_from has the form name <address@hidden>
+     */
+    function set_from($p_from)
+    {
+        $this->from = $p_from;
+    }
+
+    /**
+     * 
+     * @param $p_subject set the subject
+     */
+    function set_subject($p_subject)
+    {
+        $this->subject = $p_subject;
+    }
+
+    /**
+     * set the recipient
+     * @param type $p_mailto has the form name <address@hidden>
+     */
+    function mailto($p_mailto)
+    {
+        $this->mailto = $p_mailto;
+    }
+
+    /**
+     * body of the message (utf8)
+     * @param type $p_message
+     */
+    function set_message($p_message)
+    {
+        $this->message = $p_message;
+    }
+
+    /**
+     * Add file to the message
+     * @param FileToSend $file file to add to the message
+     */
+    function add_file(FileToSend $file)
+    {
+        $this->afile[] = $file;
+    }
+
+    /**
+     *  verify that the message is ready to go
+     * @throws Exception
+     */
+    function verify()
+    {
+        $array = explode(",", "from,subject,mailto,message");
+        for ($i = 0; $i < count($array); $i++)
+        {
+            $name = $array[$i];
+            if (trim($this->$name) == "")
+            {
+                throw new Exception("$name est vide");
+            }
+        }
+    }
+    /**
+    * create the message before sending
+    */
+    function compose()
+    {
+        $this->verify();
+        $uid = md5(uniqid(time()));
+
+        // a random hash will be necessary to send mixed content
+        $separator = md5(time());
+
+        // carriage return type (we use a PHP end of line constant)
+        $eol = PHP_EOL;
+
+        // main header (multipart mandatory)
+        $headers = "From: " . $this->from . $eol;
+        $headers .= "MIME-Version: 1.0" . $eol;
+        $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator 
. "\"" . $eol . $eol;
+        $headers .= "Content-Transfer-Encoding: 7bit" . $eol;
+        $headers .= "This is a MIME encoded message." . $eol . $eol;
+        $headers .= $eol . $eol;
+
+        // message
+        $headers .= "--" . $separator . $eol;
+        $headers .= "Content-Type: text/plain; charset=\"utf-8\"" . $eol;
+        $headers .= "Content-Transfer-Encoding: 7bit" . $eol . $eol;
+        $headers .= $this->message . $eol . $eol;
+
+        // attachment
+        for ($i = 0; $i < count($this->afile); $i++)
+        {
+            $file = $this->afile[$i];
+            $file_size = filesize($file->full_name);
+            $handle = fopen($file->full_name, "r");
+            $content = fread($handle, $file_size);
+            fclose($handle);
+            $content = chunk_split(base64_encode($content));
+            $headers .= "--" . $separator . $eol;
+            $headers .= "Content-Type: " . $file->type . "; name=\"" . 
$file->filename . "\"" . $eol;
+            $headers .= "Content-Disposition: attachment; filename=\"" . 
$file->filename . "\"" . $eol;
+            $headers .= "Content-Transfer-Encoding: base64" . $eol;
+            $headers .= $content . $eol . $eol;
+        }
+        $headers .= "--" . $separator . "--";
+        $this->content = $headers;
+    }
+    /**
+     * Send the message 
+     * @throws Exception
+     */
+    function send()
+    {
+        //SEND Mail
+        if (!mail($this->mailto, $this->subject, "", $this->content))
+        {
+            throw new Exception('send failed');
+        }
+    }
+
+}



---
PhpCompta est un logiciel de comptabilité libre en ligne (full web)
Projet opensource http://www.phpcompta.eu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]