无法实例化邮件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 );