这几天用一个开源的项目进行集成。可惜自带的邮件发布系统不能正常使用,我使用了phpmailer。
接下来就是集成时的错误。
我本机环境为:XP SP3(操作系统) + zendserver5.1.0(php环境) + micrisoft security essentials(杀毒软件)
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = $INI['mail']['host'];
$mail->SMTPAuth = true;
$mail->Username = $INI['mail']['user'];
$mail->Password = $INI['mail']['pass'];
$mail->From = $INI['mail']['from'];
$mail->FromName = $INI['system']['sitename'];
$mail->AddAddress($to);
$mail->AddReplyTo($INI['mail']['reply'], $mail->FromName);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AltBody = $message;
if(!$mail->Send())
{
echo “Message could not be sent. <p>”;
echo “Mailer Error: ” . $mail->ErrorInfo;
exit;
}
这个没有讲头,如果连这个基本配置都不明白,请google一下。
本地能正常发送,没有任何问题。
服务器环境:windows2003(操作系统) + iis6.0 + php5.2.9(php环境) + Mcafee(麦咖啡杀毒软件)
好了,问题来了,第一个问题:
1. SMTP Error: Could not connect to SMTP host
原因:
不同邮件系统要求的smtp请求不同,但是都允许大写,有些不支持小写,比如网易,腾讯的邮箱。
解决方法:
public function IsSMTP() {
$this->Mailer = ‘SMTP’; // 将smtp ->SMTP ;即原来是小写,现在大写。
}
// Choose the mailer and send through it
switch($this->Mailer) {
case ‘sendmail’:
return $this->SendmailSend($header, $body);
case ‘SMTP’: //同样 将smtp ->SMTP ;即原来是小写,现在大写。
return $this->SmtpSend($header, $body);
case ‘mail’:
default:
return $this->MailSend($header, $body);
}
2. Could not instantiate mail function
原因:
设置的参数不正确,我使用了gmail做一些基本测试,需要在次设置其他参数。
解决方法:
$mail->SMTPSecure = ‘tls’; //只需要加上这句
3. SMTP Error: Could not connect to SMTP host
原因:
再次回到这个问题上了。这次需要修改php.ini文件,和关闭相关的杀毒软件,关闭防火墙。这将会对服务器造成一些威胁。
解决方法:
首先,在php.ini中去掉下面的两个分号
;extension=php_sockets.dll
;extension=php_openssl.dll
然后,关闭杀毒软件,比如麦咖啡,360… LINUX不会出现这个问题。
总体说来是因为操作系统,以及国内邮箱供应商接口的问题。