Переключение адреса электронной почты отправителя в сборке приложения saas с использованием Laravel - PullRequest
0 голосов
/ 29 марта 2019

Я разработал приложение saas с использованием Laravel.

Есть супер Админ и Админ.Каждый админ управляет там своим сообществом / Dashboard.Каждое Сообщество имеет собственную настройку электронной почты для отправки писем пользователям этого сообщества.

Если Сообществу не удалось отправить электронное письмо своим пользователям, используя свой собственный адрес электронной почты, тогда необходимо отправить сообщение об ошибке в форме электронной почты супер-администратора.Таким образом, псевдокод, как показано ниже:

Отправка электронной почты пользователям определенного сообщества. Если ошибка не удалась, переключите протокол электронной почты и отправьте письмо администратору, супер-администратору и разработчику из настройки электронной почты супер-администратора.

Проблема в том, что если я переключаюсь между протоколами в моей логике CATCH, то всегда выполняется часть TRY.

Вот код:

<?php

namespace App;
use Illuminate\Support\Facades\Mail;
use App\ErrorLog;
use App\Common;
use DB;
use Config;
use Artisan;

/**
 * Class SendMails, this class is to send various types of mails
 *
 * @package App
 */
class SendMails
{
    const FROM_ADDRESS = Common::FROM_EMAIL;
    const FROM_NAME = Common::SITE_TITLE;

    public static function sendMail(array $data, $view, $community_id='')
    {
        try{           

            /*Check if request comes main domain or subdomain and configure smtp.*/
            if($community_id==''){ // Main domain
                $smtp_host = 'smtp.XXX.com';
                $smtp_port = XXX;
                $smtp_email = 'x@example.com';
                $smtp_password = 'XXXXXXXXXXXXXXXX';
                $smtp_secure = 'tls';

                $from_email = 'x@example.com';
                $from_name=SendMails::FROM_NAME;
            }
            else{ // Subdomain
                $setting = Settings::where('community_id',$community_id)->first();
                if(!empty($setting)){
                    $smtp_host = $setting->smtp_host;
                    $smtp_port = $setting->smtp_port;
                    $smtp_email = $setting->smtp_email;
                    $smtp_password = $setting->smtp_password;
                    $smtp_secure = $setting->smtp_secure;

                    $from_email = $setting->smtp_email;
                    $from_name=$setting->system;
                }
            }

            if(isset($data['email'])) {
                $to_email = $data['email'];
            }
            else{
                $to_email = SendMails::FROM_ADDRESS;
            }
            if(isset($data['email_cc'])) {
                $cc_email = $data['email_cc'];
            }
            else{
                $cc_email = [];
            }
            if(isset($data['email_bcc'])) {
                $bcc_email = $data['email_bcc'];
            }
            else{
                $bcc_email = [];
            }
            if(isset($data['attachments'])) {
                $attachments = $data['attachments'];
            }
            else{
                $attachments = [];
            }
            if(isset($data['from_email'])){
                $from_email = $data['from_email'];
            }
            if(isset($data['from_name'])){
                $from_name = $data['from_name'];
            }
            if(isset($data['subject'])) {
                $subject = $data['subject'];
            }
            else{
                $subject = "Welcome To ".SendMails::FROM_NAME;
            }
            /*
            *   First update email configuration on the fly
            */
            self::updateSmtpConfiguration($smtp_host,$smtp_port,$smtp_email,$smtp_password,$smtp_secure);


            Mail::send($view, $data, function ($message) use ($to_email,$from_email,$from_name,$cc_email,$bcc_email,$attachments,$subject) {
                $message->from($from_email, $from_name);

                if(count($to_email)!=0){
                    $message->to($to_email);
                }
                if(count($cc_email)!=0){
                    $message->cc($cc_email);
                }
                if(count($bcc_email)!=0){
                    $message->bcc($bcc_email);
                }
                if(count($attachments)!=0){
                    foreach ($attachments as $attach) {
                        if($attach != ''){
                            $message->attach($attach);
                        }
                    }
                }
                $message->subject($subject);
            });

            return 'ok';
        }catch (\Exception $exception){
            self::smtpWarningEmailToAdmin($community_id);
            return $exception->getMessage();
        }
    }

    public static function smtpWarningEmailToAdmin($community_id){ // Send email to admin if community smtp failed.
        try{           

            $smtp_host = 'smtp.example.com';
            $smtp_port = XXX;
            $smtp_email = 'x@example.com';
            $smtp_password = 'XXXXXXXXXXXXXX';
            $smtp_secure = 'tls';

            $from_email = 'x@example.com';
            $from_name=SendMails::FROM_NAME;

            if($community_id !=''){ // Subdomain
                $setting = Settings::where('community_id',$community_id)->first();
                $to_email = ['x@gmail.com','user@gmail.com','another_user@gmail.com'];   
                $cc_email = [];    
                $bcc_email = [];    
                $attachments = [];
                $subject = "SMTP configuration warning";   
                $data['community_name']  = $setting->system;
                $data['bodyMessage']  = '';
                $view = 'emails.smtp_configuration_warning_email';
            }
            else{ // Main domain
                // 
            }

        /*
            *   First update email configuration on the fly
            */
            self::updateSmtpConfiguration($smtp_host,$smtp_port,$smtp_email,$smtp_password,$smtp_secure);
            Mail::send($view, $data, function ($message) use ($to_email,$from_email,$from_name,$cc_email,$bcc_email,$attachments,$subject) {
                $message->from($from_email, $from_name);

                if(count($to_email)!=0){
                    $message->to($to_email);
                }
                if(count($cc_email)!=0){
                    $message->cc($cc_email);
                }
                if(count($bcc_email)!=0){
                    $message->bcc($bcc_email);
                }
                if(count($attachments)!=0){
                    foreach ($attachments as $attach) {
                        if($attach != ''){
                            $message->attach($attach);
                        }
                    }
                }
                $message->subject($subject);
            });

            return 'ok';
        }catch (\Exception $exception){
            return $exception->getMessage();
        }
    }

    public static function updateSmtpConfiguration($smtp_host,$smtp_port,$smtp_email,$smtp_password,$smtp_secure){
        Artisan::call('cache:clear');

        /*Update smtp configuration in config/mail file*/
        Config::set('mail.port', $smtp_port); 
        Config::set('mail.host', $smtp_host); 
        Config::set('mail.username', $smtp_email); 
        Config::set('mail.password', $smtp_password); 
        Config::set('mail.encryption', $smtp_secure); 
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...