Browse Source

feat: alibabacloud dm email service

M1Screw 1 year ago
parent
commit
03afa26386

+ 1 - 0
composer.json

@@ -14,6 +14,7 @@
         "ext-xml": "*",
         "ext-yaml": "*",
         "ext-zip": "*",
+        "alibabacloud/dm-20170622": "^1.2",
         "alipaysdk/openapi": "*@dev",
         "aws/aws-sdk-php": "^3",
         "geoip2/geoip2": "^3",

+ 553 - 1
composer.lock

@@ -4,8 +4,506 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "69559eeb7d81d52151f544d1437a46f8",
+    "content-hash": "96d5b940ae14e8988c7d90f216baf01a",
     "packages": [
+        {
+            "name": "adbario/php-dot-notation",
+            "version": "2.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/adbario/php-dot-notation.git",
+                "reference": "081e2cca50c84bfeeea2e3ef9b2c8d206d80ccae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/081e2cca50c84bfeeea2e3ef9b2c8d206d80ccae",
+                "reference": "081e2cca50c84bfeeea2e3ef9b2c8d206d80ccae",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": "^5.5 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8|^5.7|^6.6|^7.5|^8.5|^9.5",
+                "squizlabs/php_codesniffer": "^3.6"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/helpers.php"
+                ],
+                "psr-4": {
+                    "Adbar\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Riku Särkinen",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "PHP dot notation access to arrays",
+            "homepage": "https://github.com/adbario/php-dot-notation",
+            "keywords": [
+                "ArrayAccess",
+                "dotnotation"
+            ],
+            "support": {
+                "issues": "https://github.com/adbario/php-dot-notation/issues",
+                "source": "https://github.com/adbario/php-dot-notation/tree/2.5.0"
+            },
+            "time": "2022-10-14T20:31:46+00:00"
+        },
+        {
+            "name": "alibabacloud/credentials",
+            "version": "1.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/aliyun/credentials-php.git",
+                "reference": "1d8383ceef695974a88a3859c42e235fd2e3981a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/aliyun/credentials-php/zipball/1d8383ceef695974a88a3859c42e235fd2e3981a",
+                "reference": "1d8383ceef695974a88a3859c42e235fd2e3981a",
+                "shasum": ""
+            },
+            "require": {
+                "adbario/php-dot-notation": "^2.2",
+                "alibabacloud/tea": "^3.0",
+                "ext-curl": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "ext-simplexml": "*",
+                "ext-xmlwriter": "*",
+                "guzzlehttp/guzzle": "^6.3|^7.0",
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "composer/composer": "^1.8",
+                "drupal/coder": "^8.3",
+                "ext-dom": "*",
+                "ext-pcre": "*",
+                "ext-sockets": "*",
+                "ext-spl": "*",
+                "mikey179/vfsstream": "^1.6",
+                "monolog/monolog": "^1.24",
+                "phpunit/phpunit": "^5.7|^6.6|^7.5",
+                "psr/cache": "^1.0",
+                "symfony/dotenv": "^3.4",
+                "symfony/var-dumper": "^3.4"
+            },
+            "suggest": {
+                "ext-sockets": "To use client-side monitoring"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Credentials\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]",
+                    "homepage": "http://www.alibabacloud.com"
+                }
+            ],
+            "description": "Alibaba Cloud Credentials for PHP",
+            "homepage": "https://www.alibabacloud.com/",
+            "keywords": [
+                "alibaba",
+                "alibabacloud",
+                "aliyun",
+                "client",
+                "cloud",
+                "credentials",
+                "library",
+                "sdk",
+                "tool"
+            ],
+            "support": {
+                "issues": "https://github.com/aliyun/credentials-php/issues",
+                "source": "https://github.com/aliyun/credentials-php"
+            },
+            "time": "2023-04-11T02:12:12+00:00"
+        },
+        {
+            "name": "alibabacloud/darabonba-openapi",
+            "version": "0.2.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/darabonba-openapi.git",
+                "reference": "88f42443e1b5c9d086d0444baa4a874f8636f7bb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/darabonba-openapi/zipball/88f42443e1b5c9d086d0444baa4a874f8636f7bb",
+                "reference": "88f42443e1b5c9d086d0444baa4a874f8636f7bb",
+                "shasum": ""
+            },
+            "require": {
+                "alibabacloud/credentials": "^1.1",
+                "alibabacloud/gateway-spi": "^1",
+                "alibabacloud/openapi-util": "^0.1.10|^0.2.1",
+                "alibabacloud/tea-utils": "^0.2.19",
+                "alibabacloud/tea-xml": "^0.2",
+                "php": ">5.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Darabonba\\OpenApi\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud OpenApi Client",
+            "support": {
+                "issues": "https://github.com/alibabacloud-sdk-php/darabonba-openapi/issues",
+                "source": "https://github.com/alibabacloud-sdk-php/darabonba-openapi/tree/0.2.10"
+            },
+            "time": "2023-11-23T07:01:20+00:00"
+        },
+        {
+            "name": "alibabacloud/dm-20170622",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/dm-20170622.git",
+                "reference": "a5efe273e9651b53ed648a806d3f653217d733a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/dm-20170622/zipball/a5efe273e9651b53ed648a806d3f653217d733a2",
+                "reference": "a5efe273e9651b53ed648a806d3f653217d733a2",
+                "shasum": ""
+            },
+            "require": {
+                "alibabacloud/darabonba-openapi": "^0.2.10",
+                "alibabacloud/endpoint-util": "^0.1.0",
+                "alibabacloud/openapi-util": "^0.1.10|^0.2.1",
+                "alibabacloud/tea-utils": "^0.2.19",
+                "php": ">5.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\SDK\\Dm\\V20170622\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud Dm (20170622) SDK Library for PHP",
+            "support": {
+                "source": "https://github.com/alibabacloud-sdk-php/dm-20170622/tree/1.2.1"
+            },
+            "time": "2024-02-20T17:15:43+00:00"
+        },
+        {
+            "name": "alibabacloud/endpoint-util",
+            "version": "0.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/endpoint-util.git",
+                "reference": "f3fe88a25d8df4faa3b0ae14ff202a9cc094e6c5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/endpoint-util/zipball/f3fe88a25d8df4faa3b0ae14ff202a9cc094e6c5",
+                "reference": "f3fe88a25d8df4faa3b0ae14ff202a9cc094e6c5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35|^5.4.3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Endpoint\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud Endpoint Library for PHP",
+            "support": {
+                "source": "https://github.com/alibabacloud-sdk-php/endpoint-util/tree/0.1.1"
+            },
+            "time": "2020-06-04T10:57:15+00:00"
+        },
+        {
+            "name": "alibabacloud/gateway-spi",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/alibabacloud-gateway-spi.git",
+                "reference": "7440f77750c329d8ab252db1d1d967314ccd1fcb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/alibabacloud-gateway-spi/zipball/7440f77750c329d8ab252db1d1d967314ccd1fcb",
+                "reference": "7440f77750c329d8ab252db1d1d967314ccd1fcb",
+                "shasum": ""
+            },
+            "require": {
+                "alibabacloud/credentials": "^1.1",
+                "php": ">5.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Darabonba\\GatewaySpi\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud Gateway SPI Client",
+            "support": {
+                "source": "https://github.com/alibabacloud-sdk-php/alibabacloud-gateway-spi/tree/1.0.0"
+            },
+            "time": "2022-07-14T05:31:35+00:00"
+        },
+        {
+            "name": "alibabacloud/openapi-util",
+            "version": "0.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/openapi-util.git",
+                "reference": "f31f7bcd835e08ca24b6b8ba33637eb4eceb093a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/openapi-util/zipball/f31f7bcd835e08ca24b6b8ba33637eb4eceb093a",
+                "reference": "f31f7bcd835e08ca24b6b8ba33637eb4eceb093a",
+                "shasum": ""
+            },
+            "require": {
+                "alibabacloud/tea": "^3.1",
+                "alibabacloud/tea-utils": "^0.2",
+                "lizhichao/one-sm": "^1.5",
+                "php": ">5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\OpenApiUtil\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud OpenApi Util",
+            "support": {
+                "issues": "https://github.com/alibabacloud-sdk-php/openapi-util/issues",
+                "source": "https://github.com/alibabacloud-sdk-php/openapi-util/tree/0.2.1"
+            },
+            "time": "2023-01-10T09:10:10+00:00"
+        },
+        {
+            "name": "alibabacloud/tea",
+            "version": "3.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/aliyun/tea-php.git",
+                "reference": "1619cb96c158384f72b873e1f85de8b299c9c367"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/aliyun/tea-php/zipball/1619cb96c158384f72b873e1f85de8b299c9c367",
+                "reference": "1619cb96c158384f72b873e1f85de8b299c9c367",
+                "shasum": ""
+            },
+            "require": {
+                "adbario/php-dot-notation": "^2.4",
+                "ext-curl": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "ext-simplexml": "*",
+                "ext-xmlwriter": "*",
+                "guzzlehttp/guzzle": "^6.3|^7.0",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*",
+                "symfony/dotenv": "^3.4",
+                "symfony/var-dumper": "^3.4"
+            },
+            "suggest": {
+                "ext-sockets": "To use client-side monitoring"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Tea\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]",
+                    "homepage": "http://www.alibabacloud.com"
+                }
+            ],
+            "description": "Client of Tea for PHP",
+            "homepage": "https://www.alibabacloud.com/",
+            "keywords": [
+                "alibabacloud",
+                "client",
+                "cloud",
+                "tea"
+            ],
+            "support": {
+                "issues": "https://github.com/aliyun/tea-php/issues",
+                "source": "https://github.com/aliyun/tea-php"
+            },
+            "time": "2023-05-16T06:43:41+00:00"
+        },
+        {
+            "name": "alibabacloud/tea-utils",
+            "version": "0.2.19",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/tea-utils.git",
+                "reference": "8dfc1a93e9415818e93a621b644abbb84981aea4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/tea-utils/zipball/8dfc1a93e9415818e93a621b644abbb84981aea4",
+                "reference": "8dfc1a93e9415818e93a621b644abbb84981aea4",
+                "shasum": ""
+            },
+            "require": {
+                "alibabacloud/tea": "^3.1",
+                "php": ">5.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Tea\\Utils\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud Tea Utils for PHP",
+            "support": {
+                "issues": "https://github.com/aliyun/tea-util/issues",
+                "source": "https://github.com/aliyun/tea-util"
+            },
+            "time": "2023-06-26T09:49:19+00:00"
+        },
+        {
+            "name": "alibabacloud/tea-xml",
+            "version": "0.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/tea-xml.git",
+                "reference": "3e0c000bf536224eebbac913c371bef174c0a16a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/tea-xml/zipball/3e0c000bf536224eebbac913c371bef174c0a16a",
+                "reference": "3e0c000bf536224eebbac913c371bef174c0a16a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*",
+                "symfony/var-dumper": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Tea\\XML\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Alibaba Cloud Tea XML Library for PHP",
+            "support": {
+                "source": "https://github.com/alibabacloud-sdk-php/tea-xml/tree/0.2.4"
+            },
+            "time": "2022-08-02T04:12:58+00:00"
+        },
         {
             "name": "alipaysdk/openapi",
             "version": "dev-master",
@@ -1915,6 +2413,60 @@
             },
             "time": "2022-10-29T09:31:25+00:00"
         },
+        {
+            "name": "lizhichao/one-sm",
+            "version": "1.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/lizhichao/sm.git",
+                "reference": "687a012a44a5bfd4d9143a0234e1060543be455a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/lizhichao/sm/zipball/687a012a44a5bfd4d9143a0234e1060543be455a",
+                "reference": "687a012a44a5bfd4d9143a0234e1060543be455a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "OneSm\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "tanszhe",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "国密sm3",
+            "keywords": [
+                "php",
+                "sm3"
+            ],
+            "support": {
+                "issues": "https://github.com/lizhichao/sm/issues",
+                "source": "https://github.com/lizhichao/sm/tree/1.10"
+            },
+            "funding": [
+                {
+                    "url": "https://www.vicsdf.com/img/w.jpg",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.vicsdf.com/img/z.jpg",
+                    "type": "custom"
+                }
+            ],
+            "time": "2021-05-26T06:19:22+00:00"
+        },
         {
             "name": "mailchimp/transactional",
             "version": "1.0.59",

+ 50 - 0
config/settings.json

@@ -549,6 +549,56 @@
         "default": "",
         "mark": "Mailchimp Sender"
     },
+    {
+        "id": null,
+        "item": "alibabacloud_dm_access_key_id",
+        "value": "",
+        "class": "email",
+        "is_public": 0,
+        "type": "string",
+        "default": "",
+        "mark": "AlibabaCloud DM Access Key ID"
+    },
+    {
+        "id": null,
+        "item": "alibabacloud_dm_access_key_secret",
+        "value": "",
+        "class": "email",
+        "is_public": 0,
+        "type": "string",
+        "default": "",
+        "mark": "AlibabaCloud DM Access Key Secret"
+    },
+    {
+        "id": null,
+        "item": "alibabacloud_dm_endpoint",
+        "value": "",
+        "class": "email",
+        "is_public": 0,
+        "type": "string",
+        "default": "",
+        "mark": "AlibabaCloud DM Endpoint"
+    },
+    {
+        "id": null,
+        "item": "alibabacloud_dm_account_name",
+        "value": "",
+        "class": "email",
+        "is_public": 0,
+        "type": "string",
+        "default": "",
+        "mark": "AlibabaCloud DM Account Name"
+    },
+    {
+        "id": null,
+        "item": "alibabacloud_dm_from_alias",
+        "value": "",
+        "class": "email",
+        "is_public": 0,
+        "type": "string",
+        "default": "",
+        "mark": "AlibabaCloud DM From Alias"
+    },
     {
         "id": null,
         "item": "email_verify_code_ttl",

+ 79 - 30
resources/views/tabler/admin/setting/email.tpl

@@ -53,6 +53,10 @@
                                 </li>
                                 <li class="nav-item">
                                     <a href="#mailchimp" class="nav-link" data-bs-toggle="tab">Mailchimp</a>
+                                </li>
+                                <li class="nav-item">
+                                    <a href="#alibabacloud" class="nav-link" data-bs-toggle="tab">AlibabaCloud DM</a>
+                                </li>
                             </ul>
                         </div>
                         <div class="card-body">
@@ -83,10 +87,16 @@
                                                         postal
                                                     </option>
                                                     <option value="ses"
-                                                            {if $settings['email_driver'] === "ses"}selected{/if}>ses
+                                                            {if $settings['email_driver'] === "ses"}selected{/if}>
+                                                        ses
                                                     </option>
                                                     <option value="mailchimp"
-                                                            {if $settings['email_driver'] === "mailchimp"}selected{/if}>ses
+                                                            {if $settings['email_driver'] === "mailchimp"}selected{/if}>
+                                                        mailchimp
+                                                    </option>
+                                                    <option value="alibabacloud"
+                                                            {if $settings['email_driver'] === "alibabacloud"}selected{/if}>
+                                                        alibabacloud
                                                     </option>
                                                 </select>
                                             </div>
@@ -138,28 +148,28 @@
                                 <div class="tab-pane" id="smtp">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 主机地址</label>
+                                            <label class="form-label col-3 col-form-label">Host</label>
                                             <div class="col">
                                                 <input id="smtp_host" type="text" class="form-control"
                                                        value="{$settings['smtp_host']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 用户名</label>
+                                            <label class="form-label col-3 col-form-label">Username</label>
                                             <div class="col">
                                                 <input id="smtp_username" type="text" class="form-control"
                                                        value="{$settings['smtp_username']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 密码</label>
+                                            <label class="form-label col-3 col-form-label">Password</label>
                                             <div class="col">
                                                 <input id="smtp_password" type="text" class="form-control"
                                                        value="{$settings['smtp_password']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 端口</label>
+                                            <label class="form-label col-3 col-form-label">Port</label>
                                             <div class="col">
                                                 <select id="smtp_port" class="col form-select"
                                                         value="{$settings['smtp_port']}">
@@ -185,33 +195,33 @@
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 发件人名称</label>
+                                            <label class="form-label col-3 col-form-label">Name</label>
                                             <div class="col">
                                                 <input id="smtp_name" type="text" class="form-control"
                                                        value="{$settings['smtp_name']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">SMTP 发信地址</label>
+                                            <label class="form-label col-3 col-form-label">Sener</label>
                                             <div class="col">
                                                 <input id="smtp_sender" type="text" class="form-control"
                                                        value="{$settings['smtp_sender']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">是否使用 TLS/SSL</label>
+                                            <label class="form-label col-3 col-form-label">Enable TLS/SSL</label>
                                             <div class="col">
                                                 <select id="smtp_ssl" class="col form-select"
                                                         value="{$settings['smtp_ssl']}">
-                                                    <option value="0" {if ! $settings['smtp_ssl']}selected{/if}>关闭
+                                                    <option value="0" {if ! $settings['smtp_ssl']}selected{/if}>False
                                                     </option>
-                                                    <option value="1" {if $settings['smtp_ssl']}selected{/if}>开启
+                                                    <option value="1" {if $settings['smtp_ssl']}selected{/if}>True
                                                     </option>
                                                 </select>
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">客户邮件副本接收邮箱</label>
+                                            <label class="form-label col-3 col-form-label">BBC</label>
                                             <div class="col">
                                                 <input id="smtp_bbc" type="text" class="form-control"
                                                        value="{$settings['smtp_bbc']}">
@@ -222,28 +232,28 @@
                                 <div class="tab-pane" id="mailgun">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailgun 密钥</label>
+                                            <label class="form-label col-3 col-form-label">Api Key</label>
                                             <div class="col">
                                                 <input id="mailgun_key" type="text" class="form-control"
                                                        value="{$settings['mailgun_key']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailgun 域名</label>
+                                            <label class="form-label col-3 col-form-label">Domain</label>
                                             <div class="col">
                                                 <input id="mailgun_domain" type="text" class="form-control"
                                                        value="{$settings['mailgun_domain']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailgun 发信地址</label>
+                                            <label class="form-label col-3 col-form-label">Sender</label>
                                             <div class="col">
                                                 <input id="mailgun_sender" type="text" class="form-control"
                                                        value="{$settings['mailgun_sender']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailgun 发信人名称</label>
+                                            <label class="form-label col-3 col-form-label">Sender Name</label>
                                             <div class="col">
                                                 <input id="mailgun_sender_name" type="text" class="form-control"
                                                        value="{$settings['mailgun_sender_name']}">
@@ -254,21 +264,21 @@
                                 <div class="tab-pane" id="sendgrid">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Sendgrid 密钥</label>
+                                            <label class="form-label col-3 col-form-label">Api Key</label>
                                             <div class="col">
                                                 <input id="sendgrid_key" type="text" class="form-control"
                                                        value="{$settings['sendgrid_key']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Sendgrid 发信地址</label>
+                                            <label class="form-label col-3 col-form-label">Sender</label>
                                             <div class="col">
                                                 <input id="sendgrid_sender" type="text" class="form-control"
                                                        value="{$settings['sendgrid_sender']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Sendgrid 发件人名称</label>
+                                            <label class="form-label col-3 col-form-label">Name</label>
                                             <div class="col">
                                                 <input id="sendgrid_name" type="text" class="form-control"
                                                        value="{$settings['sendgrid_name']}">
@@ -279,28 +289,28 @@
                                 <div class="tab-pane" id="postal">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Postal API地址</label>
+                                            <label class="form-label col-3 col-form-label">Host</label>
                                             <div class="col">
                                                 <input id="postal_host" type="text" class="form-control"
                                                        value="{$settings['postal_host']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Postal API密钥</label>
+                                            <label class="form-label col-3 col-form-label">Api Key</label>
                                             <div class="col">
                                                 <input id="postal_key" type="text" class="form-control"
                                                        value="{$settings['postal_key']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Postal发件邮箱</label>
+                                            <label class="form-label col-3 col-form-label">Sender</label>
                                             <div class="col">
                                                 <input id="postal_sender" type="text" class="form-control"
                                                        value="{$settings['postal_sender']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Postal发件人名称</label>
+                                            <label class="form-label col-3 col-form-label">Name</label>
                                             <div class="col">
                                                 <input id="postal_name" type="text" class="form-control"
                                                        value="{$settings['postal_name']}">
@@ -311,28 +321,28 @@
                                 <div class="tab-pane" id="ses">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">AWS 密钥 ID</label>
+                                            <label class="form-label col-3 col-form-label">Access Key ID</label>
                                             <div class="col">
                                                 <input id="aws_access_key_id" type="text" class="form-control"
                                                        value="{$settings['aws_access_key_id']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">AWS 密钥</label>
+                                            <label class="form-label col-3 col-form-label">Access Key Secret</label>
                                             <div class="col">
                                                 <input id="aws_secret_access_key" type="text" class="form-control"
                                                        value="{$settings['aws_secret_access_key']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">AWS 区域</label>
+                                            <label class="form-label col-3 col-form-label">Region</label>
                                             <div class="col">
                                                 <input id="aws_region" type="text" class="form-control"
                                                        value="{$settings['aws_region']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">AWS SES 发信地址</label>
+                                            <label class="form-label col-3 col-form-label">Sender</label>
                                             <div class="col">
                                                 <input id="aws_ses_sender" type="text" class="form-control"
                                                        value="{$settings['aws_ses_sender']}">
@@ -343,21 +353,21 @@
                                 <div class="tab-pane" id="mailchimp">
                                     <div class="card-body">
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailchimp API密钥</label>
+                                            <label class="form-label col-3 col-form-label">Api Key</label>
                                             <div class="col">
                                                 <input id="mailchimp_key" type="text" class="form-control"
                                                        value="{$settings['mailchimp_key']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailchimp发件邮箱</label>
+                                            <label class="form-label col-3 col-form-label">From Email</label>
                                             <div class="col">
                                                 <input id="mailchimp_from_email" type="text" class="form-control"
                                                        value="{$settings['mailchimp_from_email']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
-                                            <label class="form-label col-3 col-form-label">Mailchimp发件人名称</label>
+                                            <label class="form-label col-3 col-form-label">From Name</label>
                                             <div class="col">
                                                 <input id="mailchimp_from_name" type="text" class="form-control"
                                                        value="{$settings['mailchimp_from_name']}">
@@ -365,6 +375,45 @@
                                         </div>
                                     </div>
                                 </div>
+                                <div class="tab-pane" id="alibabacloud">
+                                    <div class="card-body">
+                                        <div class="form-group mb-3 row">
+                                            <label class="form-label col-3 col-form-label">Access Key ID</label>
+                                            <div class="col">
+                                                <input id="alibabacloud_dm_access_key_id" type="text" class="form-control"
+                                                       value="{$settings['alibabacloud_dm_access_key_id']}">
+                                            </div>
+                                        </div>
+                                        <div class="form-group mb-3 row">
+                                            <label class="form-label col-3 col-form-label">Access Key Secret</label>
+                                            <div class="col">
+                                                <input id="alibabacloud_dm_access_key_secret" type="text" class="form-control"
+                                                       value="{$settings['alibabacloud_dm_access_key_secret']}">
+                                            </div>
+                                        </div>
+                                        <div class="form-group mb-3 row">
+                                            <label class="form-label col-3 col-form-label">Endpoint</label>
+                                            <div class="col">
+                                                <input id="alibabacloud_dm_endpoint" type="text" class="form-control"
+                                                       value="{$settings['alibabacloud_dm_endpoint']}">
+                                            </div>
+                                        </div>
+                                        <div class="form-group mb-3 row">
+                                            <label class="form-label col-3 col-form-label">Account Name</label>
+                                            <div class="col">
+                                                <input id="alibabacloud_dm_account_name" type="text" class="form-control"
+                                                       value="{$settings['alibabacloud_dm_account_name']}">
+                                            </div>
+                                        </div>
+                                        <div class="form-group mb-3 row">
+                                            <label class="form-label col-3 col-form-label">From Alias</label>
+                                            <div class="col">
+                                                <input id="alibabacloud_dm_from_alias" type="text" class="form-control"
+                                                       value="{$settings['alibabacloud_dm_from_alias']}">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
                             </div>
                         </div>
                     </div>

+ 6 - 0
src/Controllers/Admin/Setting/EmailController.php

@@ -50,6 +50,12 @@ final class EmailController extends BaseController
         'mailchimp_key',
         'mailchimp_from_email',
         'mailchimp_from_name',
+        // Alibaba Cloud
+        'alibabacloud_dm_access_key_id',
+        'alibabacloud_dm_access_key_secret',
+        'alibabacloud_dm_endpoint',
+        'alibabacloud_dm_account_name',
+        'alibabacloud_dm_from_alias',
     ];
 
     /**

+ 3 - 1
src/Services/Mail.php

@@ -5,6 +5,7 @@ declare(strict_types=1);
 namespace App\Services;
 
 use App\Models\Config;
+use App\Services\Mail\AlibabaCloud;
 use App\Services\Mail\Mailchimp;
 use App\Services\Mail\Mailgun;
 use App\Services\Mail\NullMail;
@@ -21,10 +22,11 @@ use Smarty;
  */
 final class Mail
 {
-    public static function getClient(): Mailchimp|Mailgun|NullMail|Postal|SendGrid|Ses|Smtp
+    public static function getClient(): AlibabaCloud|Mailchimp|Mailgun|NullMail|Postal|SendGrid|Ses|Smtp
     {
         $driver = Config::obtain('email_driver');
         return match ($driver) {
+            'alibabacloud' => new AlibabaCloud(),
             'mailchimp' => new Mailchimp(),
             'mailgun' => new Mailgun(),
             'postal' => new Postal(),

+ 46 - 0
src/Services/Mail/AlibabaCloud.php

@@ -0,0 +1,46 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Services\Mail;
+
+use AlibabaCloud\SDK\Dm\V20170622\Dm;
+use AlibabaCloud\SDK\Dm\V20170622\Models\SingleSendMailRequest;
+use App\Models\Config;
+use Darabonba\OpenApi\Models\Config as OpenApiConfig;
+
+final class AlibabaCloud extends Base
+{
+    private Dm $client;
+    private string $account_name;
+    private string $from_alias;
+
+    public function __construct()
+    {
+        $configs = Config::getClass('email');
+
+        $this->account_name = $configs['alibabacloud_dm_account_name'];
+        $this->from_alias = $configs['alibabacloud_dm_from_alias'];
+
+        $this->client = new Dm(new OpenApiConfig([
+            'accessKeyId' => $configs['alibabacloud_dm_access_key_id'],
+            'accessKeySecret' => $configs['alibabacloud_dm_access_key_secret'],
+            'endpoint' => $configs['alibabacloud_dm_endpoint'],
+        ]));
+    }
+
+    public function send($to, $subject, $body): void
+    {
+        $request = new SingleSendMailRequest([
+            'accountName' => $this->account_name,
+            'addressType' => 1,
+            'replyToAddress' => false,
+            'toAddress' => $to,
+            'subject' => $subject,
+            'htmlBody' => $body,
+            'fromAlias' => $this->from_alias,
+        ]);
+
+        $this->client->singleSendMail($request);
+    }
+}

+ 2 - 2
tests/App/Services/DBTest.php

@@ -26,7 +26,7 @@ class DBTest extends TestCase
         $_ENV['db_port'] = '3306';
 
         $expected1 = [
-            'driver' => 'mysql',
+            'driver' => 'mariadb',
             'read' => [
                 'host' => 'localhost',
             ],
@@ -52,7 +52,7 @@ class DBTest extends TestCase
         $_ENV['db_socket'] = '/tmp/mysql.sock';
 
         $expected2 = [
-            'driver' => 'mysql',
+            'driver' => 'mariadb',
             'host' => 'localhost',
             'unix_socket' => '/tmp/mysql.sock',
             'database' => 'test_db',