You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面加载后用PHP发送邮件并获取段落值嵌入邮件正文

解决PHP提取段落内容并发送邮件的方案

看起来你需要的是页面加载完成后,把前端页面里的段落内容收集起来传给PHP,最终把这些内容放到邮件正文中发送对吧?我分两种常见场景给你具体的实现方案,你可以根据自己的需求选择:

场景1:页面加载完成后(客户端)自动收集段落并发送邮件

这种场景是用户打开页面,页面加载完毕后,前端JS自动抓取段落内容,通过AJAX发送给PHP脚本,PHP再执行发送邮件的操作。

第一步:前端HTML + JavaScript(页面代码)

假设你的页面里有需要提取的段落,先给这些段落加个统一的类名(比如email-paragraph)方便抓取:

<!-- 示例段落 -->
<p class="email-paragraph">这是第一段需要发送的内容</p>
<p class="email-paragraph">这是第二段需要发送的内容</p>
<p class="email-paragraph">这是第三段需要发送的内容</p>

<script>
// 等待页面完全加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 1. 抓取所有目标段落
    const targetParagraphs = document.querySelectorAll('.email-paragraph');
    
    // 2. 把每个段落的文本内容收集成数组
    const contentList = Array.from(targetParagraphs).map(para => para.textContent.trim());
    
    // 3. 把数组转成适合邮件显示的字符串(段落间用换行分隔)
    const emailContent = contentList.join('\n\n'); // 如果要发HTML邮件,改成 '<br><br>'
    
    // 4. 通过AJAX把内容传给PHP脚本
    fetch('send-mail.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        // 对内容编码,避免特殊字符问题
        body: `mail_content=${encodeURIComponent(emailContent)}`
    })
    .then(res => res.text())
    .then(message => {
        console.log('邮件发送结果:', message);
        // 这里可以加成功提示,比如 alert('邮件已发送!')
    })
    .catch(err => {
        console.error('发送出错:', err);
    });
});
</script>

第二步:PHP邮件脚本(send-mail.php)

这个脚本负责接收前端传过来的内容,然后发送邮件:

<?php
// 只处理POST请求
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    exit('非法请求');
}

// 1. 获取前端传过来的段落内容
$mailBody = isset($_POST['mail_content']) ? trim($_POST['mail_content']) : '';

if (empty($mailBody)) {
    exit('未获取到段落内容');
}

// 2. 配置邮件参数
$recipient = '你的接收邮箱@example.com'; // 替换成你要收邮件的地址
$subject = '页面段落内容汇总';
$headers = implode("\r\n", [
    'From: 网站自动发送 <noreply@yourdomain.com>',
    'Reply-To: noreply@yourdomain.com',
    'Content-Type: text/plain; charset=UTF-8' // 如果是HTML邮件,改成 text/html
]);

// 3. 发送邮件
if (mail($recipient, $subject, $mailBody, $headers)) {
    echo '邮件发送成功!';
} else {
    echo '邮件发送失败,请检查服务器邮件配置';
}
?>

场景2:PHP直接从服务器上的HTML文件提取段落(无需前端交互)

如果你的需求是PHP主动读取服务器上某个HTML页面的段落内容,然后发送邮件,那可以用PHP的DOM解析功能:

<?php
// 1. 读取目标HTML文件内容(替换成你的页面路径)
$htmlContent = file_get_contents('./your-page.html');

// 2. 解析HTML,提取段落
$dom = new DOMDocument();
// 抑制HTML解析时的警告(避免不规范HTML导致的报错)
libxml_use_internal_errors(true);
$dom->loadHTML($htmlContent);
libxml_clear_errors();

// 抓取所有<p>标签
$paragraphs = $dom->getElementsByTagName('p');
$mailBody = '';
foreach ($paragraphs as $para) {
    $mailBody .= $para->nodeValue . "\n\n";
}

// 3. 发送邮件(和上面的邮件配置一致)
$recipient = '你的接收邮箱@example.com';
$subject = 'HTML页面段落提取结果';
$headers = implode("\r\n", [
    'From: 网站自动发送 <noreply@yourdomain.com>',
    'Content-Type: text/plain; charset=UTF-8'
]);

if (mail($recipient, $subject, $mailBody, $headers)) {
    echo '邮件发送成功';
} else {
    echo '发送失败';
}
?>

关键注意点

  • 如果你的现有邮件代码用的是PHPMailer等第三方库,只需要把上面的$mailBody变量替换到你的邮件正文部分即可,逻辑是一样的。
  • 若要发送HTML格式的邮件,记得把前端的分隔符改成<br><br>,同时PHP的Content-Type设为text/html。
  • 本地开发环境可能无法正常发送邮件,建议在配置了邮件服务的线上服务器测试,或者用PHPMailer配置SMTP账号(比如QQ邮箱、Gmail的SMTP)。

内容的提问来源于stack exchange,提问作者Wojtar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:22:53