Проблема нашел скрипт отправки сообщения с контактным имэйл,
так выглядит сама форма отправки
<form action='send_form.php' method='POST'>
<table>
<tr><td>Имя:</td><td><input type='text' name='name' maxlength='64' value='' /></td></tr>
<tr><td>E-mail:</td><td><input type='text' name='email' maxlength='64' value='' /></td></tr>
<tr><td>Тема:</td><td><input type='text' name='subject' maxlength='64' value='' /></td></tr>
<tr><td>Сообщение:</td><td><textarea name='message' rows='5' cols='30'></textarea></td></tr>
<tr><td> </td><td><input type='submit' name='sendMail' value='Отправить' /></td></tr>
</table>
</form>
а так обработчик php, но выходит ошибка в файле send_form.php
<?php
session_start();
$admin = 'name@yandex.ru';
if ( isset( $_POST['sendMail'] ) ) {
$name = substr( $_POST['name'], 0, 64 );
$email = substr( $_POST['email'], 0, 64 );
$subject = substr( $_POST['subject'], 0, 64 );
$message = substr( $_POST['message'], 0, 250 );
$error = '';
if ( empty( $name ) ) $error = $error.'<li>Не заполнено поле "Имя"</li>';
if ( empty( $email ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
if ( !empty( $email ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ) )
$error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
if ( !empty( $error ) ) {
$_SESSION['sendMailForm']['error'] = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
$_SESSION['sendMailForm']['name'] = $name;
$_SESSION['sendMailForm']['email'] = $email;
$_SESSION['sendMailForm']['subject'] = $subject;
$_SESSION['sendMailForm']['message'] = $message;
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
$body = "АВТОР:\r\n".$name."\r\n\r\n";
$body .= "E-MAIL:\r\n".$email."\r\n\r\n";
$body .= "ТЕМА:\r\n".$subject."\r\n\r\n";
$body .= "СООБЩЕНИЕ:\r\n".$message;
$body = quoted_printable_encode( $body );
$theme = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
$headers = "From: ".$_SERVER['SERVER_NAME']." <".$email.">\r\n";
$headers = $headers."Return-path: <".$email.">\r\n";
$headers = $headers."Content-type: text/plain; charset=\"windows-1251\"\r\n";
$headers = $headers."Content-Transfer-Encoding: quoted-printable\r\n\r\n";
if ( mail($admin, $theme, $body, $headers) )
$_SESSION['success'] = true;
else
$_SESSION['success'] = false;
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
function quoted_printable_encode ( $string ) {
// rule #2, #3 (leaves space and tab characters in tact)
$string = preg_replace_callback (
'/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
'quoted_printable_encode_character',
$string
);
$newline = "=\r\n"; // '=' + CRLF (rule #4)
// make sure the splitting of lines does not interfere with escaped characters
// (chunk_split fails here)
$string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
return $string;
}
function quoted_printable_encode_character ( $matches ) {
$character = $matches[0];
return sprintf ( '=%02x', ord ( $character ) );
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Отправить письмо</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<?php
if ( isset( $_SESSION['success'] ) ) {
if ( $_SESSION['success'] )
echo '<p>Письмо успешно отправлено</p>';
else
echo '<p>Ошибка при отправке письма</p>';
unset( $_SESSION['success'] );
}
if ( isset( $_SESSION['sendMailForm'] ) ) {
echo $_SESSION['sendMailForm']['error'];
$name = htmlspecialchars ( $_SESSION['sendMailForm']['name'] );
$email = htmlspecialchars ( $_SESSION['sendMailForm']['email'] );
$subject = htmlspecialchars ( $_SESSION['sendMailForm']['subject'] );
$message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
unset( $_SESSION['sendMailForm'] );
} else {
$name = '';
$email = '';
$subject = '';
$message = '';
}
?>
Спустя 59 секунд (20.06.2011 - 13:21) Aleks-prog написал(а):
Fatal error: Cannot redeclare quoted_printable_encode() in Z:\home\localhost\www\agency\send_form.php on line 60
вот такая ошибка выходит
Спустя 11 минут, 42 секунды (20.06.2011 - 13:33) linker написал(а):
Функция с названием quoted_printable_encode() является стандартной функцией PHP (http://ru2.php.net/manual/en/function.quot...able-encode.php) Просто выбери другое название для свой функции.
Спустя 7 минут, 36 секунд (20.06.2011 - 13:40) Aleks-prog написал(а):
Выбрал, спс просто огромное, с тако йфункцией еще не сталкивался,)))
переименовал, пишет что сообщение отправлено, но на имейл так сообщение и не пришло, с локалхоста денвера не шлет получается?
переименовал, пишет что сообщение отправлено, но на имейл так сообщение и не пришло, с локалхоста денвера не шлет получается?
Спустя 3 минуты, 27 секунд (20.06.2011 - 13:44) linker написал(а):
А чёрт его знает, если настроено на sendmail, то наверное не шлёт. Под винду надо ставить SMTP-сервер и php настраивать.
Спустя 5 секунд (20.06.2011 - 13:44) kristall написал(а):
В Денвере только заглушка sendmail'а. Письма не шлются, а в виде файлов в папку складываются.
Спустя 1 минута, 12 секунд (20.06.2011 - 13:45) Aleks-prog написал(а):
то есть если я в таком видео установлю на сервер, то все норм будет?
Спустя 56 секунд (20.06.2011 - 13:46) linker написал(а):
Будет, если нужно ПО стоит и всё настроено.
Спустя 25 секунд (20.06.2011 - 13:46) Winston написал(а):
Твои письма в папке
Z:\tmp\!sendmail
Z:\tmp\!sendmail
Спустя 34 минуты, 4 секунды (20.06.2011 - 14:20) Aleks-prog написал(а):
при установке сервера SMTP на лок диске в папке interhub появляются подпапки - и одна из них wwwroot это то что нужно? сервер SMTP?
Спустя 8 минут, 28 секунд (20.06.2011 - 14:29) Aleks-prog написал(а):
прочитал сейчас про библиотеку phpMailer, может лучше с помощью нее отпралять или лучше использовать функцию mail?
Спустя 1 час, 11 минут, 52 секунды (20.06.2011 - 15:41) Aleks-prog написал(а):
Вроде нормально отправляет с помощью функции мэйл, только проблема в кодировке, выводит непонятные символы когда открываю почту на мэйр.ру, я поменял кодировку на utf-8, но после замены совсем не стал слать, не поддерживает чтоли такую кодировку мэйл.ру?
Спустя 12 минут, 53 секунды (20.06.2011 - 15:54) linker написал(а):
Как вариант перекодить в win-1251 с помощью iconv(), а потом отсылать. А по хорошему, наличие правильные заголовков должно решать проблему.
Спустя 2 часа, 58 минут, 25 секунд (20.06.2011 - 18:52) Aleks-prog написал(а):
я вот так поменял
на это
вообщем все на utf-8, но бесполезно, может есть еще какие нибудь решения? заголовок вроде нормальный
$theme = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
на это
$theme = '=?utf-8?B?'.base64_encode('Заполнена форма на сайте').'?=';
вообщем все на utf-8, но бесполезно, может есть еще какие нибудь решения? заголовок вроде нормальный
Спустя 3 часа, 1 минута, 25 секунд (20.06.2011 - 21:53) linker написал(а):
Aleks-prog
Я с iPad'ом/iPhon'ом тоже мучился, но так и не нашёл решения.
Я с iPad'ом/iPhon'ом тоже мучился, но так и не нашёл решения.
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
Спустя 17 часов, 11 минут, 1 секунда (21.06.2011 - 15:04) Aleks-prog написал(а):
Может кто знает про кодировку utf-8 и как сделать так, чтобы когда я отсылаю на mail(точка)ru, письмо выводилось в нормальном виде а не в таком)
кому не сложно посмотрите.
ТЕМА:
Aaaaa
СООБЩЕН�Е:
fdhdfhdfhdfhfd
кому не сложно посмотрите.
$subject = '=?utf-8?B?'.base64_encode('Заполнена форма на сайте').'?=';
$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers = "From: =? utf-8?B?".base64_encode(strtoupper($_SERVER['SERVER_NAME']))." <".$email.">\r\n";
$headers .= "Return-path: <".$email.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$multipart = "--".$boundary."\r\n";
$multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
Спустя 4 минуты, 21 секунда (21.06.2011 - 15:09) Winston написал(а):
Крякозябры похожи на win-1251
Попробуй в заголовке charset=\"utf-8\ поменять на charset=\"windows-1251\
или свое сообщение перекодировать
Попробуй в заголовке charset=\"utf-8\ поменять на charset=\"windows-1251\
или свое сообщение перекодировать
iconv('WINDOWS-1251', 'UTF-8', $message);
Спустя 2 часа, 22 минуты, 59 секунд (21.06.2011 - 17:32) Aleks-prog написал(а):
С этими кодировками...
вот что выдал error.log sendmail'а
что может быть неправильного в заголовке, может упустил
вот что выдал error.log sendmail'а
11.06.21 18:19:44 : Message was not accepted -- it contains invalid headers. More specially, 'From:' header must match user you are sending mail from. See http://help.mail.ru/mail-help/mailer/popsmtp for details.<EOL>
$subject = '=?utf-8?B?'.base64_encode('Заполнена форма на сайте').'?=';
$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";
$headers .= "Return-path: <".$email.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$multipart = "--".$boundary."\r\n";
$multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
что может быть неправильного в заголовке, может упустил
Спустя 30 минут, 21 секунда (21.06.2011 - 18:02) Aleks-prog написал(а):
подействовала функция iconv спс PHPprogramer
и всем всем)))
и всем всем)))
Спустя 23 минуты, 51 секунда (21.06.2011 - 18:26) Aleks-prog написал(а):
С кодировкой проблем нет, только почему то то выдает ошбику при оптравке то нет,
11.06.21 18:19:44 : Message was not accepted -- it contains invalid headers. More specially, 'From:' header must match user you are sending mail from. See http://help.mail.ru/mail-help/mailer/popsmtp for details.<EOL>
11.06.21 18:19:44 : Message was not accepted -- it contains invalid headers. More specially, 'From:' header must match user you are sending mail from. See http://help.mail.ru/mail-help/mailer/popsmtp for details.<EOL>
Спустя 5 минут, 44 секунды (21.06.2011 - 18:32) Aleks-prog написал(а):
Поправочка передает только те письма, где указан в поле mail формы ящик mail'овский, например если я напишу aleks@yandex.ru, то не пошлет такое письмо))) че ж такое это творится
Спустя 2 часа, 6 минут, 48 секунд (21.06.2011 - 20:38) Aleks-prog написал(а):
может кто сталкивался с такого рода проблемой, ответьте плизз
Спустя 51 минута, 39 секунд (21.06.2011 - 21:30) Winston написал(а):
Можешь полностью код показать ?
Спустя 12 часов, 36 минут, 8 секунд (22.06.2011 - 10:06) Aleks-prog написал(а):
в первом посте полностью код есть, там только изменены кодировки но с кодировками проблем щас нет,
еще в добавок дам щас настройки файла sendmail.ini
а вот ошибка из error.log
а вот из debug.log сендмэйла как он коннектится
еще в добавок дам щас настройки файла sendmail.ini
; configuration for fake sendmail
; if this file doesn't exist, sendmail.exe will look for the settings in
; the registry, under HKLM\Software\Sendmail
[sendmail]
; you must change mail.mydomain.com to your smtp server,
; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup)
; emails delivered via IIS's pickup directory cause sendmail to
; run quicker, but you won't get error messages back to the calling
; application.
smtp_server=smtp.mail.ru
; smtp port (normally 25)
smtp_port=25
; SMTPS (SSL) support
; auto = use SSL for port 465, otherwise try to use TLS
; ssl = alway use SSL
; tls = always use TLS
; none = never try to use SSL
smtp_ssl=auto
; the default domain for this server will be read from the registry
; this will be appended to email addresses when one isn't provided
; if you want to override the value in the registry, uncomment and modify
default_domain=mail.ru
; log smtp errors to error.log (defaults to same directory as sendmail.exe)
; uncomment to enable logging
error_logfile=error.log
; create debug log as debug.log (defaults to same directory as sendmail.exe)
; uncomment to enable debugging
debug_logfile=debug.log
; if your smtp server requires authentication, modify the following two lines
auth_username=aleksaaa555@mail.ru
auth_password=***
; if your smtp server uses pop3 before smtp authentication, modify the
; following three lines. do not enable unless it is required.
pop3_server=pop.mail.ru
pop3_username=aleksaaa555@mail.ru
pop3_password=***
; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify
; the "From: " header of the message content
force_sender=aleksaaa555@mail.ru
; force the sender to always be the following email address
; this will only affect the "RCTP TO" command, it won't modify
; the "To: " header of the message content
force_recipient=
; sendmail will use your hostname and your default_domain in the ehlo/helo
; smtp greeting. you can manually set the ehlo/helo name if required
hostname=mail.ru
а вот ошибка из error.log
11.06.21 19:26:59 : Message was not accepted -- it contains invalid headers.
More specially, 'From:' header must match user you are sending mail from.
See http://help.mail.ru/mail-help/mailer/popsmtp for details.<EOL>
а вот из debug.log сендмэйла как он коннектится
11.06.21 19:27:16 ** Connecting to smtp.mail.ru:25
11.06.21 19:27:18 ** Connected.
11.06.21 19:27:18 << 220 smtp17.mail.ru ESMTP ready<EOL>
11.06.21 19:27:18 >> EHLO mail.ru<EOL>
11.06.21 19:27:18 << 250-smtp17.mail.ru<EOL>250-SIZE 31457280<EOL>250-8BITMIME<EOL>250 AUTH PLAIN LOGIN<EOL>
11.06.21 19:27:18 ** Authenticating as aleksaaa555@mail.ru
11.06.21 19:27:18 >> AUTH LOGIN<EOL>
11.06.21 19:27:18 << 334 VXNlcm5hbWU6<EOL>
11.06.21 19:27:18 >> YWxla3NhYWE1NTVAbWFpbC5ydQ==<EOL>
11.06.21 19:27:18 << 334 UGFzc3dvcmQ6<EOL>
11.06.21 19:27:18 >> MjFhcHJpbA==<EOL>
11.06.21 19:27:18 << 235 Authentication succeeded<EOL>
11.06.21 19:27:18 >> MAIL FROM: <aleksaaa555@mail.ru><EOL>
11.06.21 19:27:18 << 250 OK<EOL>
11.06.21 19:27:18 >> RCPT TO: <aleksaaa555@mail.ru><EOL>
11.06.21 19:27:18 << 250 Accepted<EOL>
11.06.21 19:27:18 >> DATA<EOL>
11.06.21 19:27:18 << 354 Enter message, ending with "." on a line by itself<EOL>
11.06.21 19:27:18 >> Date: Tue, 21 Jun 2011 19:27:18 +0400<EOL>
11.06.21 19:27:18 >> To: aleksaaa555@mail.ru<EOL>
11.06.21 19:27:18 >> Subject: =?utf-8?B?0JfQsNC/0L7Qu9C90LXQvdCwINGE0L7RgNC80LAg0L3QsCDRgdCw0LnRgtC1?=<EOL>
11.06.21 19:27:18 >> From: LOCALHOST <Aleksaaa555@mail.ru><EOL>
11.06.21 19:27:18 >> Return-path: <Aleksaaa555@mail.ru><EOL>
11.06.21 19:27:18 >> MIME-Version: 1.0<EOL>
11.06.21 19:27:18 >> Content-Type: multipart/mixed; boundary="--db22977d21f7aa9a4681ade9fed8d2d9"<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> ----db22977d21f7aa9a4681ade9fed8d2d9<EOL>
11.06.21 19:27:18 >> Content-type: text/plain; charset="utf-8"<EOL>
11.06.21 19:27:18 >> Content-Transfer-Encoding: quoted-printable<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> =D0=90=D0=92=D0=A2=D0=9E=D0=A0:<EOL>
11.06.21 19:27:18 >> Aleksaaa777<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> E-MAIL:<EOL>
11.06.21 19:27:18 >> Aleksaaa555@mail.ru<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> =D0=A2=D0=95=D0=9C=D0=90:<EOL>
11.06.21 19:27:18 >> ddd<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> =D0=A1=D0=9E=D0=9E=D0=91=D0=A9=D0=95=D0=9D=D0=98=D0=95:<EOL>
11.06.21 19:27:18 >> =D0=B2=D0=B2=D0=B2<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> ----db22977d21f7aa9a4681ade9fed8d2d9--<EOL>
11.06.21 19:27:18 >> <EOL>
11.06.21 19:27:18 >> .<EOL>
11.06.21 19:27:18 << 250 OK id=1QZ2uV-000338-00<EOL>
11.06.21 19:27:18 >> QUIT<EOL>
11.06.21 19:27:19 << 221 smtp17.mail.ru closing connection<EOL>
11.06.21 19:27:19 ** Disconnecting from smtp.mail.ru:25
11.06.21 19:27:19 ** Disconnected.
11.06.21 19:27:19 ** Disconnected.
Спустя 4 минуты, 28 секунд (22.06.2011 - 10:11) Aleks-prog написал(а):
так что сообщения принимает только от тех пользователей кто указал в поле ввода email mailовский почтовый ящик, иначе дисконнектит(если ввел яндекс почту или что либо другое), подскажите решение
Спустя 5 минут, 47 секунд (22.06.2011 - 10:16) Renden написал(а):
Aleks-prog
А зачем ты пользуешься mail.ru?, почему-бы свой почтовый сервер не использовать?
Я думаю что ошибка у тя в этом: From: LOCALHOST. Майл неможет отдуплить че за локалхост![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
11.06.21 19:27:18 >> From: LOCALHOST <Aleksaaa555@mail.ru><EOL>
Но я могу и ошибатся..
А зачем ты пользуешься mail.ru?, почему-бы свой почтовый сервер не использовать?
Я думаю что ошибка у тя в этом: From: LOCALHOST. Майл неможет отдуплить че за локалхост
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
11.06.21 19:27:18 >> From: LOCALHOST <Aleksaaa555@mail.ru><EOL>
Но я могу и ошибатся..
Спустя 5 минут, 52 секунды (22.06.2011 - 10:22) Aleks-prog написал(а):
какой свой почтовый сервер? например, как это можно реализовать?
...
но отправлял же письма он письма если указывал мэйловскую почту, а яндексную не берет
...
но отправлял же письма он письма если указывал мэйловскую почту, а яндексную не берет
Спустя 7 минут, 57 секунд (22.06.2011 - 10:30) Renden написал(а):
Aleks-prog
Ну например Sendmail - это почтовый сервер, можно использовать его для отправки\получения сообщений. Или например Postfix. Почитай об этом в интернете.
...
не знаю как ты отправлял, но
Ну например Sendmail - это почтовый сервер, можно использовать его для отправки\получения сообщений. Или например Postfix. Почитай об этом в интернете.
...
не знаю как ты отправлял, но
Цитата |
11.06.21 19:26:59 : Message was not accepted -- it contains invalid headers. More specially, 'From:' header must match user you are sending mail from. See http://help.mail.ru/mail-help/mailer/popsmtp for details.<EOL> |
это говорит о том что ему однозначно не нравится заголовок поля From.
Спустя 7 минут, 41 секунда (22.06.2011 - 10:38) Aleks-prog написал(а):
Вот как раз когда я ввожу в поле формы например, aaa@mail.ru, то заголовок ему нравится, а когда aaa@yandex.ru то выдает ошибку
Спустя 4 минуты, 1 секунда (22.06.2011 - 10:42) Renden написал(а):
Aleks-prog
Ну так это логично, FROM - в преводе ОТ КОГО, т.е ты пытаешься с mail ру отправить письмо с яндекс.ру.. тебя ничего не смущает? Если нет, то поясню у сервера mail.ru есть имя "mail.ru" и когда имя отправителя совпадает с именем сервера все ок, а когда ты серверу подсовываешь имя "yandex.ru" естественно он ругнется, и скажет тебе "чувак, ты что офигел, я не яндекс, я майл
"
Ну так это логично, FROM - в преводе ОТ КОГО, т.е ты пытаешься с mail ру отправить письмо с яндекс.ру.. тебя ничего не смущает? Если нет, то поясню у сервера mail.ru есть имя "mail.ru" и когда имя отправителя совпадает с именем сервера все ок, а когда ты серверу подсовываешь имя "yandex.ru" естественно он ругнется, и скажет тебе "чувак, ты что офигел, я не яндекс, я майл
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 9 минут, 34 секунды (22.06.2011 - 10:52) Aleks-prog написал(а):
как лучше поступить
Спустя 4 минуты, 16 секунд (22.06.2011 - 10:56) Renden написал(а):
Aleks-prog
$headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";
//укажи жестко свой email
$headers = "From: <aleksaaa555@mail.ru>\r\n";
Спустя 3 минуты, 58 секунд (22.06.2011 - 11:00) Aleks-prog написал(а):
это же не я буду вводить, а человек зашел на сайт, и решил оставить заявку, пишет в поле свой имэйл, опа яндекс точка ру, опа ошибка)))
Спустя 8 минут, 21 секунда (22.06.2011 - 11:08) Renden написал(а):
Aleks-prog
Ну и посылай его ЕМАЙЛ в теле письма, а не в поле ОТ
Ну и посылай его ЕМАЙЛ в теле письма, а не в поле ОТ