Skip to content

PHP 使用示例

本文档提供了使用 PHP 连接 Go Mail Server 发送邮件的示例代码。

使用 mail() 函数

PHP 内置的 mail() 函数可以通过配置 php.ini 来使用本地 SMTP 服务器。

配置 php.ini

要使用 Go Mail Server,您需要修改 PHP 配置文件 php.ini

ini
[mail function]
; 将 SMTP 设置为 Go Mail Server 地址
SMTP = localhost
smtp_port = 25

; 如果 Go Mail Server 需要认证
sendmail_from = [email protected]

基本邮件发送

php
<?php
// 收件人
$to = '[email protected]';

// 主题
$subject = 'PHP 测试邮件';

// 邮件内容
$message = '这是一封使用 PHP mail() 函数发送的测试邮件。';

// 邮件头部
$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

// 发送邮件
$success = mail($to, $subject, $message, $headers);

if ($success) {
    echo "邮件已成功发送到 $to";
} else {
    echo "发送邮件失败";
}
?>

使用 PHPMailer 库

PHPMailer 是 PHP 中最流行的邮件发送库,它提供了更多高级功能。

安装 PHPMailer

使用 Composer 安装:

bash
composer require phpmailer/phpmailer

基本邮件发送

php
<?php
// 引入 Composer 自动加载器
require 'vendor/autoload.php';

// 导入 PHPMailer 类
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// 创建 PHPMailer 实例
$mail = new PHPMailer(true); // true 启用异常

try {
    // 服务器设置
    $mail->isSMTP();
    $mail->Host       = 'localhost'; // Go Mail Server 地址
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]'; // 配置文件中的 defaultUsername
    $mail->Password   = 'your-password';       // 配置文件中的 defaultPassword
    $mail->Port       = 25;
    
    // 收件人
    $mail->setFrom('[email protected]', '发件人名称');
    $mail->addAddress('[email protected]', '收件人名称');
    $mail->addReplyTo('[email protected]', '回复地址');
    
    // 邮件内容
    $mail->isHTML(false);
    $mail->Subject = 'PHPMailer 测试邮件';
    $mail->Body    = '这是使用 PHPMailer 发送的测试邮件。';
    
    // 发送邮件
    $mail->send();
    echo '邮件已成功发送';
} catch (Exception $e) {
    echo "发送邮件失败: {$mail->ErrorInfo}";
}
?>

发送 HTML 邮件

php
<?php
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // 服务器设置
    $mail->isSMTP();
    $mail->Host       = 'localhost';
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]';
    $mail->Password   = 'your-password';
    $mail->Port       = 25;
    
    // 收件人
    $mail->setFrom('[email protected]', '发件人名称');
    $mail->addAddress('[email protected]', '收件人名称');
    
    // HTML 内容
    $mail->isHTML(true);
    $mail->Subject = 'HTML 格式邮件测试';
    $mail->Body    = '
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; }
            .header { color: #2C3E50; font-size: 24px; }
            .content { margin: 20px 0; line-height: 1.5; }
            .footer { color: #7F8C8D; font-size: 12px; }
        </style>
    </head>
    <body>
        <div class="header">HTML 邮件测试</div>
        <div class="content">
            <p>这是一封 <strong>HTML</strong> 格式的邮件,支持各种 HTML 标签和样式。</p>
            <p>您可以添加链接:<a href="https://example.com">访问网站</a></p>
        </div>
        <div class="footer">此邮件由 Go Mail Server 发送</div>
    </body>
    </html>';
    
    // 纯文本替代内容(用于不支持 HTML 的邮件客户端)
    $mail->AltBody = '这是一封 HTML 格式的邮件,如果您的邮件客户端不支持 HTML,将显示此文本。';
    
    // 发送邮件
    $mail->send();
    echo 'HTML 邮件已成功发送';
} catch (Exception $e) {
    echo "发送邮件失败: {$mail->ErrorInfo}";
}
?>

发送带附件的邮件

php
<?php
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // 服务器设置
    $mail->isSMTP();
    $mail->Host       = 'localhost';
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]';
    $mail->Password   = 'your-password';
    $mail->Port       = 25;
    
    // 收件人
    $mail->setFrom('[email protected]', '发件人名称');
    $mail->addAddress('[email protected]', '收件人名称');
    
    // 邮件内容
    $mail->isHTML(true);
    $mail->Subject = '带附件的邮件';
    $mail->Body    = '<p>这是一封带附件的邮件,请查看附件。</p>';
    $mail->AltBody = '这是一封带附件的邮件,请查看附件。';
    
    // 添加附件
    $mail->addAttachment('/path/to/document.pdf', '文档.pdf');    // 可选文件名
    $mail->addAttachment('/path/to/image.jpg', '图片.jpg');
    
    // 发送邮件
    $mail->send();
    echo '带附件的邮件已成功发送';
} catch (Exception $e) {
    echo "发送邮件失败: {$mail->ErrorInfo}";
}
?>

使用 Cloudflare Tunnel 访问

如果您使用 Cloudflare Tunnel 配置了外部访问:

php
<?php
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // 使用 Tunnel 域名
    $mail->isSMTP();
    $mail->Host       = 'smtp.yourdomain.com'; // 替换为您的 Tunnel 域名
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]';
    $mail->Password   = 'your-password';
    $mail->Port       = 25;
    
    // 收件人
    $mail->setFrom('[email protected]', '发件人名称');
    $mail->addAddress('[email protected]', '收件人名称');
    
    // 邮件内容
    $mail->Subject = 'Tunnel 测试邮件';
    $mail->Body    = '这封邮件通过 Cloudflare Tunnel 发送。';
    
    // 发送邮件
    $mail->send();
    echo '通过 Tunnel 发送邮件成功';
} catch (Exception $e) {
    echo "发送邮件失败: {$mail->ErrorInfo}";
}
?>

基于 MIT 许可证发布