Completed
Push — 4.0 ( bf7baa...3af7de )
by Ryo
05:39
created

MailService::sendPointNotifyMail()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 35

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 3
dl 0
loc 35
ccs 0
cts 0
cp 0
crap 6
rs 9.36
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of EC-CUBE
5
 *
6
 * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
7
 *
8
 * http://www.lockon.co.jp/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Eccube\Service;
15
16
use Eccube\Common\EccubeConfig;
17
use Eccube\Entity\BaseInfo;
18
use Eccube\Entity\Customer;
19
use Eccube\Entity\MailHistory;
20
use Eccube\Entity\MailTemplate;
21
use Eccube\Entity\Order;
22
use Eccube\Entity\OrderItem;
23
use Eccube\Entity\Shipping;
24
use Eccube\Event\EccubeEvents;
25
use Eccube\Event\EventArgs;
26
use Eccube\Repository\BaseInfoRepository;
27
use Eccube\Repository\MailHistoryRepository;
28
use Eccube\Repository\MailTemplateRepository;
29
use Symfony\Component\EventDispatcher\EventDispatcher;
30
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
31
32
class MailService
33
{
34
    /**
35
     * @var \Swift_Mailer
36
     */
37
    protected $mailer;
38
39
    /**
40
     * @var MailTemplateRepository
41
     */
42
    protected $mailTemplateRepository;
43
44
    /**
45
     * @var MailHistoryRepository
46
     */
47
    private $mailHistoryRepository;
48
49
    /**
50
     * @var EventDispatcher
51
     */
52
    protected $eventDispatcher;
53
54
    /**
55
     * @var BaseInfo
56
     */
57
    protected $BaseInfo;
58
59
    /**
60
     * @var EccubeConfig
61
     */
62
    protected $eccubeConfig;
63
64
    /**
65
     * @var \Twig_Environment
66
     */
67
    protected $twig;
68
69
    /**
70
     * MailService constructor.
71
     *
72
     * @param \Swift_Mailer $mailer
73
     * @param MailTemplateRepository $mailTemplateRepository
74
     * @param MailHistoryRepository $mailHistoryRepository
75
     * @param BaseInfoRepository $baseInfoRepository
76
     * @param EventDispatcherInterface $eventDispatcher
77
     * @param \Twig_Environment $twig
78
     * @param EccubeConfig $eccubeConfig
79
     */
80 140
    public function __construct(
81
        \Swift_Mailer $mailer,
82
        MailTemplateRepository $mailTemplateRepository,
83
        MailHistoryRepository $mailHistoryRepository,
84
        BaseInfoRepository $baseInfoRepository,
85
        EventDispatcherInterface $eventDispatcher,
86
        \Twig_Environment $twig,
87
        EccubeConfig $eccubeConfig
88
    ) {
89 140
        $this->mailer = $mailer;
90 140
        $this->mailTemplateRepository = $mailTemplateRepository;
91 140
        $this->mailHistoryRepository = $mailHistoryRepository;
92 140
        $this->BaseInfo = $baseInfoRepository->get();
93 140
        $this->eventDispatcher = $eventDispatcher;
0 ignored issues
show
Documentation Bug introduced by
$eventDispatcher is of type object<Symfony\Component...entDispatcherInterface>, but the property $eventDispatcher was declared to be of type object<Symfony\Component...atcher\EventDispatcher>. Are you sure that you always receive this specific sub-class here, or does it make sense to add an instanceof check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.

Either this assignment is in error or an instanceof check should be added for that assignment.

class Alien {}

class Dalek extends Alien {}

class Plot
{
    /** @var  Dalek */
    public $villain;
}

$alien = new Alien();
$plot = new Plot();
if ($alien instanceof Dalek) {
    $plot->villain = $alien;
}
Loading history...
94 140
        $this->eccubeConfig = $eccubeConfig;
95 140
        $this->twig = $twig;
96
    }
97
98
    /**
99
     * Send customer confirm mail.
100
     *
101
     * @param $Customer 会員情報
102
     * @param string $activateUrl アクティベート用url
103
     */
104 2 View Code Duplication
    public function sendCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
105
    {
106 2
        log_info('仮会員登録メール送信開始');
107
108 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_confirm_mail_template_id']);
109
110 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
111 2
            'Customer' => $Customer,
112 2
            'BaseInfo' => $this->BaseInfo,
113 2
            'activateUrl' => $activateUrl,
114 2
        ]);
115 2
116
        $message = (new \Swift_Message())
117
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
118 2
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
119 2
            ->setTo([$Customer->getEmail()])
120 2
            ->setBcc($this->BaseInfo->getEmail01())
121 2
            ->setReplyTo($this->BaseInfo->getEmail03())
122 2
            ->setReturnPath($this->BaseInfo->getEmail04());
123 2
124 2
        // HTMLテンプレートが存在する場合
125 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
126
        if (!is_null($htmlFileName)) {
127 2
            $htmlBody = $this->twig->render($htmlFileName, [
128
                'Customer' => $Customer,
129 2
                'BaseInfo' => $this->BaseInfo,
130 2
                'activateUrl' => $activateUrl,
131 2
            ]);
132 2
133
            $message
134 2
                ->setContentType('text/plain; charset=UTF-8')
135
                ->setBody($body, 'text/plain')
136 2
                ->addPart($htmlBody, 'text/html');
137
        } else {
138 2
            $message->setBody($body);
139
        }
140 2
141
        $event = new EventArgs(
142 2
            [
143
                'message' => $message,
144
                'Customer' => $Customer,
145
                'BaseInfo' => $this->BaseInfo,
146
                'activateUrl' => $activateUrl,
147
            ],
148
            null
149
        );
150 2
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_CONFIRM, $event);
151
152 2
        $count = $this->mailer->send($message, $failures);
153
154 2
        log_info('仮会員登録メール送信完了', ['count' => $count]);
155
156 2
        return $count;
157 2
    }
158 2
159 2
    /**
160 2
     * Send customer complete mail.
161
     *
162
     * @param $Customer 会員情報
163 2
     */
164 2 View Code Duplication
    public function sendCustomerCompleteMail(\Eccube\Entity\Customer $Customer)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
165 2
    {
166 2
        log_info('会員登録完了メール送信開始');
167 2
168 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_complete_mail_template_id']);
169 2
170 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
171
            'Customer' => $Customer,
172 2
            'BaseInfo' => $this->BaseInfo,
173
        ]);
174 2
175 2
        $message = (new \Swift_Message())
176 2
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
177
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
178 2
            ->setTo([$Customer->getEmail()])
179
            ->setBcc($this->BaseInfo->getEmail01())
180 2
            ->setReplyTo($this->BaseInfo->getEmail03())
181
            ->setReturnPath($this->BaseInfo->getEmail04());
182 2
183
        // HTMLテンプレートが存在する場合
184 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
185
        if (!is_null($htmlFileName)) {
186 2
            $htmlBody = $this->twig->render($htmlFileName, [
187
                'Customer' => $Customer,
188
                'BaseInfo' => $this->BaseInfo,
189
            ]);
190
191
            $message
192
                ->setContentType('text/plain; charset=UTF-8')
193
                ->setBody($body, 'text/plain')
194
                ->addPart($htmlBody, 'text/html');
195 2
        } else {
196
            $message->setBody($body);
197 2
        }
198
199 2
        $event = new EventArgs(
200
            [
201 2
                'message' => $message,
202 2
                'Customer' => $Customer,
203 2
                'BaseInfo' => $this->BaseInfo,
204 2
            ],
205 2
            null
206
        );
207
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_COMPLETE, $event);
208 2
209 2
        $count = $this->mailer->send($message);
210 2
211 2
        log_info('会員登録完了メール送信完了', ['count' => $count]);
212 2
213 2
        return $count;
214 2
    }
215 2
216
    /**
217 2
     * Send withdraw mail.
218
     *
219 2
     * @param $Customer Customer
220 2
     * @param $email string
221 2
     */
222 2 View Code Duplication
    public function sendCustomerWithdrawMail(Customer $Customer, string $email)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
223
    {
224 2
        log_info('退会手続き完了メール送信開始');
225
226 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_customer_withdraw_mail_template_id']);
227
228 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
229
            'Customer' => $Customer,
230 2
            'BaseInfo' => $this->BaseInfo,
231
        ]);
232 2
233
        $message = (new \Swift_Message())
234
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
235
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
236
            ->setTo([$email])
237
            ->setBcc($this->BaseInfo->getEmail01())
238
            ->setReplyTo($this->BaseInfo->getEmail03())
239
            ->setReturnPath($this->BaseInfo->getEmail04());
240 4
241
        // HTMLテンプレートが存在する場合
242 4
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
243
        if (!is_null($htmlFileName)) {
244 4
            $htmlBody = $this->twig->render($htmlFileName, [
245
                'Customer' => $Customer,
246 4
                'BaseInfo' => $this->BaseInfo,
247 4
            ]);
248 4
249 4
            $message
250 4
                ->setContentType('text/plain; charset=UTF-8')
251
                ->setBody($body, 'text/plain')
252
                ->addPart($htmlBody, 'text/html');
253
        } else {
254 4
            $message->setBody($body);
255 4
        }
256 4
257 4
        $event = new EventArgs(
258 4
            [
259 4
                'message' => $message,
260 4
                'Customer' => $Customer,
261 4
                'BaseInfo' => $this->BaseInfo,
262
                'email' => $email,
263 4
            ],
264
            null
265 4
        );
266 4
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_WITHDRAW, $event);
267 4
268
        $count = $this->mailer->send($message);
269 4
270
        log_info('退会手続き完了メール送信完了', ['count' => $count]);
271 4
272
        return $count;
273 4
    }
274
275 4
    /**
276
     * Send contact mail.
277 4
     *
278
     * @param $formData お問い合わせ内容
279
     */
280 View Code Duplication
    public function sendContactMail($formData)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
281
    {
282
        log_info('お問い合わせ受付メール送信開始');
283
284
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_contact_mail_template_id']);
285
286
        $body = $this->twig->render($MailTemplate->getFileName(), [
287
            'data' => $formData,
288
            'BaseInfo' => $this->BaseInfo,
289
        ]);
290
291
        // 問い合わせ者にメール送信
292
        $message = (new \Swift_Message())
293
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
294
            ->setFrom([$this->BaseInfo->getEmail02() => $this->BaseInfo->getShopName()])
295
            ->setTo([$formData['email']])
296
            ->setBcc($this->BaseInfo->getEmail02())
297
            ->setReplyTo($this->BaseInfo->getEmail02())
298
            ->setReturnPath($this->BaseInfo->getEmail04());
299
300
        // HTMLテンプレートが存在する場合
301 7
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
302
        if (!is_null($htmlFileName)) {
303 7
            $htmlBody = $this->twig->render($htmlFileName, [
304
                'data' => $formData,
305 7
                'BaseInfo' => $this->BaseInfo,
306
            ]);
307 7
308 7
            $message
309 7
                ->setContentType('text/plain; charset=UTF-8')
310 7
                ->setBody($body, 'text/plain')
311
                ->addPart($htmlBody, 'text/html');
312
        } else {
313 7
            $message->setBody($body);
314 7
        }
315 7
316 7
        $event = new EventArgs(
317 7
            [
318 7
                'message' => $message,
319 7
                'formData' => $formData,
320 7
                'BaseInfo' => $this->BaseInfo,
321
            ],
322 7
            null
323
        );
324 7
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CONTACT, $event);
325 7
326 7
        $count = $this->mailer->send($message);
327 7
328
        log_info('お問い合わせ受付メール送信完了', ['count' => $count]);
329 7
330
        return $count;
331 7
    }
332
333 7
    /**
334
     * Alias of sendContactMail().
335 7
     *
336
     * @param $formData お問い合わせ内容
337 7
     *
338
     * @see sendContactMail()
339
     * @deprecated since 3.0.0, to be removed in 3.1
340
     * @see https://github.com/EC-CUBE/ec-cube/issues/1315
341
     */
342
    public function sendrContactMail($formData)
343
    {
344
        $this->sendContactMail($formData);
345
    }
346 2
347
    /**
348 2
     * Send order mail.
349
     *
350
     * @param \Eccube\Entity\Order $Order 受注情報
351 2
     *
352
     * @return \Swift_Message
353 2
     */
354 2
    public function sendOrderMail(\Eccube\Entity\Order $Order)
355 2
    {
356 2
        log_info('受注メール送信開始');
357 2
358 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_order_mail_template_id']);
359
360
        $body = $this->twig->render($MailTemplate->getFileName(), [
361 2
            'Order' => $Order,
362 2
        ]);
363 2
364 2
        $message = (new \Swift_Message())
365 2
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
366 2
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
367 2
            ->setTo([$Order->getEmail()])
368 2
            ->setBcc($this->BaseInfo->getEmail01())
369
            ->setReplyTo($this->BaseInfo->getEmail03())
370 2
            ->setReturnPath($this->BaseInfo->getEmail04());
371
372 2
        // HTMLテンプレートが存在する場合
373 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
374 2
        if (!is_null($htmlFileName)) {
375 2
            $htmlBody = $this->twig->render($htmlFileName, [
376
                'Order' => $Order,
377 2
            ]);
378
379 2
            $message
380
                ->setContentType('text/plain; charset=UTF-8')
381 2
                ->setBody($body, 'text/plain')
382
                ->addPart($htmlBody, 'text/html');
383 2
        } else {
384
            $message->setBody($body);
385 2
        }
386
387
        $event = new EventArgs(
388
            [
389
                'message' => $message,
390
                'Order' => $Order,
391
                'MailTemplate' => $MailTemplate,
392
                'BaseInfo' => $this->BaseInfo,
393
            ],
394
            null
395
        );
396
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ORDER, $event);
397
398
        $count = $this->mailer->send($message);
399
400
        $MailHistory = new MailHistory();
401 3
        $MailHistory->setMailSubject($message->getSubject())
402
            ->setMailBody($message->getBody())
403 3
            ->setOrder($Order)
404
            ->setSendDate(new \DateTime());
405 3
406 3
        // HTML用メールの設定
407 3
        $multipart = $message->getChildren();
408 3
        if (count($multipart) > 0) {
409
            $MailHistory->setMailHtmlBody($multipart[0]->getBody());
410
        }
411 3
412 3
        $this->mailHistoryRepository->save($MailHistory);
413 3
414 3
        log_info('受注メール送信完了', ['count' => $count]);
415 3
416 3
        return $message;
417 3
    }
418 3
419
    /**
420 3
     * Send admin customer confirm mail.
421
     *
422 3
     * @param $Customer 会員情報
423 3
     * @param string $activateUrl アクティベート用url
424 3
     */
425 3 View Code Duplication
    public function sendAdminCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
426
    {
427 3
        log_info('仮会員登録再送メール送信開始');
428
429 3
        /* @var $MailTemplate \Eccube\Entity\MailTemplate */
430
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_confirm_mail_template_id']);
431 3
432
        $body = $this->twig->render($MailTemplate->getFileName(), [
433 3
            'BaseInfo' => $this->BaseInfo,
434
            'Customer' => $Customer,
435 3
            'activateUrl' => $activateUrl,
436
        ]);
437
438
        $message = (new \Swift_Message())
439
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
440
            ->setFrom([$this->BaseInfo->getEmail03() => $this->BaseInfo->getShopName()])
441
            ->setTo([$Customer->getEmail()])
442
            ->setBcc($this->BaseInfo->getEmail01())
443
            ->setReplyTo($this->BaseInfo->getEmail03())
444 1
            ->setReturnPath($this->BaseInfo->getEmail04());
445
446 1
        // HTMLテンプレートが存在する場合
447
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
448 1
        if (!is_null($htmlFileName)) {
449 1
            $htmlBody = $this->twig->render($htmlFileName, [
450 1
                'BaseInfo' => $this->BaseInfo,
451 1
                'Customer' => $Customer,
452 1
                'activateUrl' => $activateUrl,
453 1
            ]);
454 1
455 1
            $message
456
                ->setContentType('text/plain; charset=UTF-8')
457
                ->setBody($body, 'text/plain')
458 1
                ->addPart($htmlBody, 'text/html');
459 1
        } else {
460 1
            $message->setBody($body);
461 1
        }
462 1
463 1
        $event = new EventArgs(
464 1
            [
465 1
                'message' => $message,
466
                'Customer' => $Customer,
467 1
                'BaseInfo' => $this->BaseInfo,
468
                'activateUrl' => $activateUrl,
469 1
            ],
470 1
            null
471 1
        );
472 1
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ADMIN_CUSTOMER_CONFIRM, $event);
473
474 1
        $count = $this->mailer->send($message);
475
476 1
        log_info('仮会員登録再送メール送信完了', ['count' => $count]);
477
478 1
        return $count;
479
    }
480 1
481
    /**
482 1
     * Send admin order mail.
483
     *
484
     * @param Order $Order 受注情報
485
     * @param $formData 入力内容
486
     *
487
     * @return \Swift_Message
488
     *
489
     * @throws \Twig_Error_Loader
490
     * @throws \Twig_Error_Runtime
491 1
     * @throws \Twig_Error_Syntax
492
     */
493 1
    public function sendAdminOrderMail(Order $Order, $formData)
494
    {
495 1
        log_info('受注管理通知メール送信開始');
496
497 1
        $message = (new \Swift_Message())
498 1
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$formData['mail_subject'])
499 1
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
500 1
            ->setTo([$Order->getEmail()])
501 1
            ->setBcc($this->BaseInfo->getEmail01())
502 1
            ->setReplyTo($this->BaseInfo->getEmail03())
503
            ->setReturnPath($this->BaseInfo->getEmail04())
504
            ->setBody($formData['tpl_data']);
505 1
506 1
        $event = new EventArgs(
507 1
            [
508 1
                'message' => $message,
509 1
                'Order' => $Order,
510 1
                'formData' => $formData,
511 1
                'BaseInfo' => $this->BaseInfo,
512 1
            ],
513
            null
514 1
        );
515
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ADMIN_ORDER, $event);
516 1
517 1
        $count = $this->mailer->send($message);
518 1
519 1
        log_info('受注管理通知メール送信完了', ['count' => $count]);
520
521 1
        return $message;
522
    }
523 1
524
    /**
525 1
     * Send password reset notification mail.
526
     *
527 1
     * @param $Customer 会員情報
528
     * @param string $reset_url
529 1
     */
530
    public function sendPasswordResetNotificationMail(\Eccube\Entity\Customer $Customer, $reset_url)
531
    {
532
        log_info('パスワード再発行メール送信開始');
533
534
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_forgot_mail_template_id']);
535
        $body = $this->twig->render($MailTemplate->getFileName(), [
536
            'BaseInfo' => $this->BaseInfo,
537
            'Customer' => $Customer,
538
            'expire' => $this->eccubeConfig['eccube_customer_reset_expire'],
539
            'reset_url' => $reset_url,
540
        ]);
541
542
        $message = (new \Swift_Message())
543
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
544
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
545
            ->setTo([$Customer->getEmail()])
546
            ->setReplyTo($this->BaseInfo->getEmail03())
547
            ->setReturnPath($this->BaseInfo->getEmail04());
548
549
        // HTMLテンプレートが存在する場合
550
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
551
        if (!is_null($htmlFileName)) {
552
            $htmlBody = $this->twig->render($htmlFileName, [
553
                'BaseInfo' => $this->BaseInfo,
554
                'Customer' => $Customer,
555
                'expire' => $this->eccubeConfig['eccube_customer_reset_expire'],
556
                'reset_url' => $reset_url,
557
            ]);
558
559
            $message
560
                ->setContentType('text/plain; charset=UTF-8')
561
                ->setBody($body, 'text/plain')
562
                ->addPart($htmlBody, 'text/html');
563
        } else {
564
            $message->setBody($body);
565
        }
566
567 4
        $event = new EventArgs(
568
            [
569 4
                'message' => $message,
570
                'Customer' => $Customer,
571 4
                'BaseInfo' => $this->BaseInfo,
572
                'resetUrl' => $reset_url,
573
            ],
574 4
            null
575 4
        );
576 4
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_PASSWORD_RESET, $event);
577 4
578 4
        $count = $this->mailer->send($message);
579 4
580 4
        log_info('パスワード再発行メール送信完了', ['count' => $count]);
581 4
582 4
        return $count;
583
    }
584 4
585
    /**
586 4
     * Send password reset notification mail.
587 4
     *
588 4
     * @param $Customer 会員情報
589 4
     * @param string $password
590 4
     */
591 View Code Duplication
    public function sendPasswordResetCompleteMail(\Eccube\Entity\Customer $Customer, $password)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
592 4
    {
593
        log_info('パスワード変更完了メール送信開始');
594 4
595
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_reset_complete_mail_template_id']);
596
597
        $body = $this->twig->render($MailTemplate->getFileName(), [
598
            'BaseInfo' => $this->BaseInfo,
599
            'Customer' => $Customer,
600
            'password' => $password,
601
        ]);
602
603
        $message = (new \Swift_Message())
604
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
605
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
606
            ->setTo([$Customer->getEmail()])
607
            ->setBcc($this->BaseInfo->getEmail01())
608 4
            ->setReplyTo($this->BaseInfo->getEmail03())
609 4
            ->setReturnPath($this->BaseInfo->getEmail04());
610 4
611
        // HTMLテンプレートが存在する場合
612
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
613 4
        if (!is_null($htmlFileName)) {
614
            $htmlBody = $this->twig->render($htmlFileName, [
615 4
                'BaseInfo' => $this->BaseInfo,
616 4
                'Customer' => $Customer,
617 4
                'password' => $password,
618 4
            ]);
619 4
620
            $message
621
                ->setContentType('text/plain; charset=UTF-8')
622
                ->setBody($body, 'text/plain')
623
                ->addPart($htmlBody, 'text/html');
624
        } else {
625
            $message->setBody($body);
626
        }
627
628
        $event = new EventArgs(
629
            [
630
                'message' => $message,
631
                'Customer' => $Customer,
632
                'BaseInfo' => $this->BaseInfo,
633
                'password' => $password,
634
            ],
635
            null
636
        );
637
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_PASSWORD_RESET_COMPLETE, $event);
638
639
        $count = $this->mailer->send($message);
640
641
        log_info('パスワード変更完了メール送信完了', ['count' => $count]);
642
643
        return $count;
644
    }
645
646
    /**
647
     * 発送通知メールを送信する.
648
     * 発送通知メールは受注ごとに送られる
649
     *
650
     * @param Shipping $Shipping
651
     *
652
     * @throws \Twig_Error
653
     */
654
    public function sendShippingNotifyMail(Shipping $Shipping)
655
    {
656
        log_info('出荷通知メール送信処理開始', ['id' => $Shipping->getId()]);
657
658
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_shipping_notify_mail_template_id']);
659
660
        /** @var Order $Order */
661
        $Order = $Shipping->getOrder();
662
        $body = $this->getShippingNotifyMailBody($Shipping, $Order, $MailTemplate->getFileName());
663
664
        $message = (new \Swift_Message())
665
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
666
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
667
            ->setTo($Order->getEmail())
668
            ->setBcc($this->BaseInfo->getEmail01())
669
            ->setReplyTo($this->BaseInfo->getEmail03())
670
            ->setReturnPath($this->BaseInfo->getEmail04());
671
672
        // HTMLテンプレートが存在する場合
673
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
674
        if (!is_null($htmlFileName)) {
675
            $htmlBody = $this->getShippingNotifyMailBody($Shipping, $Order, $htmlFileName, true);
676
677
            $message
678
                ->setContentType('text/plain; charset=UTF-8')
679
                ->setBody($body, 'text/plain')
680
                ->addPart($htmlBody, 'text/html');
681
        } else {
682
            $message->setBody($body);
683
        }
684
685
        $this->mailer->send($message);
686
687
        $MailHistory = new MailHistory();
688
        $MailHistory->setMailSubject($message->getSubject())
689
                ->setMailBody($message->getBody())
690
                ->setOrder($Order)
691
                ->setSendDate(new \DateTime());
692
693
        // HTML用メールの設定
694
        $multipart = $message->getChildren();
695
        if (count($multipart) > 0) {
696
            $MailHistory->setMailHtmlBody($multipart[0]->getBody());
697
        }
698
699
        $this->mailHistoryRepository->save($MailHistory);
700
701
        log_info('出荷通知メール送信処理完了', ['id' => $Shipping->getId()]);
702
    }
703
704
    /**
705
     * @param Shipping $Shipping
706
     * @param Order $Order
707
     * @param string|null $templateName
708
     * @param boolean $is_html
709
     *
710
     * @return string
711
     *
712
     * @throws \Twig_Error
713
     */
714
    public function getShippingNotifyMailBody(Shipping $Shipping, Order $Order, $templateName = null, $is_html = false)
715
    {
716
        $ShippingItems = array_filter($Shipping->getOrderItems()->toArray(), function (OrderItem $OrderItem) use ($Order) {
717
            return $OrderItem->getOrderId() === $Order->getId();
718
        });
719
720
        if (is_null($templateName)) {
721
            /** @var MailTemplate $MailTemplate */
722
            $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_shipping_notify_mail_template_id']);
723
            $fileName = $MailTemplate->getFileName();
724
        } else {
725
            $fileName = $templateName;
726
        }
727
728
        if ($is_html) {
729
            $htmlFileName = $this->getHtmlTemplate($fileName);
730
            $fileName = !is_null($htmlFileName) ? $htmlFileName : $fileName;
731
        }
732
733
        return $this->twig->render($fileName, [
734
            'Shipping' => $Shipping,
735
            'ShippingItems' => $ShippingItems,
736
        ]);
737
    }
738
739
    /**
740
     * [getHtmlTemplate description]
741
     *
742
     * @param  string $templateName  プレーンテキストメールのファイル名
743
     *
744
     * @return string|null  存在する場合はファイル名を返す
745
     */
746
    public function getHtmlTemplate($templateName)
747
    {
748
        // メールテンプレート名からHTMLメール用テンプレート名を生成
749
        $fileName = explode('.', $templateName);
750
        $suffix = '.html';
751
        $htmlFileName = $fileName[0].$suffix.'.'.$fileName[1];
752
753
        // HTMLメール用テンプレートの存在チェック
754
        if ($this->twig->getLoader()->exists($htmlFileName)) {
755
            return $htmlFileName;
756
        } else {
757
            return null;
758
        }
759
    }
760
}
761