<?php
namespace app\common\command;

use app\adminapi\lists\works\ServiceWorkMailLists;
use excel\ExcelWriter;
use PHPMailer\PHPMailer\PHPMailer;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\facade\Log;

/**
 *  发送保险的邮箱
 * Class SendBxMail
 * @package app\command
 */
class SendBxMail extends Command
{
    protected function configure()
    {
        $this->setName('send_bx_mail')->setDescription('每天22点定时发送邮箱');
    }

    protected function execute(Input $input, Output $output)
    {
        try {
            return $this->sendMail();
        } catch (\Exception $e) {
            Log::write('SendBxMail:'.$e->getMessage());
            return false;
        }
    }



    public function sendMail()
    {
        // 文件路径 - 替换为你的实际文件路径
        //$filePath = 'uploads/baoxian/20250327职业责任险投保清单.xlsx';
        $excelFile = $this->getExcelFile();
        if(empty($excelFile)) throw new \Exception("邮件发送失败. 错误信息: 路径不存在-101");
        $filePath = $excelFile[0];
        $filename = $excelFile[1];
        if(empty($filePath)) throw new \Exception("邮件发送失败. 错误信息: 路径不存在-102");

        $mail = new PHPMailer(true);

        try {
            // 邮件服务器设置
            $mail->isSMTP();                                            // 使用SMTP发送邮件
            $mail->Host       = 'smtp.126.com';                     // SMTP服务器地址，替换为你的SMTP服务器
            $mail->SMTPAuth   = true;                                   // 启用SMTP认证
            $mail->Username   = 'whkyjl@126.com';               // SMTP用户名，替换为你的邮箱地址
            $mail->Password   = 'MNpgMjYMYehx3nPi';                        // SMTP密码，替换为你的邮箱密码
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;         // 开启加密，默认为无加密，可选`PHPMailer::ENCRYPTION_SMTPS`
            $mail->Port       = 465;

//            $mail->SMTPDebug = 2;                                       // 启用详细调试输出
            $mail->CharSet = 'UTF-8';
            // 发送者和接收者设置
            $mail->setFrom('whkyjl@126.com', '武汉开源节流科技有限公司');     // 发件人邮箱和名称
            $mail->addAddress('sujing@ub.chinalife-p.com.cn', '出单业务'); // 收件人邮箱和名称
            $mail->addAddress('649478907@qq.com', '出单业务'); // 收件人邮箱和名称
            $mail->addAddress('liliangjie@ub.chinalife-p.com.cn', '出单业务'); // 收件人邮箱和名称
            $mail->addAddress('fangxuhao@outlook.com', '出单业务'); // 收件人邮箱和名称
//            $mail->addAddress('1804628603@qq.com', '出单业务'); // 收件人邮箱和名称
            $mail->addAddress('466014217@qq.com', '出单业务'); // 收件人邮箱和名称

            // 设置邮件内容
            $mail->isHTML(true);                                        // 将邮件正文设置为HTML格式
            // 设置邮件内容
            $mail->Subject = mb_convert_encoding('请查收附件中的Excel文件', 'UTF-8', 'auto');
            $mail->Body    = mb_convert_encoding('<p>你好，<br>请查收附件中的Excel文件。</p>', 'UTF-8', 'auto');
            $mail->AltBody = mb_convert_encoding('你好，请查收附件中的Excel文件。', 'UTF-8', 'auto');
            // 添加附件
            $mail->addAttachment($filePath, $filename); // 添加附件，第二个参数是显示在邮件中的文件名

            $mail->send();
            return '邮件发送成功';
        } catch (\Exception $e) {
            throw new \Exception("邮件发送失败. 错误信息: {$mail->ErrorInfo}");
        }
    }

    public function getExcelFile()
    {
        try {
            $downloadObj = new ServiceWorkMailLists();
            $sheet = new ExcelWriter();
            $lists = $downloadObj->excelExportList([]);
            $filename = $downloadObj->setFileName().'职业责任险投保清单';
            $fields = $downloadObj->setExcelComplexFields();
            if(!$lists || !$fields){
                Log::info('ServiceWorkMail:lists或fields不存在--'.json_encode([$lists,$fields]));
                return '';
            }else{
                $sheet->savePath = './public/exports/';
                $sheet->generateExcelFile($fields['zh_cn_fields'], $lists,$filename, $fields['data_fields']);
                return [$sheet->fileUrl(),$filename.'.xlsx'];
            }
        } catch (\Exception $e) {
            Log::info('ServiceWorkMail:'."生成职业责任险投保清单失败. 错误信息: {$e->getMessage()}");
            return '';
        }
    }








}