簡體   English   中英

PHP PEAR 郵件問題

[英]Problem with PHP PEAR Mail

我正在嘗試使用 PEAR Mail 使用外部 smtp 服務器發送。 好像掛了一段時間,然后腳本結束。 它輸出我所有的“回聲”語句,直到發送后的那個語句。 沒有任何輸出超過說“發送前”的回聲。 誰能告訴我這里可能有什么問題? (虛擬值代替 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";

如果有人在 linux 上運行並遇到與 Jayme 相同的問題。 這是安裝缺少的“Net/”類的另一個簡單解決方案。 這些缺失的類會導致腳本中斷。

sudo pear install Net_SMTP

我遇到了同樣的問題,它掛在發送命令上。 我的第一步是從命令行運行以查看完整的錯誤消息(如 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 可以讀取它們。

瞧,它奏效了!

試試這個以確保您的郵件正常工作:

<?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

重新安裝 channel://pear.php.net/Mail-1.2.0 對我不起作用。(Ubuntu 12.04)

只需在新之前刪除字符“&”

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

Todd 的腳本非常好,但不能解決您的問題,即您的瀏覽器在 SMTP 之前超時。 這就是為什么您只能看到一半的頁面,而沒有看到任何可用於調試 SMTP 設置的錯誤消息。

解決辦法是直接運行PHP腳本。 沒有超時。

如果因為您的 ISP 沒有給您 shell 訪問權限而不能這樣做,請創建一個每分鍾運行一次的 cron 作業。 Cron 會將輸出通過電子郵件發送給您,其中包含完整的調試詳細信息。

對於 PHP 版本 7,您需要安裝 php-net-smtp:

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

我實際上遇到了同樣的問題。 一個生產腳本出現故障,我遇到了最困難的時間進行故障排除。 主要是因為有太多代碼可以防止出現錯誤。 最終,我使用了 Kenny Ray 的代碼,對其進行了修改以適用於我的環境,並進行了測試。 原來 Net_Socket 不知何故消失了。 我已經卸載並重新安裝了它,一切又開始工作了。 我希望這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM