it-roy-ru.com

настройка smtp для почты php

Я отправляю почту с моего сайта, используя функцию 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);
?>
11
shin

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

Вот пример почтового сценария SMTP:

<?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>");
}
?>
13
JCD

Обратите внимание, что почтовые настройки 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, вероятно, понадобилась небольшая помощь).

2
Alexis Wilke

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

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

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

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

C.

0
symcbean

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

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

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

0
Chaya Cooper

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

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

relayhost = smtp.example.com

в /etc/postfix/main.cf

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

0
ptica