【发布时间】:2013-04-14 22:42:36
【问题描述】:
由于我一直是 Java 后端开发人员,因此我正在创建我的第一个学习练习网站。我正在设置一个用户注册表单,由于这将是我的用户第一次看到我的网站,我想确保我尽可能稳健地处理事情。通过一些试验,我遇到并实施了几乎所有这些解决方案:
- php 的
mail()函数 - 这在我测试它的第一天就起作用了,后来就停止了。我第一次意识到发送邮件不是“给定”的简单任务 - pear 邮件类 - 今晚实施,目前仍在工作
- pear smtp 邮件 - 阅读此here。让我觉得我应该使用 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>");
}
?>
【问题讨论】:
-
不要重新发明轮子,那里有很多可靠的 php 邮件库。我最喜欢的是swiftmailer.org