PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/version/1.1.2/manual/website/mail.sending

https://bitbucket.org/solarphp/docs
Unknown | 375 lines | 356 code | 19 blank | 0 comment | 0 complexity | e371d513908f9c5eb63afbbb2e7d3cab MD5 | raw file
Possible License(s): IPL-1.0, LGPL-2.0, Apache-2.0, 0BSD
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <title>9.4. Sending Messages</title>
  7. <link rel="stylesheet" href="style.css" type="text/css" />
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2" />
  9. <link rel="home" href="index" title="The Solar Framework for PHP" />
  10. <link rel="up" href="mail" title="Chapter 9. Mail" />
  11. <link rel="prev" href="mail.attachments" title="9.3. Message Attachments" />
  12. <link rel="next" href="pt02" title="Part II. Appendices" />
  13. <link rel="part" href="pt01" title="Part I. Getting Started" />
  14. <link rel="chapter" href="blog-demo" title="Chapter 1. Quick-Start Blog Demo" />
  15. <link rel="chapter" href="dispatch-cycle" title="Chapter 2. Dynamic Dispatch Cycle" />
  16. <link rel="chapter" href="model" title="Chapter 3. Working With Models" />
  17. <link rel="chapter" href="related" title="Chapter 4. Working With Related Models" />
  18. <link rel="chapter" href="views" title="Chapter 5. Views and Layouts" />
  19. <link rel="chapter" href="form" title="Chapter 6. Models and Forms" />
  20. <link rel="chapter" href="user" title="Chapter 7. User Authentication, Roles, and Access Control" />
  21. <link rel="chapter" href="commands" title="Chapter 8. Command-Line Tools" />
  22. <link rel="chapter" href="mail" title="Chapter 9. Mail" />
  23. <link rel="part" href="pt02" title="Part II. Appendices" />
  24. <link rel="appendix" href="appendix-standards" title="Appendix A. Project Standards" />
  25. <link rel="appendix" href="appendix-naming" title="Appendix B. Naming Conventions" />
  26. <link rel="subsection" href="mail.sending#mail.sending.transport" title="9.4.1. Using a Transport" />
  27. <link rel="subsection" href="mail.sending#mail.sending.transport-di" title="9.4.2. Transport Dependency-Injection" />
  28. </head>
  29. <body>
  30. <div class="navheader">
  31. <table width="100%" summary="Navigation header">
  32. <tr>
  33. <th colspan="3" align="center">9.4. Sending Messages</th>
  34. </tr>
  35. <tr>
  36. <td width="20%" align="left"><a accesskey="p" href="mail.attachments">Prev</a> </td>
  37. <th width="60%" align="center">Chapter 9. Mail</th>
  38. <td width="20%" align="right"> <a accesskey="n" href="pt02">Next</a></td>
  39. </tr>
  40. </table>
  41. </div>
  42. <div class="sect1" title="9.4. Sending Messages">
  43. <div class="titlepage">
  44. <div>
  45. <div>
  46. <h2 class="title" style="clear: both"><a id="mail.sending"></a>9.4. Sending Messages</h2>
  47. </div>
  48. </div>
  49. </div>
  50. <p>
  51. Now that we have a message to send, let's actually get it out there. To send the message,
  52. we need to pick what kind of "transport" we're going to use, then send the message through
  53. that transport.
  54. </p>
  55. <div class="sect2" title="9.4.1. Using a Transport">
  56. <div class="titlepage">
  57. <div>
  58. <div>
  59. <h3 class="title"><a id="mail.sending.transport"></a>9.4.1. Using a Transport</h3>
  60. </div>
  61. </div>
  62. </div>
  63. <p>
  64. Solar comes with two <code class="literal">Solar_Mail_Transport</code> adapters: the Phpmail one, which uses
  65. <a class="link" href="http://php.net/manual/en/function.mail.php" target="_top">mail()</a>
  66. internally, and an SMTP factory-adapter one, which takes a little more setup but is a
  67. lot more robust.
  68. </p>
  69. <div class="sect3" title="9.4.1.1. The PHP mail() Transport">
  70. <div class="titlepage">
  71. <div>
  72. <div>
  73. <h4 class="title"><a id="mail.sending.transport.php-mail"></a>9.4.1.1. The PHP mail() Transport</h4>
  74. </div>
  75. </div>
  76. </div>
  77. <p>
  78. Easy one first: the mail()-based adapter.
  79. </p>
  80. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  81. $mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">);
  82. </span><span style="color: #FF8000">// .. build the message ...
  83. // build a transport and send the message
  84. </span><span style="color: #0000BB">$transport </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Transport'</span><span style="color: #007700">, array(
  85. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Phpmail'
  86. </span><span style="color: #007700">));
  87. </span><span style="color: #0000BB">$transport</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">$mail</span><span style="color: #007700">);
  88. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  89. </div>
  90. <div class="sect3" title="9.4.1.2. The Solar_Smtp Transport">
  91. <div class="titlepage">
  92. <div>
  93. <div>
  94. <h4 class="title"><a id="mail.sending.transport.solar-smtp"></a>9.4.1.2. The Solar_Smtp Transport</h4>
  95. </div>
  96. </div>
  97. </div>
  98. <p>
  99. The SMTP factory-adapter is a little more complicated, but still not too hard.
  100. We need to build an <a class="link" href="http://solarphp.com/apidoc/class.Solar_Smtp.Overview" target="_top">SMTP connection object</a>,
  101. then tell the SMTP transport adapter to use it, then send the message.
  102. </p>
  103. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  104. $mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">);
  105. </span><span style="color: #FF8000">// ...
  106. // build an SMTP connection object
  107. </span><span style="color: #0000BB">$smtp </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Smtp'</span><span style="color: #007700">, array(
  108. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_NoAuth'</span><span style="color: #007700">,
  109. </span><span style="color: #DD0000">'host' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail.example.com'</span><span style="color: #007700">,
  110. ));
  111. </span><span style="color: #FF8000">// build a transport and send the message
  112. </span><span style="color: #0000BB">$transport </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Transport'</span><span style="color: #007700">, array(
  113. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">,
  114. </span><span style="color: #DD0000">'smtp' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$smtp</span><span style="color: #007700">,
  115. ));
  116. </span><span style="color: #0000BB">$transport</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #0000BB">$mail</span><span style="color: #007700">);
  117. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  118. <p>
  119. The SMTP connection object is itself a factory, and has adapters for various kinds of authentication:
  120. </p>
  121. <div class="itemizedlist">
  122. <ul class="itemizedlist" type="disc">
  123. <li class="listitem">
  124. <p>
  125. <a class="link" href="http://solarphp.com/apidoc/class.Solar_Smtp_Adapter_NoAuth.Overview" target="_top">none (the default)</a>
  126. </p>
  127. </li>
  128. <li class="listitem">
  129. <p>
  130. <a class="link" href="http://solarphp.com/apidoc/class.Solar_Smtp_Adapter_PlainAuth.Overview" target="_top">plain</a>
  131. </p>
  132. </li>
  133. <li class="listitem">
  134. <p>
  135. <a class="link" href="http://solarphp.com/apidoc/class.Solar_Smtp_Adapter_LoginAuth.Overview" target="_top">login</a>
  136. </p>
  137. </li>
  138. <li class="listitem">
  139. <p>
  140. <a class="link" href="http://solarphp.com/apidoc/class.Solar_Smtp_Adapter_CramMd5Auth.Overview" target="_top">CRAM-MD5</a>
  141. </p>
  142. </li>
  143. </ul>
  144. </div>
  145. <p>
  146. </p>
  147. </div>
  148. </div>
  149. <div class="sect2" title="9.4.2. Transport Dependency-Injection">
  150. <div class="titlepage">
  151. <div>
  152. <div>
  153. <h3 class="title"><a id="mail.sending.transport-di"></a>9.4.2. Transport Dependency-Injection</h3>
  154. </div>
  155. </div>
  156. </div>
  157. <p>
  158. Instead of building a transport every time you send an email, you can configure a
  159. transport for the mail message as a dependency injection. Then the mail message will
  160. be able to "send itself" using that injected transport. For <code class="literal">Solar_Mail_Message</code>,
  161. the config key for the transport injection is transport.
  162. </p>
  163. <div class="sect3" title="9.4.2.1. Injecting From Config Array">
  164. <div class="titlepage">
  165. <div>
  166. <div>
  167. <h4 class="title"><a id="mail.sending.transport-di.config-array"></a>9.4.2.1. Injecting From Config Array</h4>
  168. </div>
  169. </div>
  170. </div>
  171. <p>
  172. The easiest way of dependency injection is to pass a config array for the transport.
  173. Here's an example of injecting the PHP <a class="link" href="http://php.net/manual/en/function.mail.php" target="_top">mail()</a>
  174. adapter into the mail message.
  175. </p>
  176. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  177. </span><span style="color: #FF8000">// create a message object, and inject a transport config
  178. </span><span style="color: #0000BB">$mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">, array(
  179. </span><span style="color: #DD0000">'transport' </span><span style="color: #007700">=&gt; array(
  180. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Phpmail'</span><span style="color: #007700">,
  181. )
  182. ));
  183. </span><span style="color: #FF8000">// ... compose the message ...
  184. // now tell the email to "send itself".
  185. // this uses the injected transport.
  186. </span><span style="color: #0000BB">$mail</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">();
  187. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  188. <p>
  189. Here's a more complex example, using the <code class="literal">Solar_Smtp</code> factory-adapter transport with plain
  190. authentication. Note that the transport itself uses a dependency injection for the
  191. <code class="literal">Solar_Smtp</code> object under the 'smtp' key.
  192. </p>
  193. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  194. </span><span style="color: #FF8000">// create a message object, and inject a transport config
  195. </span><span style="color: #0000BB">$mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">, array(
  196. </span><span style="color: #DD0000">'transport' </span><span style="color: #007700">=&gt; array(
  197. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">,
  198. </span><span style="color: #DD0000">'smtp' </span><span style="color: #007700">=&gt; array(
  199. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">,
  200. </span><span style="color: #DD0000">'username' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'pmjones'</span><span style="color: #007700">,
  201. </span><span style="color: #DD0000">'password' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'secret'</span><span style="color: #007700">,
  202. </span><span style="color: #DD0000">'host' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail.example.com'</span><span style="color: #007700">,
  203. ),
  204. )
  205. ));
  206. </span><span style="color: #FF8000">// ... compose the message ...
  207. // now tell the email to "send itself".
  208. // this uses the injected transport.
  209. </span><span style="color: #0000BB">$mail</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">();
  210. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  211. <p>
  212. This is quite convenient, especially since you can set up those arrays in your config
  213. file in advance, making them the default configs each time you create a <code class="literal">Solar_Mail_Message</code>
  214. object. In that case, you can use the class names instead of the full configuration arrays.
  215. </p>
  216. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  217. $config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">] = array(
  218. </span><span style="color: #DD0000">'transport' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">,
  219. );
  220. </span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">] = array(
  221. </span><span style="color: #DD0000">'transport' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">,
  222. );
  223. </span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">] = array(
  224. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">,
  225. </span><span style="color: #DD0000">'username' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'pmjones'</span><span style="color: #007700">,
  226. </span><span style="color: #DD0000">'password' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'secret'</span><span style="color: #007700">,
  227. </span><span style="color: #DD0000">'host' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail.example.com'</span><span style="color: #007700">,
  228. );
  229. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  230. <p>
  231. Using the config-file-centered process instead of the logic-centered process means
  232. that you can have all your settings in one place for use throughout your application.
  233. You can even change adapters from the config file without changing any of the
  234. mail-sending code, as long as you keep the same registry names.
  235. </p>
  236. </div>
  237. <div class="sect3" title="9.4.2.2. Injecting From the Registry">
  238. <div class="titlepage">
  239. <div>
  240. <div>
  241. <h4 class="title"><a id="mail.sending.transport-di.registry"></a>9.4.2.2. Injecting From the Registry</h4>
  242. </div>
  243. </div>
  244. </div>
  245. <p>
  246. The only problem with injection using a config array is that the dependency objects
  247. get created anew each time you create a <code class="literal">Solar_Mail_Message</code>.
  248. Sometimes it's better to use registry objects for the dependency, so you don't use
  249. up resources re-creating identical objects over and over again.
  250. </p>
  251. <p>
  252. You can register the transport and SMTP objects in your bootstrap file or
  253. <a class="link" href="http://solarphp.com/apidoc/class.Solar_Controller_Page._setup" target="_top"><code class="literal">Solar_Controller_Page::_setup()</code></a>
  254. so they are available throughout the application:
  255. </p>
  256. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  257. </span><span style="color: #FF8000">// build a Solar_Smtp object
  258. </span><span style="color: #0000BB">$smtp </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Smtp'</span><span style="color: #007700">, array(
  259. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">,
  260. </span><span style="color: #DD0000">'username' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'pmjones'</span><span style="color: #007700">,
  261. </span><span style="color: #DD0000">'password' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'secret'</span><span style="color: #007700">,
  262. </span><span style="color: #DD0000">'host' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail.example.com'</span><span style="color: #007700">,
  263. ));
  264. </span><span style="color: #FF8000">// register it as 'smtp'
  265. </span><span style="color: #0000BB">Solar_Registry</span><span style="color: #007700">::</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">, </span><span style="color: #0000BB">$smtp</span><span style="color: #007700">);
  266. </span><span style="color: #FF8000">// build a Solar_Mail_Transport object with the SMTP object injected
  267. </span><span style="color: #0000BB">$transport </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Transport'</span><span style="color: #007700">, array(
  268. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">,
  269. </span><span style="color: #DD0000">'smtp' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">, </span><span style="color: #FF8000">// uses the registered 'smtp' object
  270. </span><span style="color: #007700">);
  271. </span><span style="color: #FF8000">// register the transport as 'mail-transport'
  272. </span><span style="color: #0000BB">Solar_Registry</span><span style="color: #007700">::</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">'mail-transport'</span><span style="color: #007700">, </span><span style="color: #0000BB">$transport</span><span style="color: #007700">);
  273. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  274. <p>
  275. Now when you create a new mail message, you can tell it that there's a transport
  276. already available, and call <a class="link" href="http://solarphp.com/apidoc/class.Solar_Mail_Message.send" target="_top">send()</a>
  277. directly on the message.
  278. </p>
  279. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  280. $mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">, array(
  281. </span><span style="color: #DD0000">'transport' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail-transport'</span><span style="color: #007700">,
  282. ));
  283. </span><span style="color: #FF8000">// ... build the message, and then:
  284. </span><span style="color: #0000BB">$mail</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">();
  285. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  286. <p>
  287. If you want to, you can put it all of this config information in the Solar config file.
  288. Then you can lazy-load the objects from the registry, and they will automatically have
  289. all the right settings. The various dependency objects will be lazy-loaded automatically for you.
  290. </p>
  291. <p>
  292. In your Solar.config.php file:
  293. </p>
  294. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  295. </span><span style="color: #FF8000">// configure SMTP
  296. </span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Smtp'</span><span style="color: #007700">] = array(
  297. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Smtp_Adapter_PlainAuth'</span><span style="color: #007700">,
  298. </span><span style="color: #DD0000">'username' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'pmjones'</span><span style="color: #007700">,
  299. </span><span style="color: #DD0000">'password' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'secret'</span><span style="color: #007700">,
  300. </span><span style="color: #DD0000">'host' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'mail.example.com'</span><span style="color: #007700">,
  301. );
  302. </span><span style="color: #FF8000">// configure mail transport
  303. </span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Mail_Transport'</span><span style="color: #007700">] = array(
  304. </span><span style="color: #DD0000">'adapter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Solar_Mail_Transport_Adapter_Smtp'</span><span style="color: #007700">,
  305. </span><span style="color: #DD0000">'smtp' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">,
  306. );
  307. </span><span style="color: #FF8000">// tell all mail messages to use the registered 'mail-transport'
  308. </span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">][</span><span style="color: #DD0000">'transport'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'mail-transport'</span><span style="color: #007700">;
  309. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  310. <p>
  311. Then all you have to do in your setup logic is register class names instead of objects ...
  312. </p>
  313. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  314. Solar_Registry</span><span style="color: #007700">::</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">'smtp'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Solar_Smtp'</span><span style="color: #007700">);
  315. </span><span style="color: #0000BB">Solar_Registry</span><span style="color: #007700">::</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">'mail-transport'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Solar_Mail_Transport'</span><span style="color: #007700">);
  316. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  317. <p>
  318. ... which will cause those objects to be created only at the moment they are first
  319. called as depndencies, and the same object will be reused every time you pull it from the registry.
  320. </p>
  321. <p>
  322. Now you can send an email message very simply:
  323. </p>
  324. <pre class="programlisting"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php
  325. </span><span style="color: #FF8000">// create and build a message
  326. </span><span style="color: #0000BB">$mail </span><span style="color: #007700">= </span><span style="color: #0000BB">Solar</span><span style="color: #007700">::</span><span style="color: #0000BB">factory</span><span style="color: #007700">(</span><span style="color: #DD0000">'Solar_Mail_Message'</span><span style="color: #007700">);
  327. </span><span style="color: #FF8000">// ...
  328. // send the message; this creates the SMTP and mail-transport objects
  329. // from the config-file settings, and sends the message trough the
  330. // registered transport.
  331. </span><span style="color: #0000BB">$mail</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send</span><span style="color: #007700">();
  332. </span><span style="color: #0000BB">?&gt;</span></span></code></pre>
  333. </div>
  334. </div>
  335. </div>
  336. <div class="navfooter">
  337. <table width="100%" summary="Navigation footer">
  338. <tr>
  339. <td width="40%" align="left"><a accesskey="p" href="mail.attachments">Prev</a> </td>
  340. <td width="20%" align="center">
  341. <a accesskey="u" href="mail">Up</a>
  342. </td>
  343. <td width="40%" align="right"> <a accesskey="n" href="pt02">Next</a></td>
  344. </tr>
  345. <tr>
  346. <td width="40%" align="left" valign="top">9.3. Message Attachments </td>
  347. <td width="20%" align="center">
  348. <a accesskey="h" href="index">Home</a>
  349. </td>
  350. <td width="40%" align="right" valign="top"> Part II. Appendices</td>
  351. </tr>
  352. </table>
  353. </div>
  354. <div xmlns="" class="revinfo"></div>
  355. </body>
  356. </html>