HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/hi.naniguide.com/app/Mail/CustomMailManager.php
<?php

namespace App\Mail;

use App\Mail\Transport\GmailApiTransport;
use App\Mail\Transport\SendGridTransport;
use App\Mail\Transport\SesReplyToTransport;
use App\Mail\Transport\SparkPostTransport;
use App\Mail\Transport\ResendTransport;
use Aws\Ses\SesClient;
use GuzzleHttp\Client as GuzzleClient;
use Illuminate\Mail\MailManager;
use Illuminate\Support\Arr;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;

class CustomMailManager extends MailManager
{
    /**
     * Create an instance of the Symfony Amazon SES ReplyTo Transport driver.
     *
     * @param  array  $config
     * @return \App\Mail\Transport\SesReplyToTransport
     */
    protected function createSesReplyToTransport(array $config)
    {
        $config = array_merge(
            $this->app['config']->get('services.ses', []),
            $config
        );

        $config = Arr::except($config, ['transport']);

        return new SesReplyToTransport(
            new SesClient($this->addSesCredentials($config)),
            $config['options'] ?? []
        );
    }

    /**
     * Add AWS SES credentials to the configuration array.
     *
     * @param  array  $config
     * @return array
     */
    protected function addSesCredentials(array $config): array
    {
        if ($config['key'] && $config['secret']) {
            $config['credentials'] = Arr::only($config, ['key', 'secret', 'token']);
        }

        unset($config['key'], $config['secret'], $config['token']);

        return $config;
    }

    /**
     * Create an instance of the Symfony SparkPost Transport driver.
     *
     * @param  array  $config
     * @return \App\Mail\Transport\SparkPostTransport
     */
    protected function createSparkpostTransport(array $config)
    {
        $config = array_merge(
            $this->app['config']->get('services.sparkpost', []),
            $config
        );

        $config = Arr::except($config, ['transport']);

        if (empty($config['secret'])) {
            throw new \InvalidArgumentException('SparkPost API key is required.');
        }

        return new SparkPostTransport(
            $config['secret'],
            $config['endpoint'] ?? 'https://api.sparkpost.com',
            $config['options'] ?? []
        );
    }

    /**
     * Create an instance of the SendGrid Transport driver.
     *
     * @param  array  $config
     * @return \App\Mail\Transport\SendGridTransport
     */
    protected function createSendgridTransport(array $config)
    {
        $config = array_merge(
            $this->app['config']->get('services.sendgrid', []),
            $config
        );

        $config = Arr::except($config, ['transport']);

        if (empty($config['api_key'])) {
            throw new \InvalidArgumentException('SendGrid API key is required.');
        }

        return new SendGridTransport($config['api_key']);
    }

    /**
     * Create an instance of the Symfony Mailgun Transport driver.
     *
     * @param  array  $config
     * @return \Symfony\Component\Mailer\Transport\TransportInterface
     */
    protected function createGmailApiTransport(array $config): GmailApiTransport
    {
        return new GmailApiTransport(
            $config['client_id'] ?? '',
            $config['client_secret'] ?? '',
            $config['refresh_token'] ?? ''
        );
    }

    /**
     * Create an instance of the Resend Transport driver.
     *
     * @param  array  $config
     * @return \App\Mail\Transport\ResendTransport
     */
    protected function createResendTransport(array $config)
    {
        $config = array_merge(
            $this->app['config']->get('services.resend', []),
            $config
        );

        $config = Arr::except($config, ['transport']);

        $apiKey = $config['api_key'] ?? $config['key'] ?? $config['secret'] ?? null;

        if (empty($apiKey)) {
            throw new \InvalidArgumentException('Resend API key is required.');
        }

        return new ResendTransport(
            $apiKey,
            $config['endpoint'] ?? 'https://api.resend.com',
            $config['options'] ?? []
        );
    }

    protected function createMailgunTransport(array $config)
    {
        $factory = new MailgunTransportFactory(null, $this->getHttpClient($config));

        if (! isset($config['secret'])) {
            $config = $this->app['config']->get('services.mailgun', []);
        }

        // Use the correct endpoint format for Mailgun API
        $endpoint = $config['endpoint'] ?? 'api.mailgun.net';
        $scheme = $config['scheme'] ?? 'https';
        
        return $factory->create(new Dsn(
            'mailgun+' . $scheme,
            $endpoint,
            $config['secret'],
            $config['domain']
        ));
    }
}