phpmailer error “Could not instantiate mail function”

匿名 (未验证) 提交于 2019-12-03 02:22:01

问题:

I'm using the mail() basic example modified slightly for my user id and I'm getting the error "Mailer Error: Could not instantiate mail function"

if I use the mail function -

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

it works fine, though I'm having trouble sending html, which is why I'm trying PHPMailer.

this is the code:

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!";     } ?> 

回答1:

Try using SMTP to send email:-

$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'; 


回答2:

$mail->AddAddress($address, "her name"); 

should be changed to

$mail->AddAddress($address); 

This worked for my case..



回答3:

If you are sending file attachments and your code works for small attachments but fails for large attachments:

If you get the error "Could not instantiate mail function" error when you try to send large emails and your PHP error log contains the message "Cannot send message: Too big" then your mail transfer agent (sendmail, postfix, exim, etc) is refusing to deliver these emails.

The solution is to configure the MTA to allow larger attachments. But this is not always possible. The alternate solution is to use SMTP. You will need access to a SMTP server (and login credentials if your SMTP server requires authentication):

$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 defaults to using PHP mail() function which uses settings from php.ini which normally defaults to use sendmail (or something similar). In the above example we override the default behavior.



回答4:

This worked for me

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


回答5:

You need to make sure that your from address is a valid email account setup on that server.



回答6:

An old thread, but it may help someone like me. I resolved the issue by setting up SMTP server value to a legitimate value in PHP.ini



回答7:

I had this issue as well. My solution was to disable selinux. I tried allowing 2 different http settings in selinux (something like httpd_allow_email and http_can_connect) and that didn't work, so I just disabled it completely and it started working.



回答8:

I was having this issue while sending files with regional characters in their names like: .

The solution was to clear filename before attaching it to the email.



回答9:

Seems in my case it was just SERVER REJECTION. Please check your mail server log / smtp connection accessibility.



回答10:

I had this issue, and after doing some debugging, and searching I realized that the SERVER (Godaddy) can have issues.

I recommend you contact your Web hosting Provider and talk to them about Quota Restrictions on the mail function (They do this to prevent people doing spam bots or mass emailing (spam) ).

They may be able to advise you of their limits, and if you're exceeding them. You can also possibly upgrade limit by going to private server.

After talking with GoDaddy for 15 minutes the tech support was able to resolve this within 20 minutes.

This helped me out a lot, and I wanted to share it so if someone else comes across this they can try this method if all fails, or before they try anything else.



回答11:

The PHPMailer help docs on this specific error helped to get me on the right path.

What we found is that php.ini did not have the sendmail_path defined, so I added that with sendmail_path = /usr/sbin/sendmail -t -i;



回答12:

Check if sendmail is enabled, mostly if your server is provided by another company.



回答13:

your code look good, did you dont forgot to Install PostFix in your server ?

sudo apt-get install postfix 

it's worked for me ;)

Cheer



回答14:

We nee to change the values of 'SMTP' in php.ini file php.ini file is located into

EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!