Я использую jQuery validate form plugin для получения электронной почты из моего контакта с формой. Мой код, кажется, работает, но я не получаю почту. Я вижу сообщение "Форма отправлена" в WAMP. Я настроил свой SMTP-сервер, и у меня нет сообщения об ошибке от WAMP.
Моя форма: http://jsfiddle.net/Xroad/2pLS2/24/
Что не так?
<?php
if(isset($_POST) && isset($_POST['form_firstname']) && isset($_POST['form_name']) && isset($_POST['form_email']) && isset($_POST['form_telephone']) && isset($_POST['form_message'])) {
extract($_POST);
if(!empty($form_firstname) && !empty($form_name) && !empty($form_email) && !empty($form_telephone) && !empty($form_message)) {
$to = "[email protected]"; // My real email
$subjet = "Contact from the site";
$msg = stripslashes($form_message);
$msg = "A question came \n
Firstname : $form_firstname \n
Name : $form_name \n
Email : $form_email \n
Message : $form_message";
mail($to, $subjet, $msg);
echo "Form sent";
} else {
echo "You have not filled in the field";
}
}
?>
<form id="form-general" action="php/traitement.php" method="post">
я думаю, что у вас проблемы с вашим хостом, поэтому мы пытаемся использовать gmail SMTP-сервер для отправки писем.
для этого я собираюсь использовать электронную библиотеку под названием Swift, загрузите ее бесплатно здесь http://swiftmailer.org/, как только вы ее скачали, просто переименуйте папку в swift
и настройте username
и password
$smtp_settings
( который вы используете для входа в свою учетную запись gmail) и убедитесь, что требуемый файл
require_once dirname(__FILE__).'/swift/lib/swift_required.php';
находится на правильном пути. (так как теперь вы можете просто иметь быструю папку в том же корневом каталоге почтового файла)
<?php
function send_mail($to, $from, $subject='', $body='', $smtp=array()){
// be sure this point where the swift package is...
require_once dirname(__FILE__).'/swift/lib/swift_required.php';
$settings = (object)$smtp;
$transport = Swift_SmtpTransport::newInstance($settings->host, $settings->port, $settings->encryption)
->setUsername($settings->username)
->setPassword($settings->password);
$mailer = Swift_Mailer::newInstance($transport);
$_from = is_array($from) ? $from : array($from);
$_to = is_array($to) ? $to : array($to);
$message = Swift_Message::newInstance($subject)
->setFrom($_from)
->setTo($_to)
->setBody($body);
$result = $mailer->send($message);
return $result;
}
if(isset($_POST) && isset($_POST['form_firstname']) && isset($_POST['form_name']) && isset($_POST['form_email']) && isset($_POST['form_telephone']) && isset($_POST['form_message'])) {
extract($_POST);
if(!empty($form_firstname) && !empty($form_name) && !empty($form_email) && !empty($form_telephone) && !empty($form_message)) {
// SMTP Server Configuration
$smtp_settings = array(
'host' => 'smtp.gmail.com',
'port' => 465,
'encryption' => 'ssl',
'username' => '[email protected]',
'password' => '************',
);
// Send an email to client and a copy to us...
$to = '[email protected]'; // who receive
$from = array('[email protected]' => 'My Site Name'); // who send
$subject = 'Contact from the site';
//$message = stripslashes($form_message)."\r\n";
$message = 'A question came'."\r\n";
$message .= 'Firstname : '.$form_firstname."\r\n";
$message .= 'Name : '.$form_name."\r\n";
$message .= 'Email : '.$form_email."\r\n";
$message .= 'Message : '.$form_message."\r\n";
if(send_mail($to, $from, $subject, $message, $smtp_settings)){
echo "Email sent";
} else {
echo "Email not sent";
}
} else {
echo "You have not filled in the field";
}
}
?>
Ну, в случае, если простая функция mail() без какого-либо другого кода не доставляет почту в ваш почтовый ящик, похоже, ваш SMTP больше настраивается.
Делайте почту ("[email protected]", "Контакт с сайта", "Тест") работают сначала, а остальная часть вашего кода, вероятно, хороша.
ОБНОВИТЬ
Значение по умолчанию SMTP - localhost. По моему мнению, вы не можете разрешить домен SMTP (тот, который в настоящее время находится в вашем php.ini)! Вы можете проверить это на консоли с помощью telnet SMTP 25 (возможно, вам потребуется включить telnet).
Во всяком случае, убедитесь, что у вас есть MTA с другой стороны - я бы предпочел бы вам позвонить вашему системному администратору и спросить его о вашем SMTP-хосте и порту.
Просто чтобы предупредить вас - если вам нужно пройти аутентификацию против вашего MTA, вам придется найти другое решение, потому что php mail() (по моим сведениям) не может этого сделать. Найдите SwiftMailer и PhpMailer, которые приходят с множеством примеров.
Обновление 2
Ну, sendmail.exe поставляется с собственным конфигурационным файлом, где вам нужно ввести свой SMTP-сервер, порт и учетные данные!
Обновление 3
Поддержка sendmail.exe TLS не обновлялась с 2008 года. Версия Windows имеет последнее обновление 3 года назад и в зависимости от того, какую загрузку вы выбрали, у вас может оказаться даже более старая версия. Хотя он работает в целом, существует ряд сообщений о проблемах.
Даже автор sendmail.exe рекомендует MSMTP как отличную альтернативу с открытым исходным кодом, и даже blat как более мощный инструмент. Единственный недостаток, который я вижу, состоит в том, что у них есть немного больше опций и использование другого формата конфигурации, который может выглядеть более сложным для настройки.
mail()
?