64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of the Symfony package.
 | |
|  *
 | |
|  * (c) Fabien Potencier <fabien@symfony.com>
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| namespace Symfony\Component\Mailer\Transport;
 | |
| 
 | |
| use Symfony\Component\Mailer\Exception\TransportException;
 | |
| use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
 | |
| use Symfony\Component\Mailer\Transport\Smtp\SmtpTransport;
 | |
| use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream;
 | |
| 
 | |
| /**
 | |
|  * Factory that configures a transport (sendmail or SMTP) based on php.ini settings.
 | |
|  *
 | |
|  * @author Laurent VOULLEMIER <laurent.voullemier@gmail.com>
 | |
|  */
 | |
| final class NativeTransportFactory extends AbstractTransportFactory
 | |
| {
 | |
|     public function create(Dsn $dsn): TransportInterface
 | |
|     {
 | |
|         if (!\in_array($dsn->getScheme(), $this->getSupportedSchemes(), true)) {
 | |
|             throw new UnsupportedSchemeException($dsn, 'native', $this->getSupportedSchemes());
 | |
|         }
 | |
| 
 | |
|         if ($sendMailPath = ini_get('sendmail_path')) {
 | |
|             return new SendmailTransport($sendMailPath, $this->dispatcher, $this->logger);
 | |
|         }
 | |
| 
 | |
|         if ('\\' !== \DIRECTORY_SEPARATOR) {
 | |
|             throw new TransportException('sendmail_path is not configured in php.ini.');
 | |
|         }
 | |
| 
 | |
|         // Only for windows hosts; at this point non-windows
 | |
|         // host have already thrown an exception or returned a transport
 | |
|         $host = ini_get('SMTP');
 | |
|         $port = (int) ini_get('smtp_port');
 | |
| 
 | |
|         if (!$host || !$port) {
 | |
|             throw new TransportException('smtp or smtp_port is not configured in php.ini.');
 | |
|         }
 | |
| 
 | |
|         $socketStream = new SocketStream();
 | |
|         $socketStream->setHost($host);
 | |
|         $socketStream->setPort($port);
 | |
|         if (465 !== $port) {
 | |
|             $socketStream->disableTls();
 | |
|         }
 | |
| 
 | |
|         return new SmtpTransport($socketStream, $this->dispatcher, $this->logger);
 | |
|     }
 | |
| 
 | |
|     protected function getSupportedSchemes(): array
 | |
|     {
 | |
|         return ['native'];
 | |
|     }
 | |
| }
 | 
