2010-08-19 4 views
10

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

?>

ответ

12

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

Вот пример 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>"); 
} 
?> 
0

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

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

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

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

C.

0

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

+0

Параметр 'smtp' опция только для Windows. Для * inux он полагается на 'sendmail_path', который не поддерживает smtp. По этой причине я отказался от этого. – Hengjie

0

Так как некоторые ответы здесь приводятся здесь для настройки 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

email() функция руки РНР письмо к нижележащему mail transfer agent который обычно postfix на системах Linux

поэтому предпочтительный метод на Linux чтобы настроить Postfix использовать relayhost, что делается по линии

relayhost = smtp.example.com

в /etc/postfix/main.cf

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