Конфигурация smtp для php mail

Я отправляю письма с моего сайта с помощью функции php mail. Но теперь он не работает, и я связался с нашей командой хостинга, тогда они сказали мне использовать smtp, поскольку они внесли некоторые изменения на сервере. Я не знаю, как это сделать. Текущий код (с функцией php mail) заключается в следующем, может ли кто-нибудь помочь мне в изменениях, которые я должен сделать с этим.

<?php
$mail_To="[email protected]";
$headers = "";
$headers .= "From: [email protected]\n";
$headers .= "Reply-To: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "X-Mailer: php";
$mail_Subject = " Live TV key";
$mail_Body = "<p>Muscle-tube</p>";
mail($mail_To, $mail_Subject, $mail_Body,$headers);

? >

Ответ 1

Функция PHP mail() не поддерживает SMTP. Вам понадобится использовать что-то вроде PEAR Mail.

Вот пример SMTP-почты script:

<?php
require_once("Mail.php");

$from = "Your Name <[email protected]>";
$to = "Their Name <[email protected]>";
$subject = "Subject";
$body = "Lorem ipsum dolor sit amet, consectetur adipiscing elit...";

$host = "mailserver.blahblah.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>Error sending mail:<br/>" . $mail->getMessage() . "</p>");
} else {
    echo("<p>Message sent.</p>");
}
?>

Ответ 2

Но теперь он не работает, и я связался с нашей командой хостинга, тогда они сказали мне использовать smtp

Newsflash - раньше он использовал SMTP. Они не предоставили вам информацию, необходимую для решения проблемы, или вы не передали ее точно здесь.

Возможно, что они отключили локальный MTA на веб-сервере, и в этом случае вам нужно будет подключить SMTP-порт на удаленном компьютере. Есть много наборов инструментов, которые сделают тяжелый подъем для вас. Лично мне нравится phpmailer, потому что он добавляет другие функции.

Конечно, если они убрали объект, который был там раньше, и вы платите за услугу, то ваш провайдер должен дать вам лучшую поддержку, чем это (есть также много программ, которые нужно заменить вместо полного MTA, который выполнит эту работу).

С.

Ответ 3

Обратите внимание, что настройки почты PHP поступают из файла php.ini. По умолчанию выглядит примерно так:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log =

Отредактировав файл php.ini, вы сможете исправить проблему, не изменяя свои PHP-скрипты. Кроме того, вы можете протестировать соединение с инструментом telnet и командами HELO, MAIL FROM, RCPT TO, DATA, QUIT, если вы напрямую подключаетесь к SMTP-серверу. С sendmail вам даже не нужно, sendmail должен знать, что он делает (хотя в вашем случае это, вероятно, не было, и параметры sendmail, вероятно, нуждались в небольшой помощи.)

Ответ 4

Так как некоторые из приведенных здесь ответов относятся к настройке SMTP вообще (а не только для @shinod конкретной проблемы, где он работал и остановился), я думал, что было бы полезно, если бы я обновил ответ, потому что это намного проще сделать сейчас, чем раньше:-)

В PHP 4 пакет PEAR Mail обычно уже установлен, и этот действительно простой учебник показывает вам несколько строк кода, которые необходимо добавить в ваш php файл http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm

Большинство хостинговых компаний перечисляют параметры SMTP, которые вам понадобятся. Я использую JustHost, и они перечисляют их в https://my.justhost.com/cgi/help/26 (под сервером исходящей почты)

Ответ 5

Функция

php email() передает электронную почту базовому mail transfer agent, который обычно postfix в системах Linux

поэтому предпочтительный метод в linux должен настроить ваш постфикс для использования ретранслятора, который выполняется линией

relayhost = smtp.example.com

in /etc/postfix/main.cf

однако в сценарии OP я как-то подозреваю, что это работа, которую должен был выполнить его hosting team