表单转发有奖

This commit is contained in:
mzl
2025-11-12 18:08:47 +08:00
parent 83749ff3fc
commit 774b8368ed
10 changed files with 5000 additions and 31 deletions
+223 -25
View File
@@ -2,41 +2,239 @@
namespace app\controller;
use app\utils\Email;
use support\Request;
use support\Log;
class IndexController
{
public function index(Request $request)
public function form(Request $request, int $id)
{
return <<<EOF
<style>
* {
padding: 0;
margin: 0;
}
iframe {
border: none;
overflow: scroll;
}
</style>
<iframe
src="https://www.workerman.net/wellcome"
width="100%"
height="100%"
allow="clipboard-write"
sandbox="allow-scripts allow-same-origin allow-popups"
></iframe>
EOF;
try {
$params = $request->all();
if ($id == 1) {
$mailto = 'info@magicbridgeauto.com';
$fromDomain = 'magicbridgeauto.com';
} else {
$mailto = 'mzl@hnxinyouhe.com';
$fromDomain = 'magicbridgeauto.com';
}
if ($request->method() == 'GET') {
$config = [
'iLang' => 'en',
'Act' => 'Inquiry',
'post_url' => 'https://transmit.dev.hnxinyouhe.com/form/'.$id.'?m=Data&a=save',
'mailto' => $mailto,
'fromDomain' => $fromDomain,
'fromPath' => parse_url($params['fromlink'], PHP_URL_PATH),
'm' => $params['m'],
'a' => $params['a'],
'tid' => $params['tid'],
'cid' => $params['cid'],
'version' => $params['version'],
'fromlink' => $params['fromlink']
];
$html = match ($params['tid']) {
'en-5-LP-pnx' => $this->formHmtl($config),
'en-3-P-vdx' => $this->formHmtl2($config)
};
return json([
'code' => 200,
'data' => [
'html' => $html
],
'message' => 'success'
]);
}
if ($request->method() == 'POST') {
$ip = $request->getRealIp($safe_mode=true);
$edata = [
'mailto' => $params['mailto'],
'Date' => date('Y-m-d H:i:s', time()),
'Email' => $params['userEMail'],
'Name' => $params['userName'],
'Tel' => $params['userTel'],
'Company' => '',
'Country' => $params['uCountry'],
'Form Url' => $params['fromlink'],
'Message' => $params['Message'],
'Ip' => $ip,
'IpLocation' => ip2region($ip).'(仅供参考)',
'iLang' => $params['iLang'],
'mailto' => $params['mailto'],
'navigator_language' => $params['navigator_language'],
'navigator_platform' => $params['navigator_platform'],
'screen_width' => $params['screen_width'],
'screen_height' => $params['screen_height'],
'uCountry' => $params['uCountry']
];
$this->emailHtml($edata);
return json([
'code' => 200,
'data' => [],
'message' => 'Thank you for your message! We will contact with you soon.'
]);
}
} catch (\Throwable $th) {
Log::info('Data:'.date('Y-m-d H:i:s').':'.$th->getMessage().'|'.$th->getLine().'|'.$th->getFile());
}
}
public function view(Request $request)
public function formHmtl($config)
{
return view('index/view', ['name' => 'webman']);
// https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-5-LP-pnx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/contact-us/
$html = '<form class="xz-form-x xz-form-pnx" action="'.$config['post_url'].'"> <style> .xz-form-pnx { --c-theme: #BB0010; --c-border: #f0f0f0; --c-bg: #fff; --c-label: #333; --c-font: #666; --c-green: #00B160; --size: 1.6rem; --gap: 1.25em; --h: 3em; --lh: 1.8em; --pd: .4em .625em; --br: 4px; --btn-w: 18.75em; --btn-jc: center; --lines: 4; } .xz-form-pnx { font-size: var(--size); } .xz-form-pnx .xz-form-infos { display: grid; grid-template-columns: 1fr 1fr; grid-gap: var(--gap); margin-bottom: var(--gap); } .xz-form-pnx .xz-form-info, .xz-form-pnx .xz-form-msg { border: solid 1px var(--c-border); background: var(--c-bg); padding: var(--pd); display: flex; align-items: center; border-radius: var(--br); box-sizing: border-box; } .xz-form-pnx .xz-form-info { height: var(--h); } .xz-form-pnx .xz-form-msg { align-items: flex-start; } .xz-form-pnx .xz-form-input, .xz-form-pnx .xz-form-textarea { width: 100%; border: none; font-size: var(--size); line-height: var(--lh); outline: 0; padding: 0; margin-left: 1em; color: var(--c-font); } .xz-form-pnx .xz-form-textarea { height: calc(var(--lh) * var(--lines)); min-height: var(--h); font-family: inherit; resize: none; } .xz-form-pnx .xz-form-label { display: block; color: var(--c-label); line-height: var(--lh); white-space: nowrap; } .xz-form-pnx .xz-form-label.required:after { content: "*"; margin-left: .625em; color: var(--c-theme); } .xz-form-pnx .xz-form-btns { margin-top: var(--gap); display: flex; justify-content: var(--btn-jc); } .xz-form-pnx .xz-form-button { font-size: var(--size); border-radius: var(--br); display: inline-flex; justify-content: center; align-items: center; width: var(--btn-w); height: var(--h); background: var(--c-theme); color: #fff; border: none; transition: all .3s; display: flex; justify-content: center; align-items: center; gap: 1em; } .xz-form-pnx .xz-form-button path { fill: #fff; } .xz-form-pnx .xz-form-button:hover { filter: brightness(1.1); } .xz-form-pnx .xz-form-button:active { transform: scale(.98); } @media screen and (max-width: 500px){ .xz-form-pnx { --gap: .8em; } .xz-form-pnx .xz-form-infos { grid-template-columns: 1fr; } .xz-form-pnx .xz-form-button { width: 100%; } } .xzform_o { position: relative; } .xz-form-pnx .xz-form-message.success { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); z-index: 9; max-width: 75%; display: flex; text-align: center; align-items: center; padding: 4em; background: rgba(255,255,255,.8); color: var(--c-green); font-size: 1.125em; line-height: 1.8em; font-weight: 500; box-shadow: 0 .5rem 3rem -.5rem rgba(0,0,0,.3); } </style> <input type="hidden" name="iLang" value="'.$config['iLang'].'"> <input type="hidden" name="Act" value="'.$config['Act'].'"> <input type="hidden" name="mailto" value="'.$config['mailto'].'"> <input type="hidden" name="customerId" value="'.$config['cid'].'"> <input type="hidden" name="fromDomain" value="'.$config['fromDomain'].'"> <input type="hidden" name="fromlink" value="'.$config['fromlink'].'"> <input type="hidden" name="fromPath" value="'.$config['fromPath'].'"> <input type="hidden" name="navigator.language"> <input type="hidden" name="navigator.platform"> <input type="hidden" name="screen.width"> <input type="hidden" name="screen.height"> <div class="xz-form-infos"> <div class="xz-form-info"> <label class="xz-form-label" for="userName-pnx">Name</label> <input type="text" name="userName" id="userName-pnx" maxlength="80" class="xz-form-input" required> </div> <div class="xz-form-info"> <label class="xz-form-label" for="uCountry-pnx">Country/Region</label> <input type="text" name="uCountry" id="uCountry-pnx" maxlength="80" class="xz-form-input" required> </div> <div class="xz-form-info"> <label class="xz-form-label" for="userEMail-pnx">Email</label> <input type="email" name="userEMail" id="userEMail-pnx" maxlength="80" class="xz-form-input"> </div> <div class="xz-form-info"> <label class="xz-form-label" for="userTel-pnx">Mobile</label> <input type="tel" name="userTel" id="userTel-pnx" maxlength="80" class="xz-form-input" required placeholder="Or Whatsapp/Skype"> </div> </div> <div class="xz-form-msg"> <label class="xz-form-label" for="Message-pnx">Message</label> <textarea name="Message" id="Message-pnx" class="xz-form-textarea" required></textarea> </div> <div class="xz-form-btns"> <button class="xz-form-button"> Submit <svg t="1664258923484" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3462" width="20" height="20"> <path d="M871.04 89.770667L120.064 380.16a51.2 51.2 0 0 0-1.792 94.762667l303.36 130.56 131.072 303.957333a51.2 51.2 0 0 0 94.805333-1.877333l289.792-751.573334a51.2 51.2 0 0 0-66.261333-66.133333z m-41.130667 107.392l-231.978666 601.642666-97.962667-227.114666-3.584-7.338667a85.333333 85.333333 0 0 0-41.045333-37.248l-226.56-97.536 601.173333-232.405333z" p-id="3463"></path> </svg> </button> </div></form>';
return $html;
}
public function json(Request $request)
public function formHmtl2($config)
{
return json(['code' => 0, 'msg' => 'ok']);
// https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-3-P-vdx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/news/
$html = '<form class="xz-form-x xz-form-vdx" action="'.$config['post_url'].'"> <style> .xz-form-vdx { --c-theme: #2C9F1C; --c-border: #f8f8f8; --c-bg: #f8f8f8; --c-font: #333; --c-green: #2C9F1C; --size: 1.6rem; --gap: .625em; --h: 3.5em; --lh: 1.25em; --pd: 1em; --br: .625em; --btn-w: 100%; --lines: 1; font-size: var(--size); } .xz-form-vdx .xz-form-infos { display: grid; grid-template-columns: 1fr; grid-gap: var(--gap); margin-bottom: var(--gap); } .xz-form-vdx .xz-form-info, .xz-form-vdx .xz-form-msg { border: solid 1px var(--c-border); background: var(--c-bg); padding: var(--pd); display: flex; align-items: center; border-radius: var(--br); box-sizing: border-box; } .xz-form-vdx .xz-form-info { height: var(--h); } .xz-form-vdx .xz-form-input, .xz-form-vdx .xz-form-textarea { width: 100%; border: none; font-size: var(--size); line-height: var(--lh); outline: 0; padding: 0; color: var(--c-font); background: transparent; } .xz-form-vdx .xz-form-textarea { height: calc(var(--lh) * var(--lines)); font-family: inherit; resize: none; } .xz-form-vdx .xz-form-btns { margin-top: var(--gap); display: flex; justify-content: var(--btn-jc); } .xz-form-vdx .xz-form-button { font-size: var(--size); border-radius: var(--br); display: inline-flex; justify-content: center; align-items: center; width: var(--btn-w); height: var(--h); background: var(--c-theme); color: #fff; border: none; transition: all .3s; display: flex; justify-content: center; align-items: center; } .xz-form-vdx .xz-form-button:hover { filter: brightness(1.1); } .xz-form-vdx .xz-form-button:active { transform: scale(.98); } .xzform_o { position: relative; } .xz-form-vdx .xz-form-message.success { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 9; max-width: 90%; display: flex; text-align: center; align-items: center; padding: 2em; background: rgba(255, 255, 255, .8); color: var(--c-green); font-size: 1em; line-height: 1.5em; box-shadow: 0 .5rem 3rem -.5rem rgba(0, 0, 0, .3); } </style> <input type="hidden" name="iLang" value="'.$config['iLang'].'"> <input type="hidden" name="Act" value="'.$config['Act'].'"> <input type="hidden" name="mailto" value="'.$config['mailto'].'"> <input type="hidden" name="customerId" value="'.$config['cid'].'"> <input type="hidden" name="fromDomain" value="'.$config['fromDomain'].'"> <input type="hidden" name="fromlink" value="'.$config['fromlink'].'"> <input type="hidden" name="fromPath" value="'.$config['fromPath'].'"> <input type="hidden" name="navigator.language"> <input type="hidden" name="navigator.platform"> <input type="hidden" name="screen.width"> <input type="hidden" name="screen.height"> <div class="xz-form-infos"> <div class="xz-form-info"> <input type="text" name="userName" id="userName-vdx" maxlength="80" class="xz-form-input" placeholder="Name"> </div> <div class="xz-form-info"> <input type="email" name="userEMail" id="userEMail-vdx" maxlength="80" class="xz-form-input" placeholder="Email"> </div> </div> <div class="xz-form-msg"> <textarea name="Message" id="Message-vdx" class="xz-form-textarea" placeholder="What can we do for you? *" required></textarea> </div> <div class="xz-form-btns"> <button class="xz-form-button"> SUBMIT <svg t="1690535811615" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5056" width="1em" height="1em" fill="#fff"> <path d="M851.2 166.4c-12.8-6.4-25.6-6.4-32 0l-640 320C166.4 486.4 160 499.2 160 512s6.4 25.6 12.8 25.6l153.6 96c12.8 6.4 25.6 6.4 38.4-6.4L704 320l12.8 6.4-307.2 326.4c-6.4 6.4-6.4 12.8-6.4 19.2l0 140.8c0 12.8 6.4 25.6 19.2 32 12.8 6.4 25.6 0 32-6.4l76.8-76.8 153.6 102.4c6.4 6.4 12.8 6.4 19.2 6.4 6.4 0 6.4 0 12.8 0 12.8-6.4 19.2-12.8 19.2-25.6l128-640C864 185.6 864 172.8 851.2 166.4z" p-id="5057"></path> </svg> </button> </div></form>';
return $html;
}
}
public function emailHtml($data)
{
$html = '<!doctype html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Lead Preview</title>
<meta name="x-apple-disable-message-reformatting">
</head>
<body style="margin:0;padding:0;background:#f6f7f9;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background:#f6f7f9;">
<tr>
<td align="center" style="padding:24px 12px;">
<!-- container -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="width:600px; max-width:100%; background:#ffffff; border:1px solid #e5e7eb; border-radius:8px;">
<!-- header -->
<tr>
<td style="padding:16px 20px; border-bottom:1px solid #e5e7eb; font:700 18px/1.4 Arial, Helvetica, sans-serif; color:#111;">
Preview
</td>
</tr>
<!-- Preview section -->
<tr>
<td style="padding:18px 20px;">
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
<!-- 一行:左 label / 右 value -->
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Date:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['Date'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Email:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">
<a href="mailto:muhseen2222@yaho.com" style="color:#2563eb; text-decoration:none;">'.$data['Email'].'</a>
</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Name:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;" dir="auto">'.$data['Name'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Tel:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['Tel'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Company:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#666;"></td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Country:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;" dir="auto">'.$data['Country'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Form Url:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222; word-break:break-word;">
<a href="'.$data['Form Url'].'" style="color:#2563eb; text-decoration:none;">'.$data['Form Url'].'</a>
</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Message:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;" dir="auto">'.$data['Message'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">Ip:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['Ip'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">IpLocation:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['IpLocation'].'</td>
</tr>
</table>
</td>
</tr>
<!-- divider + More -->
<tr>
<td style="padding:0 20px;">
<div style="height:1px; background:#e5e7eb; line-height:1px; font-size:0;">&nbsp;</div>
</td>
</tr>
<tr>
<td style="padding:14px 20px 0; font:700 18px Arial, Helvetica, sans-serif; color:#111;">More</td>
</tr>
<tr>
<td style="padding:6px 20px 18px;">
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">iLang:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['iLang'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">mailto:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">
<a href="mailto:info@borderlesscar.com" style="color:#2563eb; text-decoration:none;">'.$data['mailto'].'</a>
</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">navigator_language:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['navigator_language'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">navigator_platform:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['navigator_platform'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">screen_width:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['screen_width'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">screen_height:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;">'.$data['screen_height'].'</td>
</tr>
<tr>
<td style="width:140px; padding:6px 0; font:700 14px Arial, Helvetica, sans-serif; color:#111;">uCountry:</td>
<td style="padding:6px 0; font:14px Arial, Helvetica, sans-serif; color:#222;" dir="auto">'.$data['uCountry'].'</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- /container -->
</td>
</tr>
</table>
</body>
</html>';
$email = new Email();
return $email->send($data['mailto'], 'Inquiry_Of_'.$data['Name'], $html);
}
}
+447
View File
@@ -0,0 +1,447 @@
<?php
namespace app\controller;
use support\Request;
class IndexController_bak
{
public function form(Request $request)
{
$params = $request->all();
$config = [
'iLang' => 'en',
'Act' => 'Inquiry',
'post_url' => 'https://transmit.dev.hnxinyouhe.com/form?m=Data&a=save',
'mailto' => 'info@magicbridgeauto.com',
'fromDomain' => 'magicbridgeauto.com',
'fromPath' => parse_url($params['fromlink'], PHP_URL_PATH),
'm' => $params['m'],
'a' => $params['a'],
'tid' => $params['tid'],
'cid' => $params['cid'],
'version' => $params['version'],
'fromlink' => $params['fromlink']
];
if ($request->method() == 'POST') {
$data = [
'iLang' => $params[''],
'Act' => $params[''],
'mailto' => $params[''],
'customerId' => $params[''],
'fromDomain' => $params[''],
'fromlink' => $params[''],
'fromPath' => $params[''],
'navigator.language' => $params[''],
'navigator.platform' => $params[''],
'screen.width' => $params[''],
'screen.height' => $params[''],
'userName' => $params[''],
'uCountry' => $params[''],
'userEMail' => $params[''],
'userTel' => $params[''],
'Message' => $params[''],
];
return json([
'code' => 200,
'data' => [],
'message' => 'Thank you for your message! We will contact with you soon.'
]);
}
$html = match ($params['tid']) {
'en-5-LP-pnx' => $this->formHmtl($config),
'en-3-P-vdx' => $this->formHmtl2($config)
};
return json([
'code' => 200,
'data' => [
'html' => $html
],
'message' => 'success'
]);
}
public function formHmtl($config)
{
// https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-5-LP-pnx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/contact-us/
$html =
'<form class="xz-form-x xz-form-pnx" action="'.$config['post_url'].'">
<style>
.xz-form-pnx {
--c-theme: #BB0010;
--c-border: #f0f0f0;
--c-bg: #fff;
--c-label: #333;
--c-font: #666;
--c-green: #00B160;
--size: 1.6rem;
--gap: 1.25em;
--h: 3em;
--lh: 1.8em;
--pd: .4em .625em;
--br: 4px;
--btn-w: 18.75em;
--btn-jc: center;
--lines: 4;
}
.xz-form-pnx {
font-size: var(--size);
}
.xz-form-pnx .xz-form-infos {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: var(--gap);
margin-bottom: var(--gap);
}
.xz-form-pnx .xz-form-info,
.xz-form-pnx .xz-form-msg {
border: solid 1px var(--c-border);
background: var(--c-bg);
padding: var(--pd);
display: flex;
align-items: center;
border-radius: var(--br);
box-sizing: border-box;
}
.xz-form-pnx .xz-form-info {
height: var(--h);
}
.xz-form-pnx .xz-form-msg {
align-items: flex-start;
}
.xz-form-pnx .xz-form-input,
.xz-form-pnx .xz-form-textarea {
width: 100%;
border: none;
font-size: var(--size);
line-height: var(--lh);
outline: 0;
padding: 0;
margin-left: 1em;
color: var(--c-font);
}
.xz-form-pnx .xz-form-textarea {
height: calc(var(--lh) * var(--lines));
min-height: var(--h);
font-family: inherit;
resize: none;
}
.xz-form-pnx .xz-form-label {
display: block;
color: var(--c-label);
line-height: var(--lh);
white-space: nowrap;
}
.xz-form-pnx .xz-form-label.required:after {
content: "*";
margin-left: .625em;
color: var(--c-theme);
}
.xz-form-pnx .xz-form-btns {
margin-top: var(--gap);
display: flex;
justify-content: var(--btn-jc);
}
.xz-form-pnx .xz-form-button {
font-size: var(--size);
border-radius: var(--br);
display: inline-flex;
justify-content: center;
align-items: center;
width: var(--btn-w);
height: var(--h);
background: var(--c-theme);
color: #fff;
border: none;
transition: all .3s;
display: flex;
justify-content: center;
align-items: center;
gap: 1em;
}
.xz-form-pnx .xz-form-button path {
fill: #fff;
}
.xz-form-pnx .xz-form-button:hover {
filter: brightness(1.1);
}
.xz-form-pnx .xz-form-button:active {
transform: scale(.98);
}
@media screen and (max-width: 500px){
.xz-form-pnx {
--gap: .8em;
}
.xz-form-pnx .xz-form-infos {
grid-template-columns: 1fr;
}
.xz-form-pnx .xz-form-button {
width: 100%;
}
}
.xzform_o {
position: relative;
}
.xz-form-pnx .xz-form-message.success {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
z-index: 9;
max-width: 75%;
display: flex;
text-align: center;
align-items: center;
padding: 4em;
background: rgba(255,255,255,.8);
color: var(--c-green);
font-size: 1.125em;
line-height: 1.8em;
font-weight: 500;
box-shadow: 0 .5rem 3rem -.5rem rgba(0,0,0,.3);
}
</style>
<input type="hidden" name="iLang" value="'.$config['iLang'].'">
<input type="hidden" name="Act" value="'.$config['Act'].'">
<input type="hidden" name="mailto" value="'.$config['mailto'].'">
<input type="hidden" name="customerId" value="'.$config['cid'].'">
<input type="hidden" name="fromDomain" value="'.$config['fromDomain'].'">
<input type="hidden" name="fromlink" value="'.$config['fromlink'].'">
<input type="hidden" name="fromPath" value="'.$config['fromPath'].'">
<input type="hidden" name="navigator.language">
<input type="hidden" name="navigator.platform">
<input type="hidden" name="screen.width">
<input type="hidden" name="screen.height">
<div class="xz-form-infos">
<div class="xz-form-info">
<label class="xz-form-label" for="userName-pnx">Name</label>
<input type="text" name="userName" id="userName-pnx" maxlength="80" class="xz-form-input" required>
</div>
<div class="xz-form-info">
<label class="xz-form-label" for="uCountry-pnx">Country/Region</label>
<input type="text" name="uCountry" id="uCountry-pnx" maxlength="80" class="xz-form-input" required>
</div>
<div class="xz-form-info">
<label class="xz-form-label" for="userEMail-pnx">Email</label>
<input type="email" name="userEMail" id="userEMail-pnx" maxlength="80" class="xz-form-input">
</div>
<div class="xz-form-info">
<label class="xz-form-label" for="userTel-pnx">Mobile</label>
<input type="tel" name="userTel" id="userTel-pnx" maxlength="80" class="xz-form-input" required placeholder="Or Whatsapp/Skype">
</div>
</div>
<div class="xz-form-msg">
<label class="xz-form-label" for="Message-pnx">Message</label>
<textarea name="Message" id="Message-pnx" class="xz-form-textarea" required></textarea>
</div>
<div class="xz-form-btns">
<button class="xz-form-button">
Submit
<svg t="1664258923484" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3462" width="20" height="20">
<path d="M871.04 89.770667L120.064 380.16a51.2 51.2 0 0 0-1.792 94.762667l303.36 130.56 131.072 303.957333a51.2 51.2 0 0 0 94.805333-1.877333l289.792-751.573334a51.2 51.2 0 0 0-66.261333-66.133333z m-41.130667 107.392l-231.978666 601.642666-97.962667-227.114666-3.584-7.338667a85.333333 85.333333 0 0 0-41.045333-37.248l-226.56-97.536 601.173333-232.405333z" p-id="3463"></path>
</svg>
</button>
</div>
</form>';
return $html;
}
public function formHmtl2($config)
{
// https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-3-P-vdx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/news/
$html =
'<form class="xz-form-x xz-form-vdx" action="'.$config['post_url'].'">
<style>
.xz-form-vdx {
--c-theme: #2C9F1C;
--c-border: #f8f8f8;
--c-bg: #f8f8f8;
--c-font: #333;
--c-green: #2C9F1C;
--size: 1.6rem;
--gap: .625em;
--h: 3.5em;
--lh: 1.25em;
--pd: 1em;
--br: .625em;
--btn-w: 100%;
--lines: 1;
font-size: var(--size);
}
.xz-form-vdx .xz-form-infos {
display: grid;
grid-template-columns: 1fr;
grid-gap: var(--gap);
margin-bottom: var(--gap);
}
.xz-form-vdx .xz-form-info,
.xz-form-vdx .xz-form-msg {
border: solid 1px var(--c-border);
background: var(--c-bg);
padding: var(--pd);
display: flex;
align-items: center;
border-radius: var(--br);
box-sizing: border-box;
}
.xz-form-vdx .xz-form-info {
height: var(--h);
}
.xz-form-vdx .xz-form-input,
.xz-form-vdx .xz-form-textarea {
width: 100%;
border: none;
font-size: var(--size);
line-height: var(--lh);
outline: 0;
padding: 0;
color: var(--c-font);
background: transparent;
}
.xz-form-vdx .xz-form-textarea {
height: calc(var(--lh) * var(--lines));
font-family: inherit;
resize: none;
}
.xz-form-vdx .xz-form-btns {
margin-top: var(--gap);
display: flex;
justify-content: var(--btn-jc);
}
.xz-form-vdx .xz-form-button {
font-size: var(--size);
border-radius: var(--br);
display: inline-flex;
justify-content: center;
align-items: center;
width: var(--btn-w);
height: var(--h);
background: var(--c-theme);
color: #fff;
border: none;
transition: all .3s;
display: flex;
justify-content: center;
align-items: center;
}
.xz-form-vdx .xz-form-button:hover {
filter: brightness(1.1);
}
.xz-form-vdx .xz-form-button:active {
transform: scale(.98);
}
.xzform_o {
position: relative;
}
.xz-form-vdx .xz-form-message.success {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 9;
max-width: 90%;
display: flex;
text-align: center;
align-items: center;
padding: 2em;
background: rgba(255, 255, 255, .8);
color: var(--c-green);
font-size: 1em;
line-height: 1.5em;
box-shadow: 0 .5rem 3rem -.5rem rgba(0, 0, 0, .3);
}
</style>
<input type="hidden" name="iLang" value="'.$config['iLang'].'">
<input type="hidden" name="Act" value="'.$config['Act'].'">
<input type="hidden" name="mailto" value="'.$config['mailto'].'">
<input type="hidden" name="customerId" value="'.$config['cid'].'">
<input type="hidden" name="fromDomain" value="'.$config['fromDomain'].'">
<input type="hidden" name="fromlink" value="'.$config['fromlink'].'">
<input type="hidden" name="fromPath" value="'.$config['fromPath'].'">
<input type="hidden" name="navigator.language">
<input type="hidden" name="navigator.platform">
<input type="hidden" name="screen.width">
<input type="hidden" name="screen.height">
<div class="xz-form-infos">
<div class="xz-form-info">
<input type="text" name="userName" id="userName-vdx" maxlength="80" class="xz-form-input" placeholder="Name">
</div>
<div class="xz-form-info">
<input type="email" name="userEMail" id="userEMail-vdx" maxlength="80" class="xz-form-input" placeholder="Email">
</div>
</div>
<div class="xz-form-msg">
<textarea name="Message" id="Message-vdx" class="xz-form-textarea" placeholder="What can we do for you? *" required></textarea>
</div>
<div class="xz-form-btns">
<button class="xz-form-button">
SUBMIT
<svg t="1690535811615" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="5056" width="1em" height="1em" fill="#fff">
<path
d="M851.2 166.4c-12.8-6.4-25.6-6.4-32 0l-640 320C166.4 486.4 160 499.2 160 512s6.4 25.6 12.8 25.6l153.6 96c12.8 6.4 25.6 6.4 38.4-6.4L704 320l12.8 6.4-307.2 326.4c-6.4 6.4-6.4 12.8-6.4 19.2l0 140.8c0 12.8 6.4 25.6 19.2 32 12.8 6.4 25.6 0 32-6.4l76.8-76.8 153.6 102.4c6.4 6.4 12.8 6.4 19.2 6.4 6.4 0 6.4 0 12.8 0 12.8-6.4 19.2-12.8 19.2-25.6l128-640C864 185.6 864 172.8 851.2 166.4z"
p-id="5057"></path>
</svg>
</button>
</div>
</form>';
return $html;
}
}
+67
View File
@@ -0,0 +1,67 @@
<?php
namespace app\utils;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use support\Log;
class Email
{
/**
* 发送邮件
*
* @param string|array $to 收件人邮箱(单个字符串或多个数组)
* @param string $subject 邮件主题
* @param string $body 邮件内容(HTML)
* @param array $attachments 附件路径数组 [['path' => '/path/file', 'name' => '文件名']]
* @return bool
*/
public static function send($to, $subject, $body, $attachments = [])
{
$mail = new PHPMailer(true);
try {
// 服务器配置
$mail->isSMTP();
$mail->Host = config('imap.smtp_xyh.host'); // SMTP服务器
$mail->SMTPAuth = true;
$mail->Username = config('imap.smtp_xyh.username'); // 邮箱账号
$mail->Password = config('imap.smtp_xyh.password'); // 邮箱密码/授权码
$mail->SMTPSecure = config('imap.smtp_xyh.encryption'); // 加密方式 tls/ssl
$mail->Port = config('imap.smtp_xyh.port'); // 端口
// 发件人
$mail->setFrom(config('imap.smtp_xyh.from_address'), config('imap.smtp_xyh.from_name'));
// 收件人(支持单个或多个)
if (is_string($to)) {
$mail->addAddress($to);
} elseif (is_array($to)) {
foreach ($to as $email) {
$mail->addAddress($email);
}
}
// 附件
foreach ($attachments as $file) {
$mail->addAttachment($file['path'], $file['name'] ?? '');
}
// 内容
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->Subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\r\n");
$mail->Body = $body;
// $mail->AltBody = strip_tags($body); // 纯文本备用
// $mail->AltBody = $altbody;
$mail->send();
return true;
} catch (Exception $e) {
Log::error("邮件发送失败: " . $e->getMessage());
return false;
}
}
}
+8 -1
View File
@@ -26,7 +26,14 @@
"require": {
"php": ">=8.1",
"workerman/webman-framework": "^2.1",
"monolog/monolog": "^2.0"
"monolog/monolog": "^2.0",
"vlucas/phpdotenv": "^5.6",
"webman/database": "^2.1",
"illuminate/pagination": "^12.37",
"illuminate/events": "^12.37",
"symfony/var-dumper": "^7.3",
"phpmailer/phpmailer": "^7.0",
"zoujingli/ip2region": "^3.0"
},
"suggest": {
"ext-event": "For better performance. "
Generated
+4188 -1
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -15,7 +15,7 @@
use support\Request;
return [
'debug' => true,
'debug' => getenv('DEBUG'),
'error_reporting' => E_ALL,
'default_timezone' => 'Asia/Shanghai',
'request_class' => Request::class,
+29
View File
@@ -0,0 +1,29 @@
<?php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'your_database',
'username' => 'your_username',
'password' => 'your_password',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => [
PDO::ATTR_EMULATE_PREPARES => false, // Must be false for Swoole and Swow drivers.
],
'pool' => [
'max_connections' => 5,
'min_connections' => 1,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
],
],
];
+34
View File
@@ -0,0 +1,34 @@
<?php
// config/imap.php
return [
// IMAP 服务器连接字符串,包含端口、协议、SSL
'mailbox' => '{imap.feishu.cn:993/imap/ssl}INBOX',
'username' => 'info@borderlesscar.com',
'password' => 'ErkhUA629aocm7Bc',
// 最多拉取多少封邮件
'limit' => 5,
'per_page' => 20,
'batch_size'=> 100, // 可选:CLI 不传 -p 时使用
// stmp
'smtp' => [
'host' => 'smtp.feishu.cn',
'port' => 465,
'username' => 'info@magicbridgeauto.com',
'password' => 'ErkhUA629aocm7Bc',
'encryption' => 'ssl',
'from_address' => '',
'from_name' => ''
],
'smtp_xyh' => [
'host' => 'smtp.feishu.cn',
'port' => 465,
'username' => 'app@hnxinyouhe.com',
'password' => 'akyIUFJ6ihGGjI5h',
'encryption' => 'ssl',
'from_address' => 'app@hnxinyouhe.com',
'from_name' => '【XYH】'
],
];
+2 -2
View File
@@ -21,8 +21,8 @@ global $argv;
return [
'webman' => [
'handler' => Http::class,
'listen' => 'http://0.0.0.0:8787',
'count' => cpu_count() * 4,
'listen' => 'http://0.0.0.0:'.getenv('PROCESS_LISTEN'),
'count' => getenv('PROCESS_COUNT'),
'user' => '',
'group' => '',
'reusePort' => false,
+1 -1
View File
@@ -16,6 +16,6 @@ use Webman\Route;
Route::any('/form/{id}', [app\controller\IndexController::class, 'form']);