Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
10 / 10
CRAP
100.00% covered (success)
100.00%
203 / 203
MailService
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
11 / 11
11
100.00% covered (success)
100.00%
203 / 203
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 sendCustomerConfirmMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
23 / 23
 sendCustomerCompleteMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
21 / 21
 sendCustomerWithdrawMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
22 / 22
 sendContactMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
21 / 21
 sendrContactMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
0 / 0
 sendOrderMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
24 / 24
 sendAdminCustomerConfirmMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
22 / 22
 sendAdminOrderMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
23 / 23
 sendPasswordResetNotificationMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
22 / 22
 sendPasswordResetCompleteMail
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
22 / 22
<?php
/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
namespace Eccube\Service;
use Eccube\Application;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
class MailService
{
    /** @var \Eccube\Application */
    public $app;
    /** @var \Eccube\Entity\BaseInfo */
    public $BaseInfo;
    public function __construct(Application $app)
    {
        $this->app = $app;
        $this->BaseInfo = $app['eccube.repository.base_info']->get();
    }
    /**
     * Send customer confirm mail.
     *
     * @param $Customer 会員情報
     * @param $activateUrl アクティベート用url
     */
    public function sendCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
    {
        log_info('仮会員登録メール送信開始');
        $body = $this->app->renderView('Mail/entry_confirm.twig', array(
            'Customer' => $Customer,
            'BaseInfo' => $this->BaseInfo,
            'activateUrl' => $activateUrl,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] 会員登録のご確認')
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Customer->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
                'activateUrl' => $activateUrl,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_CUSTOMER_CONFIRM, $event);
        $count = $this->app->mail($message, $failures);
        log_info('仮会員登録メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send customer complete mail.
     *
     * @param $Customer 会員情報
     */
    public function sendCustomerCompleteMail(\Eccube\Entity\Customer $Customer)
    {
        log_info('会員登録完了メール送信開始');
        $body = $this->app->renderView('Mail/entry_complete.twig', array(
            'Customer' => $Customer,
            'BaseInfo' => $this->BaseInfo,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] 会員登録が完了しました。')
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Customer->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_CUSTOMER_COMPLETE, $event);
        $count = $this->app->mail($message);
        log_info('会員登録完了メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send withdraw mail.
     *
     * @param $Customer 会員情報
     * @param $email 会員email
     */
    public function sendCustomerWithdrawMail(\Eccube\Entity\Customer $Customer, $email)
    {
        log_info('退会手続き完了メール送信開始');
        $body = $this->app->renderView('Mail/customer_withdraw_mail.twig', array(
            'Customer' => $Customer,
            'BaseInfo' => $this->BaseInfo,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] 退会手続きのご完了')
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($email))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
                'email' => $email,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_CUSTOMER_WITHDRAW, $event);
        $count = $this->app->mail($message);
        log_info('退会手続き完了メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send contact mail.
     *
     * @param $formData お問い合わせ内容
     */
    public function sendContactMail($formData)
    {
        log_info('お問い合わせ受付メール送信開始');
        $body = $this->app->renderView('Mail/contact_mail.twig', array(
            'data' => $formData,
            'BaseInfo' => $this->BaseInfo,
        ));
        // 問い合わせ者にメール送信
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] お問い合わせを受け付けました。')
            ->setFrom(array($this->BaseInfo->getEmail02() => $this->BaseInfo->getShopName()))
            ->setTo(array($formData['email']))
            ->setBcc($this->BaseInfo->getEmail02())
            ->setReplyTo($this->BaseInfo->getEmail02())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'formData' => $formData,
                'BaseInfo' => $this->BaseInfo,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_CONTACT, $event);
        $count = $this->app->mail($message);
        log_info('お問い合わせ受付メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Alias of sendContactMail().
     *
     * @param $formData お問い合わせ内容
     * @see sendContactMail()
     * @deprecated since 3.0.0, to be removed in 3.1
     * @link https://github.com/EC-CUBE/ec-cube/issues/1315
     */
    public function sendrContactMail($formData)
    {
        $this->sendContactMail($formData);
    }
    /**
     * Send order mail.
     *
     * @param \Eccube\Entity\Order $Order 受注情報
     * @return string
     */
    public function sendOrderMail(\Eccube\Entity\Order $Order)
    {
        log_info('受注メール送信開始');
        $MailTemplate = $this->app['eccube.repository.mail_template']->find(1);
        $body = $this->app->renderView($MailTemplate->getFileName(), array(
            'header' => $MailTemplate->getHeader(),
            'footer' => $MailTemplate->getFooter(),
            'Order' => $Order,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] ' . $MailTemplate->getSubject())
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Order->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Order' => $Order,
                'MailTemplate' => $MailTemplate,
                'BaseInfo' => $this->BaseInfo,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_ORDER, $event);
        $count = $this->app->mail($message);
        log_info('受注メール送信完了', array('count' => $count));
        return $message;
    }
    /**
     * Send admin customer confirm mail.
     *
     * @param $Customer 会員情報
     * @param $activateUrl アクティベート用url
     */
    public function sendAdminCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
    {
        log_info('仮会員登録再送メール送信開始');
        $body = $this->app->renderView('Mail/entry_confirm.twig', array(
            'Customer' => $Customer,
            'activateUrl' => $activateUrl,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] 会員登録のご確認')
            ->setFrom(array($this->BaseInfo->getEmail03() => $this->BaseInfo->getShopName()))
            ->setTo(array($Customer->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
                'activateUrl' => $activateUrl,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_ADMIN_CUSTOMER_CONFIRM, $event);
        $count = $this->app->mail($message);
        log_info('仮会員登録再送メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send admin order mail.
     *
     * @param $Order 受注情報
     * @param $formData 入力内容
     */
    public function sendAdminOrderMail(\Eccube\Entity\Order $Order, $formData)
    {
        log_info('受注管理通知メール送信開始');
        $body = $this->app->renderView('Mail/order.twig', array(
            'header' => $formData['header'],
            'footer' => $formData['footer'],
            'Order' => $Order,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] ' . $formData['subject'])
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Order->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Order' => $Order,
                'formData' => $formData,
                'BaseInfo' => $this->BaseInfo,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_ADMIN_ORDER, $event);
        $count = $this->app->mail($message);
        log_info('受注管理通知メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send password reset notification mail.
     *
     * @param $Customer 会員情報
     */
    public function sendPasswordResetNotificationMail(\Eccube\Entity\Customer $Customer, $reset_url)
    {
        log_info('パスワード再発行メール送信開始');
        $body = $this->app->renderView('Mail/forgot_mail.twig', array(
            'Customer' => $Customer,
            'reset_url' => $reset_url
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] パスワード変更のご確認')
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Customer->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
                'resetUrl' => $reset_url,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_PASSWORD_RESET, $event);
        $count = $this->app->mail($message);
        log_info('パスワード再発行メール送信完了', array('count' => $count));
        return $count;
    }
    /**
     * Send password reset notification mail.
     *
     * @param $Customer 会員情報
     */
    public function sendPasswordResetCompleteMail(\Eccube\Entity\Customer $Customer, $password)
    {
        log_info('パスワード変更完了メール送信開始');
        $body = $this->app->renderView('Mail/reset_complete_mail.twig', array(
            'Customer' => $Customer,
            'password' => $password,
        ));
        $message = \Swift_Message::newInstance()
            ->setSubject('[' . $this->BaseInfo->getShopName() . '] パスワード変更のお知らせ')
            ->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
            ->setTo(array($Customer->getEmail()))
            ->setBcc($this->BaseInfo->getEmail01())
            ->setReplyTo($this->BaseInfo->getEmail03())
            ->setReturnPath($this->BaseInfo->getEmail04())
            ->setBody($body);
        $event = new EventArgs(
            array(
                'message' => $message,
                'Customer' => $Customer,
                'BaseInfo' => $this->BaseInfo,
                'password' => $password,
            ),
            null
        );
        $this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_PASSWORD_RESET_COMPLETE, $event);
        $count = $this->app->mail($message);
        log_info('パスワード変更完了メール送信完了', array('count' => $count));
        return $count;
    }
}