Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Debugging PHP Mail() and/or PHPMailer

I'm quite stuck with a problem sending mail from a PHP script. Some data:

  • Shared hosting, no SSH access, only hosting provider panel
  • PHP version 5.2.5
  • Last year I built a site which had no problems sending mail with the same hosting
  • Let's say the domain is “domain.com” and my private address is “[email protected]” for anonimity's sake in the following code.

Here's the code:

<?php error_reporting(E_ALL);  ini_set("display_errors", 1);  $to = "[email protected]"; $subject = "Hi"; $body = "Test 1\nTest 2\nTest 3"; $headers = 'From: [email protected]' . "\r\n" .     'errors-to: [email protected]' . "\r\n" .     'X-Mailer: PHP/' . phpversion();  if (mail($to, $subject, $body, $headers)) {     echo("Message successfully sent"); } else {     echo("Message sending failed"); }  require('class.phpmailer.php'); $message = "Hello world"; $mail = new PHPMailer(); $mail->CharSet = "UTF-8"; $mail->AddAddress("[email protected]", "Agos"); $mail->SetFrom("[email protected]","My Site"); $mail->Subject = "Test Message"; $mail->Body = $message; $mail->Send(); ?> 

And here is what I get:

Message sending failed Could not instantiate mail function.

Which is baffling to say the least. Is there anything I can do to get at least some more meaningful errors? Why is code from the class showing up in my file?

like image 921
Agos Avatar asked May 24 '10 10:05

Agos


People also ask

How do I debug PHPMailer?

Enable SMTP debugging and set the debug level in your script as follows: $mail->SMTPDebug = 2; level 1 = client; will show you messages sent by the client. level 2 = client and server; will add server messages, it's the recommended setting.

What is PHP mail () function?

PHP mail() function is used to send email in PHP. You can send text message, html message and attachment with message using PHP mail() function.

How do I know if PHPMailer is working?

to check if it is sending mail as intended; <? php $email = "[email protected]"; $subject = "Email Test"; $message = "this is a mail testing email function on server"; $sendMail = mail($email, $subject, $message); if($sendMail) { echo "Email Sent Successfully"; } else { echo "Mail Failed"; } ?>

Why it is advantages to use PHPMailer for sending and receiving email?

PHPMailer can use a non-local mail server (SMTP) if you have authentication. Further advantages include: It can print various kinds of error messages in more than 40 languages when it fails to send an email. It has integrated SMTP protocol support and authentication over SSL and TLS.


1 Answers

It looks like the class.phpmailer.php file is corrupt. I would download the latest version and try again.

I've always used phpMailer's SMTP feature:

$mail->IsSMTP(); $mail->Host = "localhost"; 

And if you need debug info:

$mail->SMTPDebug  = 2; // enables SMTP debug information (for testing)                        // 1 = errors and messages                        // 2 = messages only 
like image 104
Stacey Richards Avatar answered Sep 30 '22 15:09

Stacey Richards