PHP提供了内置的mail()
函数来发送电子邮件。该函数需要服务器上的邮件服务配置正确。
<?php
$to = 'recipient@example.com';
$subject = 'Test Email';
$message = 'This is a test email sent from PHP.';
$headers = 'From: sender@example.com' . "\r\n" .
'Reply-To: sender@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$mailSent = mail($to, $subject, $message, $headers);
if ($mailSent) {
echo 'Email sent successfully.';
} else {
echo 'Failed to send email.';
}
?>
使用PHPMailer库发送邮件
PHPMailer是一个流行的第三方库,提供了更强大的功能和更好的兼容性。
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'your_email@example.com';
$mail->Password = 'your_password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->setFrom('from@example.com', 'Sender Name');
$mail->addAddress('recipient@example.com', 'Recipient Name');
$mail->isHTML(true);
$mail->Subject = 'Test Email with PHPMailer';
$mail->Body = '<h1>HTML Email Content</h1><p>This is a test email sent using PHPMailer.</p>';
$mail->AltBody = 'This is the plain text version for non-HTML mail clients';
$mail->send();
echo 'Email has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>
发送带有附件的电子邮件
PHPMailer可以轻松地添加附件到电子邮件中。
<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'path/to/PHPMailer/src/PHPMailer.php';
$mail = new PHPMailer();
$mail->isSMTP();
// SMTP配置代码同上例...
$mail->setFrom('from@example.com', 'Sender');
$mail->addAddress('recipient@example.com', 'Recipient');
$mail->Subject = 'Email with Attachment';
$mail->Body = 'Please find the attached file.';
$mail->addAttachment('/path/to/file.pdf', 'document.pdf');
$mail->addAttachment('/path/to/image.jpg', 'photo.jpg');
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
?>
使用SwiftMailer发送邮件
SwiftMailer是另一个流行的PHP邮件发送库。
<?php
require_once 'path/to/swiftmailer/lib/swift_required.php';
$transport = (new Swift_SmtpTransport('smtp.example.com', 587))
->setUsername('your_username')
->setPassword('your_password');
$mailer = new Swift_Mailer($transport);
$message = (new Swift_Message('Wonderful Subject'))
->setFrom(['john@doe.com' => 'John Doe'])
->setTo(['receiver@domain.org', 'other@domain.org' => 'A name'])
->setBody('Here is the message itself')
->addPart('<q>Here is the message itself</q>', 'text/html')
->attach(Swift_Attachment::fromPath('path/to/file.pdf'));
$result = $mailer->send($message);
?>
发送HTML格式的电子邮件
无论是使用PHP内置函数还是第三方库,都可以发送HTML格式的电子邮件。
<?php
$to = 'recipient@example.com';
$subject = 'HTML Email Test';
$message = '
<html>
<head>
<title>HTML Email</title>
</head>
<body>
<h1 style="color:blue;">This is a HTML email!</h1>
<p>You can include <strong>bold</strong> text and <em>italic</em> text.</p>
</body>
</html>
';
$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);
?>
邮件发送的最佳实践
- 总是设置明确的From和Reply-To头信息
- 对于HTML邮件,同时提供纯文本版本
- 验证收件人邮箱地址格式
- 处理邮件发送失败的情况
- 考虑使用队列系统处理大批量邮件发送
- 遵守反垃圾邮件法规和最佳实践
通过以上方法和代码示例,可以有效地在PHP应用中实现电子邮件发送功能。根据项目需求选择适合的方法,简单的需求可以使用内置mail()函数,复杂需求则建议使用PHPMailer或SwiftMailer等成熟库。