Files
dolibarr/doc/dev/php/html/CMailFile_8class_8php-source.html
2004-07-15 22:17:39 +00:00

158 lines
10 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>dolibarr: htdocs/lib/CMailFile.class.php Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Généré par Doxygen 1.3.7 -->
<div class="qindex"><a class="qindex" href="index.html">Page&nbsp;principale</a> | <a class="qindex" href="classes.html">Liste&nbsp;alphabétique</a> | <a class="qindex" href="annotated.html">Liste&nbsp;des&nbsp;classes</a> | <a class="qindex" href="files.html">Liste&nbsp;des&nbsp;fichiers</a> | <a class="qindex" href="functions.html">Membres&nbsp;de&nbsp;classe</a> | <a class="qindex" href="globals.html">Membres&nbsp;de&nbsp;fichier</a></div>
<h1>htdocs/lib/CMailFile.class.php</h1><a href="CMailFile_8class_8php.html">Aller à la documentation de ce fichier.</a><pre class="fragment"><div>00001 &lt;?php
00002 <span class="comment">/* notes from Dan Potter:</span>
00003 <span class="comment">Sure. I changed a few other things in here too though. One is that I let</span>
00004 <span class="comment">you specify what the destination filename is (i.e., what is shows up as in</span>
00005 <span class="comment">the attachment). This is useful since in a web submission you often can't</span>
00006 <span class="comment">tell what the filename was supposed to be from the submission itself. I</span>
00007 <span class="comment">also added my own version of chunk_split because our production version of</span>
00008 <span class="comment">PHP doesn't have it. You can change that back or whatever though =).</span>
00009 <span class="comment">Finally, I added an extra "\n" before the message text gets added into the</span>
00010 <span class="comment">MIME output because otherwise the message text wasn't showing up.</span>
00011 <span class="comment">/*</span>
00012 <span class="comment">note: someone mentioned a command-line utility called 'mutt' that </span>
00013 <span class="comment">can mail attachments.</span>
00014 <span class="comment">*/</span>
00015 <span class="comment">/* </span>
00016 <span class="comment">If chunk_split works on your system, change the call to my_chunk_split</span>
00017 <span class="comment">to chunk_split </span>
00018 <span class="comment">*/</span>
00019 <span class="comment">/* Note: if you don't have base64_encode on your sytem it will not work */</span>
00020
00039 <span class="comment">// simple class that encapsulates mail() with addition of mime file attachment.</span>
<a name="l00040"></a><a class="code" href="classCMailFile.html">00040</a> <span class="keyword">class </span><a class="code" href="classCMailFile.html">CMailFile</a>
00041 {
00042 var $subject;
00043 var $addr_to;
00044 var $addr_cc;
00045 var $text_body;
00046 var $text_encoded;
00047 var $mime_headers;
00048 var $mime_boundary = <span class="stringliteral">"--==================_846811060==_"</span>;
00049 var $smtp_headers;
00050
00063 <span class="comment">// CMail("sujet","email_to","email_from","email_msg",tableau du path de fichiers,tableau de type mime,tableau de noms fichiers,"chaine cc")</span>
<a name="l00064"></a><a class="code" href="classCMailFile.html#a0">00064</a> function <a class="code" href="classCMailFile.html">CMailFile</a>($subject,$to,$from,$msg,$filename_list,$mimetype_list,$mimefilename_list,$addr_cc = <span class="stringliteral">""</span>)
00065 {
00066 $this-&gt;subject = $subject;
00067 $this-&gt;addr_to = $to;
00068 $this-&gt;smtp_headers = $this-&gt;write_smtpheaders($from,$addr_cc);
00069 $this-&gt;text_body = $this-&gt;write_body($msg, $filename_list);
00070 <span class="keywordflow">if</span> (count($filename_list)) {
00071 $this-&gt;mime_headers = $this-&gt;write_mimeheaders($filename_list, $mimefilename_list);
00072 $this-&gt;text_encoded = $this-&gt;attach_file($filename_list,$mimetype_list,$mimefilename_list);
00073 }
00074 }
00075
00076 function attach_file($filename_list,$mimetype_list,$mimefilename_list)
00077 {
00078 <span class="keywordflow">for</span> ($i = 0; $i &lt; count($filename_list); $i++) {
00079 $encoded = $this-&gt;encode_file($filename_list[$i]);
00080 <span class="keywordflow">if</span> ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i];
00081 $out = $out . <span class="stringliteral">"--"</span> . $this-&gt;mime_boundary . <span class="stringliteral">"\n"</span>;
00082 <span class="keywordflow">if</span> (! $mimetype_list[$i]) { $mimetype_list[$i] = <span class="stringliteral">"application/octet-stream"</span>; }
00083 $out = $out . <span class="stringliteral">"Content-type: "</span> . $mimetype_list[$i] . <span class="stringliteral">"; name=\"$filename_list[$i]\";\n"</span>;
00084 $out = $out . <span class="stringliteral">"Content-Transfer-Encoding: base64\n"</span>;
00085 $out = $out . <span class="stringliteral">"Content-disposition: attachment; filename=\"$filename_list[$i]\"\n\n"</span>;
00086 $out = $out . $encoded . <span class="stringliteral">"\n"</span>;
00087 }
00088 $out = $out . <span class="stringliteral">"--"</span> . $this-&gt;mime_boundary . <span class="stringliteral">"--"</span> . <span class="stringliteral">"\n"</span>;
00089 <span class="keywordflow">return</span> $out;
00090 <span class="comment">// added -- to notify email client attachment is done</span>
00091 }
00092
00093 function encode_file($sourcefile)
00094 {
00095 <span class="comment">// print "&lt;pre&gt; on encode $sourcefile &lt;/pre&gt;\n";</span>
00096 <span class="keywordflow">if</span> (is_readable($sourcefile))
00097 {
00098 $fd = fopen($sourcefile, <span class="stringliteral">"r"</span>);
00099 $contents = fread($fd, filesize($sourcefile));
00100 $encoded = my_chunk_split(base64_encode($contents));
00101 fclose($fd);
00102 }
00103 <span class="keywordflow">return</span> $encoded;
00104 }
00105
00106 function sendfile()
00107 {
00108 $headers .= $this-&gt;smtp_headers . $this-&gt;mime_headers;
00109 $message = $this-&gt;text_body . $this-&gt;text_encoded;
00110 <span class="keywordflow">return</span> mail($this-&gt;addr_to,$this-&gt;subject,stripslashes($message),$headers);
00111 }
00112
00113 function write_body($msgtext, $filename_list)
00114 {
00115 <span class="keywordflow">if</span> (count($filename_list))
00116 {
00117 $out = <span class="stringliteral">"--"</span> . $this-&gt;mime_boundary . <span class="stringliteral">"\n"</span>;
00118 $out = $out . <span class="stringliteral">"Content-Type: text/plain; charset=\"iso8859-15\"\n\n"</span>;
00119 <span class="comment">// $out = $out . "Content-Type: text/plain; charset=\"us-ascii\"\n\n";</span>
00120 }
00121 $out = $out . $msgtext . <span class="stringliteral">"\n"</span>;
00122 <span class="keywordflow">return</span> $out;
00123 }
00124
00125 function write_mimeheaders($filename_list, $mimefilename_list) {
00126 $out = <span class="stringliteral">"MIME-version: 1.0\n"</span>;
00127 $out = $out . <span class="stringliteral">"Content-type: multipart/mixed; "</span>;
00128 $out = $out . <span class="stringliteral">"boundary=\"$this-&gt;mime_boundary\"\n"</span>;
00129 $out = $out . <span class="stringliteral">"Content-transfer-encoding: 7BIT\n"</span>;
00130 <span class="keywordflow">for</span>($i = 0; $i &lt; count($filename_list); $i++) {
00131 <span class="keywordflow">if</span> ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i];
00132 $out = $out . <span class="stringliteral">"X-attachments: $filename_list[$i];\n\n"</span>;
00133 }
00134 <span class="keywordflow">return</span> $out;
00135 }
00136
00137 function write_smtpheaders($addr_from,$addr_cc)
00138 {
00139 $out = <span class="stringliteral">"From: $addr_from\n"</span>;
00140 <span class="keywordflow">if</span>($addr_cc != <span class="stringliteral">""</span>)
00141 $out = $out . <span class="stringliteral">"Cc: $addr_cc\n"</span>;
00142 $out = $out . <span class="stringliteral">"Reply-To: $addr_from\n"</span>;
00143 $out = $out . <span class="stringliteral">"X-Mailer: Dolibarr version "</span> . DOL_VERSION .<span class="stringliteral">"\n"</span>;
00144 $out = $out . <span class="stringliteral">"X-Sender: $addr_from\n"</span>;
00145 <span class="keywordflow">return</span> $out;
00146 }
00147 }
00148
00149 <span class="comment">// usage - mimetype example "image/gif"</span>
00150 <span class="comment">// $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filename,$mimetype);</span>
00151 <span class="comment">// $mailfile-&gt;sendfile();</span>
00152
00153 <span class="comment">// Splits a string by RFC2045 semantics (76 chars per line, end with \r\n).</span>
00154 <span class="comment">// This is not in all PHP versions so I define one here manuall.</span>
00155 function my_chunk_split($str)
00156 {
00157 $stmp = $str;
00158 $len = strlen($stmp);
00159 $out = <span class="stringliteral">""</span>;
00160 <span class="keywordflow">while</span> ($len &gt; 0) {
00161 <span class="keywordflow">if</span> ($len &gt;= 76) {
00162 $out = $out . substr($stmp, 0, 76) . <span class="stringliteral">"\r\n"</span>;
00163 $stmp = substr($stmp, 76);
00164 $len = $len - 76;
00165 }
00166 <span class="keywordflow">else</span> {
00167 $out = $out . $stmp . <span class="stringliteral">"\r\n"</span>;
00168 $stmp = <span class="stringliteral">""</span>; $len = 0;
00169 }
00170 }
00171 <span class="keywordflow">return</span> $out;
00172 }
00173
00174 <span class="comment">// end script</span>
00175 ?&gt;
</div></pre><hr size="1"><address style="align: right;"><small>Généré le Fri Jul 16 00:31:06 2004 pour dolibarr par
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address>
</body>
</html>