Kenny
Kenny

Reputation: 2176

Problem with PHP PEAR Mail

I am trying to use PEAR Mail to send using an external smtp server. It seems to hang for a while, then the script ends. It outputs all of my "echo" statements up till the one after the send. Nothing is output past the echo that says "before send". Can anyone tell me what might be wrong here? (dummy values substituted for smtp values). Mail is not being sent. Thanks for helping!

echo "start";
$n = $_POST['txtName'];
$e = $_POST['txtEmail'];
$t = 'Kenny <[email protected]>';
$f = 'Kenny <[email protected]>';
$s = 'CPA TEST';
$b = "name: $n email: $e"; 

include("mail.php");
echo "after include";
/* mail setup recipients, subject etc */
$recipients = $t;
$headers["From"] = $f;
$headers["To"] = $t;
$headers["Subject"] = $s;
$mailmsg = $b;
/* SMTP server name, port, user/passwd */
$smtpinfo["host"] = "my_smtp_host";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "my_email";
$smtpinfo["password"] = "my_password";
echo "before object";
/* Create the mail object using the Mail::factory method */
$mail_object =& Mail::factory("smtp", $smtpinfo);
echo "before send";
/* Ok send mail */
$send = $mail_object->send($recipients, $headers, $mailmsg);
echo "after send";
if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} 
echo "done";

Upvotes: 17

Views: 40766

Answers (7)

Houssin Boulla
Houssin Boulla

Reputation: 2859

For Php version 7 you need to install php-net-smtp:

sudo apt-get update
sudo apt-get install php-net-smtp

Upvotes: 1

ericL
ericL

Reputation: 41

The reinstall of channel://pear.php.net/Mail-1.2.0 does'nt work for me.(Ubuntu 12.04)

Just remove the caracter "&" before new

sudo vi /usr/share/php/Mail/smtp.php
    349         /*$this->_smtp = &new Net_SMTP($this->host, */
    350         $this->_smtp = new Net_SMTP($this->host,

Upvotes: 4

Jayme Dunlap
Jayme Dunlap

Reputation: 157

I ran into the same issue where it hung on the send command. My first step was to run from the command line to see the full error message (as Rap suggested above).

php mymailsample.php

It spit out the following

Warning:  include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348
PHP Warning:  include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348
PHP Fatal error:  Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349

I downloaded the following, and put them in /Net

http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download

I had to adjust the permissions of the SMTP and Socket libraries so they could be read by Apache.

And voila, it worked!

Upvotes: 16

Vynz
Vynz

Reputation: 817

If someone is running on linux and runs into the same problem as Jayme. Here is another simple solution for installing the missing "Net/" classes. These missing classes causes the script to interrupt.

sudo pear install Net_SMTP

Upvotes: 49

Jackson Leung
Jackson Leung

Reputation: 59

I've actually encountered the same problem. A production script broke down, and I had the hardest time troubleshooting it. Mainly because there was so much code that prevented errors from showing up. Ultimately, I used Kenny Ray's code, modified it to work for my environment, and ran a test. It turned out the Net_Socket somehow disappeared. I've uninstalled and re-installed it, and everything started working again. I hope this helps you.

Upvotes: 0

Rap
Rap

Reputation: 7282

Todd's script is excellent, but will not solve your problem which is that your browser times out before the SMTP does. That is why you only see half your page and are not seeing any error messages that you can use to debug your SMTP settings.

The solution is to run the PHP script directly. No timeout.

If you can't do that because your ISP doesn't give you shell access, create a cron job to run every minute. Cron will email the output to you which will have full debug details.

Upvotes: 1

Todd Moses
Todd Moses

Reputation: 11029

Try this to ensure your mail is working:

<?php
require_once "Mail.php";

$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

If this does not work then you will need to check your PHP Configuration.

See http://php.net/manual/en/function.mail.php for more information.

Upvotes: 6

Related Questions