由于我一直是 Java 后端开发人员,因此我正在创建我的第一个学习练习网站。我正在设置一个用户注册表单,因为这将是我的用户第一次看到我的网站,我想确保我尽可能稳健地处理事情。通过一些试验,我遇到并实施了几乎所有这些解决方案:
- php 的
mail()
功能 - 这在我测试它的第一天就起作用了,后来就停止了。我第一次意识到发送邮件不是“给定”的简单任务 - 梨邮件类 - 今晚实施,目前仍在工作
- pear smtp 邮件 -在此处阅读此内容。让我觉得我应该使用 smtp?
在这一点上,我意识到可靠地发送电子邮件并不像我最初想象的那么简单。我的问题是发送邮件最可靠的方法是什么,以及处理异常的最可靠的方法是什么?例如,如果 SMTP 是最可靠的方式,请解释原因并提供一个简单的错误处理示例。
对于发生的任何错误,它们是否会在进行一些自动重试时受益?我知道仅仅因为我发送邮件并不意味着该人会收到它,但我在问最强大的解决方案是什么,因为我确信其他人已经这样做了 100 次。
为了证明我不仅仅是一个懒惰的编码器,这就是我到目前为止一直在工作的东西 - 但我不知道这实际上有多强大(梨邮件):
<?php } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
include('Mail.php');
include('Mail/mime.php');
$to = urldecode($_POST['email']);
if (preg_match('(\r|\n)', $to)) {
die('No email injection for you!');
}
$headers = array(
'From'=>'tag <me@mysite.com>',
'Subject'=>'Registration for mysite.com'
);
$text_body = 'boring text message';
$html_body = '<html>
<head><title>Welcome</title></head>
<body>
<p>slightly less boring message</p>
</body>
</html>';
//Utilize the mime class to generate mime body and add mime headers
$mime = new Mail_mime();
$mime->setTXTBody($text_body);
$mime->setHTMLBody($html_body);
$body = $mime->get();
$headers = $mime->headers($headers);
//Utilize the mail class to send the mime mail
$mail = Mail::factory('mail');
$mail->send($to, $headers, $body);
echo 'mail sent maybe?';
?>
编辑:使用带有错误处理的 SMTP 的代码示例
<?php } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
include('Mail.php');
include('Mail/mime.php');
$to = $_POST['email'];
$to = urldecode($to);
if (preg_match('(\r|\n)', $to)) {
die('No email injection for you!');
}
$headers = array(
'From'=>'tag <me@mysite.com>',
'Subject'=>'Registration for mysite.com'
);
$text_body = 'boring text message';
$html_body = '<html>
<head><title>Welcome</title></head>
<body>
<p>slightly less boring message</p>
</body>
</html>';
//Utilize the mime class to generate mime body and add mime headers
$mime = new Mail_mime();
$mime->setTXTBody($text_body);
$mime->setHTMLBody($html_body);
$body = $mime->get();
$headers = $mime->headers($headers);
//Utilize the mail class to send the mime mail
$host = 'mail.mysite.com';
$port = '26';
$username = 'me@mysite.com';
$password ='myPassword';
$smtp = Mail::factory('smtp', array (
'host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>