php
  • pear
  • 2010-02-17 102 views 15 likes 
    15

    我想使用PEAR郵件發送使用外部smtp服務器。它似乎掛了一段時間,然後劇本結束。它輸出我的所有「回聲」語句,直到發送完成爲止。在發送之前,回聲沒有輸出。任何人都可以告訴我這裏可能有什麼問題嗎? (用虛擬值代替smtp值)。郵件沒有被髮送。感謝您的幫助!問題與PHP PEAR郵件

    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"; 
    

    回答

    6

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

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

    如果這不起作用,那麼你將需要檢查你的PHP配置。

    有關更多信息,請參閱http://php.net/manual/en/function.mail.php

    +0

    感謝您的答覆託德只需卸下卡拉科特 「&」。 – Kenny 2010-02-18 16:31:52

    +0

    你好。我測試了你的腳本,它與「真實」代碼具有相同的效果。它掛起,沒有警告,沒有錯誤。我的php配置包含error_reporting = E_ALL | E_STRICT和display_errors =開。還有其他建議嗎? – 2012-05-06 16:00:03

    +1

    按照Rap和Jayme Dunlap的建議,在命令行上運行它以查看錯誤。 – 2012-05-07 12:33:17

    2

    託德的腳本非常好,但不能解決您的問題,即您的瀏覽器在SMTP之前超時。這就是爲什麼你只看到你的網頁的一半,並沒有看到任何錯誤消息,你可以用它來調試你的SMTP設置。

    解決方案是直接運行PHP腳本。沒有超時。

    如果你不能這樣做,因爲你的ISP不給你shell訪問權限,那麼創建一個cron作業來每分鐘運行一次。 Cron會通過電子郵件向您發送完整的調試細節。

    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 
    

    我下載了以下,並把它們放在/淨

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

    我不得不調整的權限SMTP和Socket庫,以便它們可以被Apache讀取。

    瞧,它的工作!

    +10

    或者只是運行'sudo pear install Net_SMTP'如果可以從命令行運行pear :) – 2013-01-04 01:53:09

    +0

    @JustinJenkins你搖滾的人! – mboy 2014-10-19 06:55:56

    1

    我實際上遇到了同樣的問題。一個生產腳本崩潰了,我在最困難的時候解決它。主要是因爲有太多的代碼阻止錯誤出現。最終,我使用Kenny Ray的代碼,對其進行了修改,以適應我的環境,並進行了測試。原來Net_Socket不知怎的消失了。我已經卸載並重新安裝它,並且一切都開始重新工作。我希望這可以幫助你。

    47

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

    sudo pear install Net_SMTP

    +1

    這是爲我修復它。 – smoothgrips 2014-10-28 15:34:58

    +0

    這是我的解決方案。謝謝;) – daniherculano 2015-05-08 07:20:23

    +0

    這也適用於我!謝謝 – Sahil 2016-04-09 11:58:05

    5

    通道的重新安裝:對我來說//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, 
    
    相關問題