Невозможно отправить почту через php и ssmtp
В моем коде нет ошибок из того, что я могу найти, мой локальный клиент ssmpt настроен, и я могу отправлять почту через командную строку. Но никакая почта и никакая ошибка не прибывают из php вообще. Как будто php никогда не попадает в эту локальную почтовую программу. У меня 'do' есть мой путь sendmail, установленный в моем php.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' . "\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>
3 ответа
У меня возникла та же проблема, и я обнаружил, что после запуска сценария PHP для тестирования портов мне нужно было настроить linux (в моем случае Centos), чтобы разрешить httpd доступ к портам TCP с помощью следующей команды в командной строке:
setsebool httpd_can_network_connect = 1
или навсегда
setsebool -P httpd_can_network_connect=1
Примечание: использование опции -P на моей машине заняло более 2 минут, так что наберитесь терпения
Вуаля! моя почтовая команда сработала.
Моя ситуация заключалась в том, что я мог отправлять почту на SMTP-сервер моего провайдера, т.е. mail.optusnet.com.au, порт 25 из командной строки, но не использовал сценарии PHP, запущенные в моем браузере.
Кроме того, убедитесь, что ваш брандмауэр не мешает PHP, запустив сеанс Telnet с вашим SMTP-хостом.
например, $telnet mail.optusnet.com.au 25
В вашем случае я подозреваю, что нет, поскольку вы можете отправлять электронные письма из командной строки.
Надеюсь, это поможет
Удалите путь sendmail и разрешите системе использовать настройки по умолчанию.
Лично я бы пошел на что-то вроде SwiftMailer - он регулярно обновляется и относительно прост в использовании http://swiftmailer.org/