无法实例化邮件function。 为什么发生这个错误
当我试图通过PHPMailer发送邮件时,我收到此错误消息。 我的代码如下:
<? require("phpmailer/class.phpmailer.php"); // First we require the PHPMailer libary in our script $mail = new PHPMailer(); // Next we create a new object of the PHPMailer called $mail $mail->From = "rajasekar.kcet@gmail.com"; $mail->FromName = "Rajasekar"; $mail->AddAddress("rajasekar.kcet@gmail.com"); // This is the adress to witch the email has to be send. $mail->Subject = "First PHP Email message"; // This is the subject of the email message. $mail->Body = "Hi! \n\n This is my first e-mail sent through PHP."; // This is the actual email message if(!$mail->Send()) // Now we send the email and check if it was send or not. { echo 'Message was not sent.'; echo 'Mailer error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent.'; } ?>
在Ubuntu(至less12.04)看来,默认情况下不安装sendmail。 你将不得不使用命令sudo apt-get install sendmail-bin
来安装它
您可能还需要为其configuration正确的权限,如上所述。
我用这行代码
if($phpMailer->Send()){ echo 'Sent.<br/>'; }else{ echo 'Not sent: <pre>'.print_r(error_get_last(), true).'</pre>'; }
找出问题所在。 事实certificate,我正在安全模式下运行,并在第770行或第五个参数, $params
,被给予了mail()
,这在安全模式下运行时不受支持。 我只是把它评论出来,瞧,它的工作:
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);
它在PHPMailer的MailSend
函数中。
我只是有这个问题,发现我的Apache错误日志sendmail was'nt安装后,它是所有的工作,因为它应该!
root@web1:~$ tail /var/log/apache2/error.log sh: 1: /usr/sbin/sendmail: not found
有同样的问题。 只是做了一个快速查找apache2 error.log
文件,它确切地说是什么问题:
> sh: /usr/sbin/sendmail: Permission denied
所以,解决scheme是给予/usr/sbin/sendmail
文件的适当权限(它不能从php访问)。
命令做到这一点将是:
> chmod 777 /usr/sbin/sendmail
确信它甚至存在!
确保你还包括phpmailer自带的smtp类:
// for mailing require("phpmailer/class.phpmailer.php"); require("phpmailer/class.smtp.php");
尝试使用SMTP发送电子邮件: –
$mail->IsSMTP(); $mail->Host = "smtp.example.com"; // optional // used only when SMTP requires authentication $mail->SMTPAuth = true; $mail->Username = 'smtp_username'; $mail->Password = 'smtp_password';
重新访问一个旧的线程,我的问题是,“AddressTo”电子邮件地址之一是无效的。 删除该电子邮件地址删除了错误。
尝试使用不是Gmail的地址。 他们不允许(据我所知)smpt访问发送邮件。 我上周正在做一个简单的邮件程序,他们也不使用默认端口发送,并要求您通过https传输
检查您的主机,看看他们是否有任何时间限制发送的电子邮件。
这是一个系统错误。
检查系统错误:
tail /var/log/httpd/error_log
这可以是任何原因。
正如在这里指出的,“这意味着你的PHP安装没有被configuration为正确调用mail()函数(例如sendmail_path在你的php.ini中设置不正确),或者你没有安装和configuration本地邮件服务器。
在我的情况下,我不得不允许在我的虚拟主机的设置中的邮件()函数(“激活邮件()队列”)。
“无法实例化邮件function”是PHPMailer报告邮件()(在邮件扩展中)的调用失败的方式。 (所以你使用“邮件”邮件。)
在PHPMailer :: MailSend中调用mail()之前,可以尝试删除@s,然后查看是否正在悄悄丢弃错误(如果有的话)。
我已经解决了我的问题(对于wamp)
$mail->IsSMTP(); $mail->Host='hote_smtp';
corse通过正确的值更改hote_smtp
一个古老的线程,但它可能会帮助像我这样的人。 我通过在PHP.ini中将SMTP服务器值设置为合法值解决了这个问题
只需重新访问旧线程,您可以通过添加以下内容深入debuggingPHPMailer:
print_r(error_get_last());
这将打印出你导致默认的PHP邮件()中断的确切错误。
希望它有助于某人。
我有同样的错误。 回复正在导致问题。 我删除它。
$email->AddReplyTo( $admin_email, $admin_name );