php用awsSes发送带附件的邮件

aws发送邮件只能发送不带附件的,可以直接调方法sendEmail,但是发送带附件的邮件,用sendRawEmail必须自己写MIME邮件格式的邮件,不像sendEmail那样方便

/**
     * 发送带附件的邮件
     * @param array $toEmailList 目标邮箱组
     * @param string $sendContent 邮件正文
     * @param string $appName 应用名
     * @param string $sender 发送人
     * @param string $attachment 附件文件内容
     * @param string $attachmentName 附件文件名
     * @param string $attachmentType 附件类型
     * @return integer
     * @throws \Exception
     */
    public static function sendRawEmail($toEmailList, $sendContent, $appName, $sender, &$attachment = "", $attachmentName = "", $attachmentType = "Application/xlsx") {
        $emailConfig     = [
            'key'       => '替换自己的',
            'secret'    => '替换自己的',
            'region'    => 'us-east-1',
            'sender'    => '默认的发送人',
        ];
        $fromEmail = $sender ?: $emailConfig["sender"];
        preg_match('/<title>(.*)<\/title>/', $sendContent, $match);
        $subject = $match[1];
        $credentials = new Credentials($emailConfig['key'], $emailConfig['secret']);
        $SesClient = new SesClient([
            'version'     => 'latest',
            'region'      => $emailConfig['region'],
            'credentials' => $credentials,
        ]);
        //build the message
        if (is_array($toEmailList)) {
            $toEmailStr = rtrim(implode(',', $toEmailList), ',');
        } else {
            $toEmailStr = $toEmailList;
        }
        $boundary = uniqid("_Part_" . time(), true); //random unique string
        $msg =
            "To: $toEmailStr\n" .
            "From: $fromEmail\n" .
            "Subject: $subject\n" .
            "MIME-Version: 1.0\n" .
            "Content-Type: multipart/alternative;\n" .
            "        boundary=\"$boundary\"\n" .
            "Content-Transfer-Encoding: 8bit\n" .
            "\n" .
            "This is a multi-part message in MIME format.\n" .
            "\n" .
            "--$boundary\n" .
            "Content-Type: text/plain; charset=utf-8\n" .
            "\n" .
            strip_tags($sendContent) . "\n" .
            "\n" .
            "\n" .
            "--$boundary\n" .
            "Content-Type: text/html; charset=utf-8\n" .
            "\n" .
            "$sendContent\n" .
            "\n" .
            "\n" .
            "\n" .
            "--$boundary";
        //add attachments
        if (!empty($attachment)) {
            $msg .= "\n";
            $msg .= "Content-Transfer-Encoding: base64;" . "\n";
            $msg .= "Content-Type: $attachmentType; name=$attachmentName;" . "\n";
            $msg .= "Content-Disposition: attachment; filename=$attachmentName;" . "\n";
            $msg .= base64_encode($attachment);
            $msg .= "\n";
            $msg .= "--$boundary";
        }
        //close email
        $msg .= "--" . "\n";

        //now send the email out
        try {
            $result = $SesClient->sendRawEmail([
                'RawMessage' => [
                    'Data' => $msg
                ]
            ]);
            $messageId = $result['MessageId'];
        } catch (AwsException $e) {
            throw new UserException($e->getMessage());
        }
        return $messageId;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值