[FEATURE] Custom MailTransport
authorJigal van Hemert <jigal@xs4all.nl>
Sun, 4 Dec 2011 14:15:25 +0000 (15:15 +0100)
committerSteffen Ritter <info@rs-websystems.de>
Sun, 18 Dec 2011 10:15:04 +0000 (11:15 +0100)
Adds hook mechanism to the mailer API. Custom mail transporters can be
configured in the Install Tool.

Change-Id: Ib81eab61b657e07de37a8107df3dce3b96376f5c
Resolves: #24841
Releases: 4.7
Reviewed-on: http://review.typo3.org/7065
Reviewed-by: Georg Ringer
Reviewed-by: Dominik Mathern
Tested-by: Dominik Mathern
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
t3lib/config_default.php
t3lib/mail/class.t3lib_mail_mailer.php

index fd96b1e..bb622a5 100644 (file)
@@ -582,7 +582,7 @@ $TYPO3_CONF_VARS = array(
                'XCLASS' => array(),                                    // See 'Inside TYPO3' document for more information.
        ),
        'MAIL' => array(                // Mail configurations to tune how t3lib_mail classes will send their mails.
-               'transport' => 'mail',                                  // <p>String:</p><dl><dt>mail</dt><dd>Sends messages by delegating to PHP's internal mail() function. No further settings required. This is the most unreliable option. If you are serious about sending mails, consider using "smtp" or "sendmail".</dd><dt>smtp</dt><dd>Sends messages over the (standardized) Simple Message Transfer Protocol. It can deal with encryption and authentication. Most flexible option, requires a mail server and configurations in transport_smtp_* settings below. Works the same on Windows, Unix and MacOS.</dd><dt>sendmail</dt><dd>Sends messages by communicating with a locally installed MTA - such as sendmail. See setting transport_sendmail_command bellow.<dd><dt>mbox</dt><dd>This doesn't send any mail out, but instead will write every outgoing mail to a file adhering to the RFC 4155 mbox format, which is a simple text file where the mails are concatenated. Useful for debugging the mail sending process and on development machines which cannot send mails to the outside. Configure the file to write to in the 'transport_mbox_file' setting below</dd></dl>
+               'transport' => 'mail',                                  // <p>String:</p><dl><dt>mail</dt><dd>Sends messages by delegating to PHP's internal mail() function. No further settings required. This is the most unreliable option. If you are serious about sending mails, consider using "smtp" or "sendmail".</dd><dt>smtp</dt><dd>Sends messages over the (standardized) Simple Message Transfer Protocol. It can deal with encryption and authentication. Most flexible option, requires a mail server and configurations in transport_smtp_* settings below. Works the same on Windows, Unix and MacOS.</dd><dt>sendmail</dt><dd>Sends messages by communicating with a locally installed MTA - such as sendmail. See setting transport_sendmail_command bellow.<dd><dt>mbox</dt><dd>This doesn't send any mail out, but instead will write every outgoing mail to a file adhering to the RFC 4155 mbox format, which is a simple text file where the mails are concatenated. Useful for debugging the mail sending process and on development machines which cannot send mails to the outside. Configure the file to write to in the 'transport_mbox_file' setting below</dd><dt>&lt;classname&gt;</dt><dd>Custom class which implements Swift_Transport. The constructor receives all settings from the MAIL section to make it possible to add custom settings.</dd></dl>
                'transport_smtp_server' => 'localhost:25',                      // String: <em>only with transport=smtp</em>: &lt;server:port> of mailserver to connect to. &lt;port> defaults to "25".
                'transport_smtp_encrypt' => '',         // String: <em>only with transport=smtp</em>: Connect to the server using the specified transport protocol. Requires openssl library. Usually available: <em>ssl, sslv2, sslv3, tls</em>. Check <a href="http://www.php.net/stream_get_transports" target="_blank">stream_get_transports()</a>.
                'transport_smtp_username' => '',                // String: <em>only with transport=smtp</em>: If your SMTP server requires authentication, enter your username here.
index 815d978..51634fe 100644 (file)
@@ -135,10 +135,21 @@ class t3lib_mail_Mailer extends Swift_Mailer {
                                break;
 
                        case 'mail':
-                       default:
                                        // Create the transport, no configuration required
                                $this->transport = Swift_MailTransport::newInstance();
                                break;
+                       default:
+                                       // Custom mail transport
+                               $customTransport = t3lib_div::makeInstance($mailSettings['transport'], $mailSettings);
+                               if ($this->transport instanceof Swift_Transport) {
+                                       $this->transport = $customTransport;
+                               } else {
+                                       throw new RuntimeException(
+                                               $mailSettings['transport'] . ' is not an implementation of Swift_Transport,
+                                               but must implement that interface to be used as a mail transport.',
+                                               1323006478
+                                       );
+                               }
                }
                return;
        }