phpmailer错误“无法实例化邮件功能”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了phpmailer错误“无法实例化邮件功能”相关的知识,希望对你有一定的参考价值。

我使用的mail()基本示例稍微修改了我的用户ID,我收到错误“Mailer Error:无法实例化邮件功能”

如果我使用邮件功能 -

mail($to, $subject, $message, $headers);

它工作正常,虽然我在发送html时遇到问题,这就是为什么我在尝试使用phpMailer。

这是代码:

<?php
require_once('../class.phpmailer.php');

    $mail             = new PHPMailer(); // defaults to using php "mail()"
    $body             = file_get_contents('contents.html');
    $body             = eregi_replace("[]",'',$body);
        print ($body ); // to verify that I got the html
    $mail->AddReplyTo("reply@domain.com","my name");
    $mail->SetFrom('from@domain.com', 'my name');
    $address = "to@domain.com";
    $mail->AddAddress($address, "her name");
    $mail->Subject    = "PHPMailer Test Subject via mail(), basic";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
    $mail->MsgHTML($body);
    $mail->AddAttachment("images/phpmailer.gif");      // attachment
    $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
?>
答案

尝试使用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';
另一答案

在我的情况下,导致问题的是附件大小限制。检查并增加为我工作的邮件的大小限制。

另一答案

一个旧线程,但它可能会帮助像我这样的人。我通过在PHP.ini中将SMTP服务器值设置为合法值来解决此问题

另一答案

我也有这个问题。我的解决方案是禁用selinux。我尝试在selinux中允许2个不同的http设置(类似于httpd_allow_email和http_can_connect)并且不起作用,所以我完全禁用它并开始工作。

另一答案

我在发送带有区域字符的文件时遇到了这个问题,例如:VęryRęgióńął file - name.pdf

解决方案是在将文件名附加到电子邮件之前清除文件名。

另一答案

检查sendmail是否已启用,主要是如果您的服务器是由其他公司提供的。

另一答案

对于我有这个问题的价值而且必须进入cPanel,我看到了错误消息

“注意!请通过cpanel插件注册非smtp邮件中使用的电子邮件ID。通过脚本发送的非smtp电子邮件中不允许使用未注册的电子邮件ID。转到Mail部分,在paper_lantern主题中找到”Registered Mail IDs“插件。 “

在cPanel(注册邮件ID)中注册电子邮件并等待10分钟让我的工作。

希望能帮助别人。

另一答案

我们需要在php.ini文件中更改php.ini文件中的'SMTP'值

EasyPHP-DevServer-14.1VC11inariesphpphp_runningversionphp.ini
另一答案
$mail->AddAddress($address, "her name");

应改为

$mail->AddAddress($address);

这适用于我的情况..

另一答案

这对我有用

$mail->SetFrom("from@domain.co","my name", 0); //notice the third parameter
另一答案

您需要确保您的发件人地址是该服务器上的有效电子邮件帐户设置。

另一答案

如果您要发送文件附件,并且您的代码适用于小附件但大型附件失败:

如果您在尝试发送大型电子邮件时收到错误“无法实例化邮件功能”错误,并且您的PHP错误日志包含消息“无法发送邮件:太大”,那么您的邮件传输代理(sendmail,postfix,exim等)拒绝提供这些电子邮件。

解决方案是配置MTA以允许更大的附件。但这并不总是可行的。替代解决方案是use SMTP。您需要访问SMTP服务器(如果您的SMTP服务器需要身份验证,则需要登录凭据):

$mail             = new PHPMailer();
$mail->IsSMTP();                           // telling the class to use SMTP
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.yourdomain.com"; // set the SMTP server
$mail->Port       = 26;                    // set the SMTP port
$mail->Username   = "yourname@yourdomain"; // SMTP account username
$mail->Password   = "yourpassword";        // SMTP account password

PHPMailer默认使用PHP mail()函数,它使用php.ini中的设置,通常默认使用sendmail(或类似的东西)。在上面的示例中,我们覆盖了默认行为。

另一答案

您的代码看起来不错,您是否忘记在服务器上安装PostFix?

sudo apt-get install postfix

它对我有用;)

干杯

另一答案

关于this specific error的PHPMailer帮助文档帮助我走上了正确的道路。

我们发现php.ini没有定义sendmail_path,所以我用sendmail_path = /usr/sbin/sendmail -t -i;添加了

另一答案

在我的情况下似乎只是服务器拒绝。请检查您的邮件服务器日志/ smtp连接可访问性。

另一答案

我遇到了这个问题,经过一些调试和搜索后我意识到SERVER(Godaddy)可能有问题。

我建议您联系您的网络托管服务提供商,并与他们讨论关于邮件功能的Quota Restrictions(他们这样做是为了防止人们做垃圾邮件机器人或群发电子邮件(垃圾邮件))。

他们可能会告诉你他们的极限,如果你超过他们。您也可以通过转到私人服务器来升级限制。

在与GoDaddy交谈15分钟后,技术支持人员能够在20分钟内解决这个问题。

这对我帮助很大,我想分享它,所以如果其他人遇到这个,他们可以尝试这种方法,如果一切都失败,或在他们尝试其他任何事情之前。

以上是关于phpmailer错误“无法实例化邮件功能”的主要内容,如果未能解决你的问题,请参考以下文章

删除用于确认用户电子邮件的 Joomla 激活电子邮件... LOCALHOST

PHPMailer邮件未发送=>许多错误[重复]

通过 PHPMailer 发送电子邮件时出现身份验证错误

如何在 xampp 上使用 phpmailer 发送邮件

phpmailer 6.0成功消息,但没有收到使用gmail作为中继的邮件

如何在xampp上使用phpmailer发送邮件