从我能找到的内容来看,我的代码中没有错误,我的本地ssmpt客户端已配置,我可以通过命令行发送邮件。但是没有邮件和错误来自php。就好像 php 永远不会命中这个本地邮件。我"确实"在我的php中设置了我的sendmail路径.ini并重新启动了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' . "rn" .
'Reply-To: admin@telecomm.com' . "rn" .
'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>
我遇到了同样的问题,在运行端口测试 PHP 脚本后发现我需要配置 linux(在我的例子中为 Centos(以允许 httpd 访问 TCP 端口使用命令行上的以下命令:
塞布勒 httpd_can_network_connect=1
或永久由
塞布尔 -P httpd_can_network_connect=1
注意:在我的机器上使用 -P 选项花了 2 分钟以上,所以请耐心等待
嘿,我的邮件命令有效。
我的情况是我能够从命令行向ISP的SMTP服务器(即端口25(发送邮件 mail.optusnet.com.au 但没有使用浏览器中运行的PHP脚本。
此外,通过运行与 SMTP 主机的 Telnet 会话,确保您的防火墙不会干扰 PHP。
例如 $telnet mail.optusnet.com.au 25
在您的情况下,我怀疑不是,因为您无法从命令行发送电子邮件。
我希望这有所帮助
我个人会选择像SwiftMailer这样的东西 - 它会定期更新并且相对简单http://swiftmailer.org/
删除 sendmail 路径并允许系统使用默认值可以修复它。