0

我可以找到的代码中没有错误,并且我的本地 ssmpt 客户端已配置,我可以通过命令行发送邮件。但是根本没有邮件和错误来自php。就好像 php 从来没有命中这个本地邮件。我“确实”在我的 php.ini 中设置了我的 sendmail 路径并重新启动了 apache。我不知道还能是什么?

<?php
require_once('config.php');
$attrs = array(PDO::ATTR_PERSISTENT => true);
$pdo = new PDO("mysql:host=localhost;dbname=".$dbname, $db_username, $db_password, $attrs);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$custlist = $pdo->prepare("SELECT customer_list.sms_num, carriers.carrieraddr, customer_list.contact_first,  customer_list.contact_last
    FROM carriers, customer_list
    WHERE send_id=send_code
    ORDER BY customer_list.sms_num");
#$carrierlist = $pdo->prepare("SELECT * FROM carriers");
if (isset($_POST['body'], $custlist)) {
    $custlist->execute();
    #var_dump($custlist);
    #var_dump($_POST['body']);
    while ($row = $custlist->fetch(PDO::FETCH_ASSOC)) {
        #$prefix = $row['sms_num'];
        #$suffix = $row['carrieraddr'];
        $to = 'brads@telecomm.com';
        $subject = 'the subject';
        $message = 'hello';
        $headers = 'From: admin@telecomm.com' . "\r\n" .
            'Reply-To: admin@telecomm.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

        mail($to, $subject, $message, $headers);
        #$body = $_POST['body'];

        #var_dump($prefix);
        #var_dump($suffix);
        #var_dump($_POST['body']);
    }
}

//$products = array();
$smscustobject = new ArrayObject($custlist);
#$smsarrayobject = new ArrayObject($carrierlist);

$pdo = null;
?>
<form action="" method="POST">
    Your Message Body <input name="body" type="text" />
    <input type="submit">
</form>
4

3 回答 3

1

我遇到了同样的问题,在运行一个端口测试 PHP 脚本后发现我需要配置 linux(在我的例子中是 Centos)以允许 httpd 在命令行上使用以下命令访问 TCP 端口:

setsebool httpd_can_network_connect=1

或永久由

setsebool -P httpd_can_network_connect=1

注意:使用 -P 选项在我的机器上花费了 2 多分钟,所以请耐心等待

嘿,快!我的邮件命令有效。

我的情况是我能够从命令行向我的 ISP 的 SMTP 服务器(即 mail.optusnet.com.au 端口 25)发送邮件,但不使用在我的浏览器中运行的 PHP 脚本。

此外,通过对您的 SMTP 主机运行 Telnet 会话,确保您的防火墙不会干扰 PHP。

例如$telnet mail.optusnet.com.au 25

在您的情况下,我怀疑不是因为您能够从命令行发送电子邮件。

我希望这会有所帮助

于 2013-11-24T15:09:53.747 回答
0

我个人会选择 SwiftMailer 之类的东西——它会定期更新,而且使用起来相对简单 http://swiftmailer.org/

于 2013-08-16T10:59:35.780 回答
0

删除 sendmail 路径并允许系统使用默认值修复它。

于 2013-08-16T11:01:05.653 回答