本文目录导读:

在 PHP 中“加密邮件”通常有两种含义,这里分开说明,你可以根据实际需求选择:
混淆邮箱地址(防爬虫/防垃圾邮件)
这是最常见的需求,目的是防止爬虫抓取邮箱后发送垃圾邮件,推荐使用 JavaScript 动态拼接或编码混淆。
JavaScript 拼接(最推荐)
<?php
$email = "user@example.com";
$user = "user";
$domain = "example.com";
?>
<a href="javascript:void(0)" onclick="this.href='mailto:'+atob('<?php echo base64_encode($email); ?>')">联系我们</a>
HTML 实体编码
<?php $email = "user@example.com"; echo '<a href="mailto:' . htmlentities($email) . '">' . htmlentities($email) . '</a>'; ?>
字符反转
<?php
$email = "user@example.com";
$reversed = strrev($email);
?>
<a href="javascript:void(0)" onclick="this.href='mailto:'+'<?php echo $reversed; ?>'.split('').reverse().join('')">点击查看邮箱</a>
加密传输(SMTP 加密)
如果是指通过 SMTP 发送邮件时使用 SSL/TLS 加密,这是配置层面的问题。
使用 PHPMailer(推荐)
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; // SMTP 服务器
$mail->SMTPAuth = true;
$mail->Username = 'your@gmail.com';
$mail->Password = 'your_password';
$mail->SMTPSecure = 'tls'; // 使用 TLS 加密,也可以设为 'ssl'
$mail->Port = 587; // TLS 端口 587,SSL 端口 465
$mail->setFrom('from@example.com', '发件人');
$mail->addAddress('to@example.com', '收件人');
$mail->Subject = '测试邮件';
$mail->Body = '这是邮件正文';
$mail->send();
echo '邮件已发送';
} catch (Exception $e) {
echo "邮件发送失败: {$mail->ErrorInfo}";
}
?>
使用原生 PHP mail() 函数
<?php
// mail() 函数本身不支持加密,需要配置 php.ini
ini_set('SMTP', 'smtp.example.com'); // SMTP 服务器
ini_set('smtp_port', 465); // SSL 端口
// 还需要在 php.ini 中配置 SSL 证书路径
?>
加密邮件内容(数字签名/加密)
如果需要真正加密邮件内容,推荐使用 OpenPGP。
<?php // 使用 OpenPGP 库 require 'vendor/autoload.php'; use OpenPGP\OpenPGP; use OpenPGP\Message; $pgp = new OpenPGP(); // 使用接收方的公钥加密邮件内容 $encrypted = $pgp->encrypt($message, $recipientPublicKey); // 然后通过 SMTP 发送加密后的内容 ?>
总结建议
- 防止爬虫:用 JavaScript 拼接方案(方法一)
- 安全传输:用 PHPMailer 配置 TLS/SSL加密**:使用 OpenPGP 进行端到端加密
根据你的具体需求选择合适的方法,如果是普通网站展示邮箱,推荐方法一或二;如果是发送敏感邮件,需要配置 SSL/TLS 或用 OpenPGP 加密。