本文目录导读:

在PHP项目中发送邮件,主要有以下几种常见方式,我会从最推荐到最基础依次介绍:
推荐方式:使用第三方邮件库(PHPMailer)
为什么推荐? 支持SMTP认证、HTML邮件、附件、中文不乱码,且支持各种邮件服务(QQ、163、Gmail、SendGrid等)。
安装(Composer)
composer require phpmailer/phpmailer
示例代码(QQ邮箱示例)
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
function sendMail($to, $subject, $body) {
$mail = new PHPMailer(true);
try {
// 服务器配置
$mail->isSMTP();
$mail->Host = 'smtp.qq.com'; // SMTP服务器
$mail->SMTPAuth = true;
$mail->Username = 'your@qq.com'; // 邮箱账号
$mail->Password = 'your_smtp_password'; // SMTP授权码(不是登录密码)
$mail->SMTPSecure = 'ssl'; // 启用SSL加密
$mail->Port = 465; // SSL端口
// 发件人
$mail->setFrom('your@qq.com', '网站名称');
// 收件人
$mail->addAddress($to, '收件人名称');
// 内容
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = strip_tags($body); // 纯文本备用
$mail->send();
return ['success' => true, 'message' => '邮件发送成功'];
} catch (Exception $e) {
return ['success' => false, 'message' => $mail->ErrorInfo];
}
}
// 使用示例
$result = sendMail(
'recipient@example.com',
'欢迎注册',
'<h1>您好!</h1><p>感谢您注册我们的网站。</p>'
);
使用 Symfony Mailer(现代框架推荐)
适用于Laravel、Symfony等框架,或者作为独立组件使用。
composer require symfony/mailer
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mime\Email;
$transport = Transport::fromDsn('smtp://username:password@smtp.example.com:587');
$mailer = new Mailer($transport);
$email = (new Email())
->from('sender@example.com')
->to('recipient@example.com')
->subject('邮件主题')
->html('<p>HTML内容</p>');
$mailer->send($email);
使用原生 mail() 函数(不推荐)
缺点:配置复杂、容易进垃圾箱、不支持SMTP认证、中文容易乱码。
$to = 'recipient@example.com';
$subject = '=?UTF-8?B?' . base64_encode('邮件主题') . '?=';
$message = '<p>邮件内容</p>';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "From: sender@example.com\r\n";
mail($to, $subject, $message, $headers);
各邮箱SMTP配置参考
| 邮箱 | SMTP服务器 | SSL端口 | 非SSL端口 | 密码说明 |
|---|---|---|---|---|
| smtp.qq.com | 465 | 587 | 需开启SMTP服务获取授权码 | |
| 163 | smtp.163.com | 465 | 25 | 需开启SMTP服务获取授权码 |
| Gmail | smtp.gmail.com | 465 | 587 | 需应用专用密码 |
| 阿里云邮件 | smtpdm.aliyun.com | 465 | 80 | 配置发信地址 |
企业级方案:邮件服务API
对于高并发的生产环境,建议使用专业邮件服务:
- SendGrid -
composer require sendgrid/sendgrid - Mailgun -
composer require mailgun/mailgun-php - 阿里云邮件推送 - 通过HTTP API调用
- 腾讯云邮件 - 通过HTTP API调用
示例(SendGrid):
$email = new \SendGrid\Mail\Mail();
$email->setFrom("sender@example.com", "Sender");
$email->setSubject("Sending with SendGrid");
$email->addTo("recipient@example.com", "Recipient");
$email->addContent("text/html", "<p>邮件内容</p>");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
$response = $sendgrid->send($email);
总结建议
| 场景 | 推荐方案 |
|---|---|
| 小型项目/个人网站 | PHPMailer(最易上手) |
| 框架项目(Laravel/Symfony) | 框架内置的Mail组件 |
| 企业级/高并发 | 专业邮件服务API(SendGrid等) |
| 只需要简单发送 | 原生mail() + SMTP配置 |
常见问题:
- 邮件被识别为垃圾邮件:配置SPF/DKIM/DMARC DNS记录
- 发件延迟:检查网络和SMTP服务器状态
- 中文乱码:确保
CharSet = 'UTF-8'且使用HTML格式
如果需要具体的邮箱授权码获取步骤或其他特殊配置,请告诉我,我可以进一步说明。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播