Proyectos de Subversion LeadersLinked - Services

Rev

Rev 614 | Rev 616 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
345 www 2
declare(strict_types = 1);
1 efrain 3
namespace LeadersLinked\Command;
4
 
5
use Symfony\Component\Console\Command\Command;
6
use Symfony\Component\Console\Input\InputInterface;
614 stevensc 7
// use Symfony\Component\Console\Input\InputOption;
1 efrain 8
use Symfony\Component\Console\Output\OutputInterface;
9
use Laminas\Db\Adapter\AdapterInterface;
10
use Laminas\Log\LoggerInterface;
11
use LeadersLinked\Mapper\EmailMapper;
12
use PHPMailer\PHPMailer\PHPMailer;
13
use LeadersLinked\Model\Email;
14
use Laminas\Mvc\I18n\Translator;
15
use LeadersLinked\Cache\CacheInterface;
16
 
17
class ProcessQueueEmailCommand extends Command
18
{
614 stevensc 19
 
1 efrain 20
    /**
21
     *
22
     * @var \Laminas\Db\Adapter\AdapterInterface
23
     */
24
    private $adapter;
345 www 25
 
1 efrain 26
    /**
27
     *
28
     * @var \LeadersLinked\Cache\CacheInterface
29
     */
30
    private $cache;
345 www 31
 
1 efrain 32
    /**
33
     *
34
     * @var \Laminas\Log\LoggerInterface
35
     */
36
    private $logger;
345 www 37
 
1 efrain 38
    /**
39
     *
40
     * @var array
41
     */
42
    private $config;
345 www 43
 
1 efrain 44
    /**
45
     *
46
     * @var \Laminas\Mvc\I18n\Translator
47
     */
48
    private $translator;
345 www 49
 
1 efrain 50
    /**
51
     *
52
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
53
     * @param \LeadersLinked\Cache\CacheInterface $cache
614 stevensc 54
     * @param
55
     *            \Laminas\Log\LoggerInterface
1 efrain 56
     * @param array $config
57
     * @param \Laminas\Mvc\I18n\Translator $translator
58
     */
59
    public function __construct($adapter, $cache, $logger, $config, $translator)
60
    {
345 www 61
        $this->adapter = $adapter;
62
        $this->cache = $cache;
63
        $this->logger = $logger;
64
        $this->config = $config;
65
        $this->translator = $translator;
66
 
1 efrain 67
        parent::__construct();
68
    }
69
 
614 stevensc 70
    protected function execute(InputInterface $input, OutputInterface $output): int
1 efrain 71
    {
609 stevensc 72
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
73
        if ($sandbox) {
74
            $batch_size = $this->config['leaderslinked.email.sandbox_batch_size'];
75
            $from_address = $this->config['leaderslinked.email.sandbox_from_address'];
76
            $from_name = $this->config['leaderslinked.email.sandbox_from_name'];
77
            $host = $this->config['leaderslinked.email.sandbox_host'];
78
            $port = $this->config['leaderslinked.email.sandbox_port'];
79
            $username = $this->config['leaderslinked.email.sandbox_username'];
80
            $password = $this->config['leaderslinked.email.sandbox_password'];
81
        } else {
82
            $batch_size = $this->config['leaderslinked.email.production_batch_size'];
83
            $from_address = $this->config['leaderslinked.email.production_from_address'];
84
            $from_name = $this->config['leaderslinked.email.production_from_name'];
85
            $host = $this->config['leaderslinked.email.production_host'];
86
            $port = $this->config['leaderslinked.email.production_port'];
87
            $username = $this->config['leaderslinked.email.production_username'];
88
            $password = $this->config['leaderslinked.email.production_password'];
89
        }
1 efrain 90
 
609 stevensc 91
        $this->logger->info('Inicio del proceso de la cola de Email');
1 efrain 92
 
609 stevensc 93
        $emailCompleted = 0;
614 stevensc 94
        $emailError = 0;
345 www 95
 
609 stevensc 96
        $emailMapper = EmailMapper::getInstance($this->adapter);
97
        $emails = $emailMapper->fetchBatch($batch_size);
1 efrain 98
 
614 stevensc 99
        if ($emails) {
100
            foreach ($emails as $email) {
609 stevensc 101
                $content = json_decode($email->content, true);
345 www 102
 
609 stevensc 103
                $to_address = $content['to_address'];
614 stevensc 104
                $to_name = $content['to_name'];
105
                $cc = $content['cc'];
106
                $bcc = $content['bcc'];
609 stevensc 107
                $subject = $content['subject'];
108
                $message = $content['message'];
345 www 109
 
614 stevensc 110
                $encoding = mb_detect_encoding($subject);
111
                if ($encoding != 'UTF-8') {
112
                    $subject = mb_convert_encoding($subject, 'UTF-8', $encoding);
113
                }
345 www 114
 
614 stevensc 115
                $encoding = mb_detect_encoding($message);
116
                if ($encoding != 'UTF-8') {
117
                    $message = mb_convert_encoding($message, 'UTF-8', $encoding);
118
                }
119
 
120
                try{
615 stevensc 121
                    $phpMailer = new PHPMailer(true);
614 stevensc 122
 
615 stevensc 123
                    $phpMailer->SMTPDebug = false;
124
                    $phpMailer->isSMTP();
125
                    $phpMailer->Host = $host;
126
                    $phpMailer->SMTPAuth = true;
127
                    $phpMailer->Username = $username;
128
                    $phpMailer->Password = $password;
129
                    $phpMailer->SMTPSecure = 'tls';
130
                    $phpMailer->Port = $port;
614 stevensc 131
 
615 stevensc 132
                    $phpMailer->setFrom($from_address, $from_name);
133
                    $phpMailer->addAddress($to_address, $to_name);
134
 
135
                    if ($cc) {
136
                        foreach ($cc as $address => $name) {
137
                            $phpMailer->addCC($address, $name);
138
                        }
614 stevensc 139
                    }
615 stevensc 140
                    if ($bcc) {
141
                        foreach ($bcc as $address => $name) {
142
                            $phpMailer->addBCC($address, $name);
143
                        }
614 stevensc 144
                    }
615 stevensc 145
 
146
                    $phpMailer->IsHTML(true);
147
                    $phpMailer->Subject = $subject;
148
                    $phpMailer->Body = $message;
149
                    $phpMailer->CharSet = 'UTF-8';
150
                    $phpMailer->AltBody = $message;
606 stevensc 151
 
615 stevensc 152
                    $phpMailer->send();
345 www 153
 
615 stevensc 154
                    $emailCompleted ++;
155
                    $email->status = Email::STATUS_COMPLETED;
156
                    $this->logger->info('Email enviado correctamente: ' . $email->id);
614 stevensc 157
                } catch (\Exception $e) {
615 stevensc 158
                    $this->logger->info('Error al enviar el email: ' . $e->getMessage());
614 stevensc 159
                    if ($email->tried == 2) {
160
                        $emailError ++;
161
                        $email->status = Email::STATUS_ERROR;
162
                        $this->logger->info('Email descartado: ' . $email->id);
163
                    }
164
                    $email->tried ++;
609 stevensc 165
                }
611 stevensc 166
 
613 stevensc 167
                try {
168
                    $emailMapper->update($email);
614 stevensc 169
                } catch (\Exception $e) {
170
                    $this->logger->info('Error al actualizar el email: ' . $e->getMessage());
613 stevensc 171
                }
606 stevensc 172
            }
173
        }
174
 
609 stevensc 175
        $this->logger->info('Email con Errores descartados: ' . $emailError);
614 stevensc 176
        $this->logger->info('Email enviados correctamente:' . $emailCompleted);
609 stevensc 177
        $this->logger->info('Fin del proceso de la cola de Email');
606 stevensc 178
 
614 stevensc 179
        return 0;
1 efrain 180
    }
181
}