我正在尝试使用PEAR Mail使用外部smtp服务器发送。它似乎挂了一段时间,然后脚本结束。它输出我的所有“echo”语句,直到发送后的一个。没有任何东西输出超过“发送前”的回声。谁能告诉我这里可能有什么问题? (用于替换smtp值的虚拟值)。邮件未发送。谢谢你的帮助!
echo "start";
$n = $_POST['txtName'];
$e = $_POST['txtEmail'];
$t = 'Kenny <email@host.com>';
$f = 'Kenny <email@host.com>';
$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";
答案 0 :(得分:46)
如果有人在linux上运行并遇到与Jayme相同的问题。这是安装缺少的“Net /”类的另一个简单解决方案。这些缺少的类会导致脚本中断。
sudo pear install Net_SMTP
答案 1 :(得分:15)
我遇到了挂在send命令上的同一问题。我的第一步是从命令行运行以查看完整的错误消息(如上面的Rap建议)。
php mymailsample.php
吐出以下
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
我下载了以下内容,并将它们放入/ Net
http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download
我必须调整SMTP和Socket库的权限,以便Apache可以读取它们。
瞧,它有效!
答案 2 :(得分:5)
尝试此操作以确保您的邮件正常运行:
<?php
require_once "Mail.php";
$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <recipient@example.com>";
$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>");
}
?>
如果这不起作用,那么您需要检查PHP配置。
有关详细信息,请参阅http://php.net/manual/en/function.mail.php。
答案 3 :(得分:4)
重新安装频道://pear.php.net/Mail-1.2.0对我无效。(Ubuntu 12.04)
只需删除字符“&amp;”在新的
之前sudo vi /usr/share/php/Mail/smtp.php
349 /*$this->_smtp = &new Net_SMTP($this->host, */
350 $this->_smtp = new Net_SMTP($this->host,
答案 4 :(得分:1)
Todd的脚本非常好,但无法解决您的问题,即您的浏览器在SMTP之前超时。这就是为什么您只看到一半页面并且没有看到任何可用于调试SMTP设置的错误消息。
解决方案是直接运行PHP脚本。没有超时。
如果由于您的ISP不提供shell访问权限而无法执行此操作,请创建一个cron作业以便每分钟运行一次。 Cron会将输出通过电子邮件发送给您,该输出将包含完整的调试详细信息。
答案 5 :(得分:0)
我实际上遇到了同样的问题。生产脚本崩溃了,我最难对其进行故障排除。主要是因为有太多的代码可以防止出现错误。最后,我使用了Kenny Ray的代码,将其修改为适合我的环境,并进行了测试。原来Net_Socket不知何故消失了。我已经卸载并重新安装它,一切都开始工作了。我希望这会对你有所帮助。
答案 6 :(得分:0)
对于 PHP 版本 7,您需要安装 php-net-smtp:
sudo apt-get update
sudo apt-get install php-net-smtp