php
  • pear
  • 2010-02-17 126 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, 
    
    相关问题