Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Perl, PHP: отправка формы на e-mail

Автор: Cheery
Дата сообщения: 15.09.2006 20:23
Old Rocker

Цитата:
А нет ли какого альтернативного решения. Т.к. этот скрипт - письмо, которое генерируется при заказе в интернет-магазине и такие варианты, что не прошло по причине антиспамерской защиты - не подходят. Как можно сделать, чтобы проходило?

при чем тут альтернативное решение? скорее всего там смотрят, есть ли mx запись для домена/IP адреса, с которого шлют. поэтому слать лучше через нормальный, официальный почтовый сервер.
Автор: Old Rocker
Дата сообщения: 15.09.2006 20:29

Цитата:

при чем тут альтернативное решение? скорее всего там смотрят, есть ли mx запись для домена/IP адреса, с которого шлют. поэтому слать лучше через нормальный, официальный почтовый сервер.

Извини пожалуйста, я просто не компетентен в этом вопросе. Что мне необходимо для оргинизации 100% доставки писем. Что-то узнать на хостинге, что-то написать дополнительно. В общем "дайте точку опоры...".
Автор: Cheery
Дата сообщения: 15.09.2006 20:31
Old Rocker

Цитата:
Что-то узнать на хостинге, что-то написать дополнительно. В общем "дайте точку опоры...".

1) правильно указывать обратный адрес
2) для него должна быть mx запись
3) для хоста, с которого шлется, она тоже должна быть, чтобы было понятно, что это официальный почтовик.

Автор: Old Rocker
Дата сообщения: 15.09.2006 20:49

Цитата:
1) правильно указывать обратный адрес
2) для него должна быть mx запись
3) для хоста, с которого шлется, она тоже должна быть, чтобы было понятно, что это официальный почтовик.

И снова извини, но не по одному пункту нет ясного понимания!
1. Какой адрес является правильным, производная от домена, с которого отсылается письмо?
2. Для этого нужно обратиться к хостерам, чтобы они ее сделали? Как это организованно технически?
3. А это как организовать?

В общем, есть домен www.domain.ru , есть на нем почта shop@domain.ru.

Значит нужно указывать как обратный адрес именно shop@domain.ru (для которого есть запись MX, она появляется если через Cpanel, например, просто добавить адрес?), а не shop@domain123.ru (для которого в общем тоже есть MX запись)?

Чтобы для хоста была MX запись нужно обратиться к хостеру и сказать чтобы ее сделали?

Я просто не совсем в курсе что такое MX запись и как она связана с хостом...
Автор: Cheery
Дата сообщения: 15.09.2006 20:52
Old Rocker

Цитата:
Какой адрес является правильным, производная от домена, с которого отсылается письмо?

ок.. просто может быть произвольный адрес, который не резолвится

Цитата:
Для этого нужно обратиться к хостерам, чтобы они ее сделали? Как это организованно технически?

да, для этого нужно обратиться к тем, у кого есть доступ к доменным записям в DNS

Цитата:
А это как организовать?

пред. пункт


Цитата:
Значит нужно указывать как обратный адрес именно shop@domain.ru (для которого есть запись MX, она появляется если через Cpanel, например, просто добавить адрес?), а не shop@domain123.ru (для которого в общем тоже есть MX запись)?

желательно, так как могут проверять и это.

Цитата:
Чтобы для хоста была MX запись нужно обратиться к хостеру и сказать чтобы ее сделали?

да. и дальнейшие вещи выходят за рамки данной темы.
Автор: Old Rocker
Дата сообщения: 15.09.2006 21:37
По порядку:
1. Домен - domain.ru
2. MX запись на domain.ru - domain.ru
3. mail@domain.ru - существует, создан и имеет свою MX запись я полагаю.


Код:
$to = 'mail@rambler.ru';
$subject = 'ТЕСТ';
$mes = 'Сообщение';
$fullname = 'Admin';
$useremail = 'mail@domain.ru';

$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: \"$fullname\" <$useremail>\r\n";
$headers .= "Reply-To: \"$fullname\" <$useremail>\r\n";
$headers .= "Content-type: text/plain; charset=windows-1251\r\n";

return mail($to, $subject, $mes, $headers);
Автор: Cheery
Дата сообщения: 15.09.2006 21:38
Old Rocker
домен приведи.
и в новую тему, плиз.. не нужно эту захламлять.
ps: самое простое решение, поставить в качестве обратного мыло, которое можно прочесть. и смотри отлупы.
или же смотри логи почтовика (sendmail)
Автор: ArchangelNN
Дата сообщения: 20.09.2006 23:31
Знатоки, помогите!
Де не рассердится на меня модератор, надеюсь на Вас и уповаю.
Трабла в следующем - необходимо создать форму, где пользователь пишет сообщение и выбирает форму оплаты через радио батоны. Затем скрипт отсылает письмо админу и пользователю с подробностями оплаты только по выбранному способу оплаты.
Модераторы, не сочтите за рекламу, такой скрипт есть на prostosite.ru/course/ . Написал такой скрипт:
<HTML>
<HEAD>
<TITLE>Radio Button Test</TITLE>
</BODY>
<?php
$adresat = "admin@admin.ru";
$status = "Администратор";
$msg = "Спасибо, Ваше сообщение было отправлено и мы обязательно вам ответим! <br>Нажмите <B><a href=\"mail2.php\"> здесь</a></B> для возврата.";
$you = "$status. E-mail:&nbsp;$adresat";
if ($submit) {
if(eregi("^[a-zA-Z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$",$email))
{ if(empty($name)) echo "Введите ваше имя"; else {
mail("$adresat", "Сообщение с сайта ..", "От: $name\nАдрес:
$email\nСообщение:\n\n$message");
//Здесь хочу вставить if в зависимости от выбора радиобатона
mail("$email", "Сообщение с сайта СтроимСайт", "От: Администрация
&quot;СтроимСайт&quot;\ne-mail: $adresat\n\nСообщение:\n\n
Задравствуйте, $name! Вы оформили форму заказа .. ");
echo "<b>$msg<b>\n";}}
else {
echo "E-mail неправильно введен или содержит недопустимые символы. Пожалуйста вернитесь и заполните все поля правильно";}} else {?>
<form action="<? echo $PHP_SELF?>" method=POST>
<table width=100%><tr><td align="left">Ваше имя :</td>
<td align="left"><input type=text name=name size=25></td></tr>
<tr><td align="left">Ваш e-mail: </td>
<td align="left"><input type=text name=email size=25></td></tr>
<tr><td align="left">Выберите способ оплаты:</td><td align="left">
<table border="0" width="100%" cellpadding="0" style="border-collapse: collapse" id="table1"><tr>
<td width="0%" height="56">
<input type="radio" value="Сбербанк России" name="rad" onclick=0 checked>Сбербанк России</td>
<td width="66%" height="56">
<img border="0" src="images/sb.jpg" width="160" height="41"></td>
</tr><tr><td width="0%" height="56">
<input type="radio" name="rad" value="Система WebMoney" onclick=0>WebMoney</td>
<td width="66%" height="56">
<img border="0" src="images/wm.jpg" width="160" height="49"></td>
</tr><tr>
<td width="0%" height="60">
<input type="radio" name="rad" value="Система Яндекс.Деньги" onclick=0><span lang="ru">Яндекс.Деньги</span></td>
<td width="66%" height="60">
<img border="0" src="images/yd.jpg" width="160" height="36"></td>
</tr><tr>
<td width="0%"><span lang="ru">
<input type="radio" name="rad" value="Система &quot;Контакт&quot;" onclick=0>Система &quot;Контакт&quot;</span></td>
<td width="66%">
<img border="0" src="images/cm.jpg" width="160" height="79"></td>
</tr></table></td></tr><tr><td align="left">Какой курс Вы желаете пройти?</td>
<td align="left">&nbsp;</td></tr><tr>
<td align="left">Откуда Вы узнали о нашем проекте?:</td>
<td align="left"><textarea cols=40 rows=3 name=message></textarea></td>
</tr><tr><td align="left">Примечание:</td>
<td align="left"><textarea cols=40 rows=3 name=message0></textarea></td>
</tr></table><input name="submit" type=submit value="Отправить">
</form><?php} ?></HTML>

Так вот вопрос: как сделать определение на php включенного радио батона, как привязать к этому if, чтобы отсылалось только информация о выбранном способе оплаты.
Заранее огромное спасибо!
Автор: 6epcepk
Дата сообщения: 20.09.2006 23:34

Код: $a_value = array(1 => "...",
2 => "...);

echo $a_value[$_POST['rad']]
Автор: ArchangelNN
Дата сообщения: 20.09.2006 23:44
Если бы знать пхп получше, а книжки юзать времени нету, не подскажите по скрипту куда вставлять и что писать?
Автор: Cheery
Дата сообщения: 20.09.2006 23:49
ArchangelNN
ну написали же.. добавить значение в отсылаемый текст..
сначала создаешь массив, в котором связываешь конкретный текст с конкретным значением кнопки в html коде (проще просто весь текст пихать в значение).
потом при генерации сообщения просто добавляешь этот текст в тот, что отсылается. и все.
Автор: ArchangelNN
Дата сообщения: 21.09.2006 13:18
6epcepk

Цитата:
Код:$a_value = array(1 => "...",
2 => "...);

echo $a_value[$_POST['rad']]


Надеюсь алгоритм понятен.

Спасибо огромедное, разобрался!
Вверху подставил $a_value = array(1 => "1", 2 => "2", 3 => "3", 4 => "4");
Чтоб глюков не возникало все формы оплат заменил на 1, 2, 3, 4 соответственно.
if сделал так:
if ($a_value[$_POST['rad']]=='1'){тра-ля-ля, если выбран первый, тогда отслылаем пользователю, что он выбрал такую-то первую форму оплаты}
Всем глубокое спасибо!
Автор: 6epcepk
Дата сообщения: 21.09.2006 14:33
ArchangelNN
Оператор условия тут не требуется.

1. Формируем массив со значениями:

Код: $a_value = array(1 => "Наличный расчет", 2 => "Банковский перевод", 3 => "Кредитная карта", 4 => "Электронный счет");
Автор: noki
Дата сообщения: 01.11.2006 12:54
Всем привет!!! У меня проблема. Есть форма, все поля с нее нормально отпраляются кроме поля ФАЙЛ, файл не приходит. Подскажите в чем может быть проблема...
Автор: Brodyaga
Дата сообщения: 01.11.2006 13:03
Звезды не так стали, рак на горе не свистнул, был четверг а дождя не было, да мало ли что.

Может быть код предоставите?
Автор: noki
Дата сообщения: 01.11.2006 13:36
[more]<?

function checkmail($str)
{
$badchars = "[ ]+| |\+|=|[|]|{|}|`|\(|\)|,|;|:|!|<|>|%|\*|/|'|\"|~|\?|#|\\$|\\&|\\^|www[.]";

return (eregi($badchars,$str));
}

function headerconv ($str)
{
$str = trim($str);
$str = stripslashes($str);

return $str;
}

function htmlconv ($str)
{

if (get_magic_quotes_gpc):

$str = stripslashes($str);

endif;

$str = str_replace("\"", "&quot;", $str);
$str = str_replace("<","&lt;",$str);
$str = str_replace(">","&gt;",$str);
$str = str_replace("\r\n", "\n", $str);
$str = str_replace("\r", "\n", $str);
$str = str_replace("\n", "<br>", $str);
$str = str_replace("\$", "&#36;", $str);
$str = str_replace("|", "/", $str);
$str = eregi_replace("(<br>*){2,}","<br><br>",$str);
$str = eregi_replace("[ ]{2,}", " ", $str);
$str = trim($str);

return $str;
}

include ("config.inc");

if ($config[inc_headers] == "on"):

include ($config[header]);

endif;

if ($action != "send"):

include ("./form.inc");

else:

if ($form[familia] == "" || $form[name] == "" || $form[otchestvo] == "" || $form[day] == "" || $form[month] == "" || $form[year] == "" || $form[cityday] == "" || $form[stranaday] == "" || $form[pol] == "" || $form[educate] == "" || $form[foto] == "" || $form[pochadress] == "" || $form[email] == "" || $form[semia] == "" || $form[deti] == ""):

$errorheader = "<p class=\"T\"><b>СООБЩЕНИЕ НЕ ОТПРАВЛЕНО!</b></p>";
$errormessage = "<p class=\"T\">Не были заполнены следующие обязательные поля:</p>";
$errormessage .= "<ol>";

<-------------------------------------------------->
         if ($form[foto] == ""): $errormessage .= "<li><p class=\"T\">Ваша Фотография отсутствует</p></li>"; endif;
         <------------------------------->

endif;
        

$errormessage .= "</ol>";
$errormessage .= "<p class=\"T\">Пожалуйста, вернитесь назад и попробуйте снова.</p>";

include ("./error.inc");

else:

$header[familia] = headerconv($form[familia]);
$header[name] = headerconv($form[name]);

<---------------------------------->
     $form[foto] = htmlconv($form[foto]);
    <--------------------------------------->

if (!(eregi("([a-z0-9_\-\.])+@([a-z0-9_\-\.])+\.([a-z0-9_\-\.])+",$form[email])) || checkmail($form[email])):

$errorheader = "<p class=\"T\"><b>СООБЩЕНИЕ НЕ ОТПРАВЛЕНО!</b></p>";
$errormessage = "<p class=\"T\">Введенный вами адрес E-Mail (".$form[email].") содержит
недопустимые символы или имеет неправильный формат.</p>";
$errormessage .= "<p class=\"T\">Пожалуйста, вернитесь назад и попробуйте снова.</p>";

include ("./error.inc");

else:

$contents = file($config[recip_file]);
$numlines = sizeof($contents);

for ($i=0;$i<$numlines;$i++) {
$contents[$i] = explode("|",$contents[$i]);
}

$form[send_to] = $contents[$form[recip]-1][1]."<".$contents[$form[recip]-1][0].">";

if ($form[sendcopy] == "on"):

$form[send_to] = $form[send_to] . ", ";
$form[send_to] .= $header[name]."<".$form[email].">";

endif;

$sendmessage = "<html>
<head>
<title>".$form[familia]."</title>
</head>
<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">
<tr>
<td><font face=\"Verdana\" size=\"2\">".$form[familia]."<br>".$form[name]."<br>".$form[otchestvo]."<br>".$form[day]."<br>".$form[month]."<br>".$form[year]."<br>".$form[cityday]."<br>".$form[stranaday]."<br>".$form[stranagoo]."<br>".$form[pol]."<br>".$form[educate]."<br>".$form[foto]."<br>".$form[pochadress]."<br>".$form[phone]."<br>".$form[email]."<br>".$form[semia]."<br>".$form[deti]."<br>".$form[message];

if ($config[features] == "on"):

$sendmessage .= "<br><br>----------------------
<br>Обозреватель: $HTTP_USER_AGENT
<br>Адрес IP: $REMOTE_ADDR";
                                    
                     endif;

$sendmessage .= "</font></td>
</tr>
</table>
</body>
</html>";

$headers = "MIME-Version: 1.0\n";
$headers .= "From: ".$header[name]."<".$form[email].">\n";
$headers .= "Content-Type: text/html; charset=".$config[charset]."\n";
$headers .= "X-Mailer: PHP/" . phpversion();

{
set_time_limit(30);

if (mail($form[send_to], $header[familia], $sendmessage, $headers)):

$okheader = "<p class=\"T\"><b>СООБЩЕНИЕ ОТПРАВЛЕНО!</b></p>";
$okmessage = "<p class=\"T\">Спасибо, ".$form[name].", ваше сообщение успешно отправлено.
Мы постараемся вам ответить в течение нескольких часов.";

if ($sendcopy == "on"):

$okmessage .= "<p class=\"T\">На ваш E-Mail (".$form[email].") послана копия письма. Через
несколько минут вы можете проверить свой почтовый ящик, чтобы убедиться, что отправка прошла успешно.</p>";

endif;

include ("./ok.inc");

else:

$errorheader = "<p class=\"T\"><b>СООБЩЕНИЕ НЕ ОТПРАВЛЕНО!</b></p>";
$errormessage = "<p class=\"T\">Произошла непредвиденная ошибка при попытке
отправить сообщение.</p>";
$errormessage .= "<p class=\"T\">Пожалуйста, вернитесь назад и попробуйте снова.
Если ошибка будет повторяться, обратитесь к <b><a href=\"mailto:".$config[admin_email]."\">Вебмастеру</a></b>.</p>";

include ("./error.inc");

endif;
}
endif;

endif;

endif;

if ($config[inc_headers] == "on"):

include ($config[footer]);

endif;

?>[/more]


Добавлено:
Говорят что у меня не верно написана функция прикрепления файлов. Вот и она: Mail_Mime::addAttachment() -- add attachment . Тока я так и не понял куда же мне ее приткнуть???

Добавлено:
Я так пониаю проблеиа в этом операторе$form[foto] = htmlconv($form[foto]); и в этом <br>".$form[foto].". Только что же вместо них надо вставить???
Автор: Cheery
Дата сообщения: 01.11.2006 19:21
noki

Цитата:
Тока я так и не понял куда же мне ее приткнуть???

Читаем темы
http://forum.ru-board.com/forum.cgi?action=filter&forum=31&filterby=topictitle&word=%E0%F2%F2%E0%F7
Автор: noki
Дата сообщения: 02.11.2006 01:57
Спасибо, Cheery!!! Ща начитаюсь и вернусь с любым результом.
Автор: 4eszxdr5
Дата сообщения: 09.11.2006 12:12
Сразу несколько вопросов.
1) В счетчике статистики такая запись: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)". Я так понимаю это бот (робот) поисковика? А как сделать, чтобы исключить ведение статистики по заходам роботов, ботов, сканеров? (скрипт на перл).

2) Пока ещё не сделал, но... Хочу сделать отправку файла статистики на е-майл. Придётся ведь вставлять адрес электронной почты, откуда-то брать, а он должен лежать закодированным, чтобы не попал спамерам. Как организовать такое скрытие, кодирование, вставку адреса?
Автор: Cheery
Дата сообщения: 09.11.2006 18:34
4eszxdr5

Цитата:
1) В счетчике статистики такая запись: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)". Я так понимаю это бот (робот) поисковика? А как сделать, чтобы исключить ведение статистики по заходам роботов, ботов, сканеров? (скрипт на перл).

какое отношение имеет этот вопрос к данной теме?


Цитата:
Пока ещё не сделал, но... Хочу сделать отправку файла статистики на е-майл. Придётся ведь вставлять адрес электронной почты, откуда-то брать, а он должен лежать закодированным, чтобы не попал спамерам. Как организовать такое скрытие, кодирование, вставку адреса?

млин.. делаешь на php? кто тебя заставляет адрес писать в коде html страницы?
Автор: 4eszxdr5
Дата сообщения: 10.11.2006 09:38
Делаю на перле. И спрашиваю про то, если в коде перла (в файле с расширением .cgi) лежит е-майл, то его можно сканером выцепить или нет?
Если можно, то как тогда скрыть адрес?
Конкатенация поможет?
Автор: Cheery
Дата сообщения: 10.11.2006 18:39
4eszxdr5

Цитата:
И спрашиваю про то, если в коде перла (в файле с расширением .cgi) лежит е-майл, то его можно сканером выцепить или нет?

сам подумай - каким образом? после обработки интерпретатором выдается что, код скрипта? только если будут проблемы с настройками сервера и он НЕ будет обрабатывать cgi файлы
Автор: Borodino
Дата сообщения: 30.11.2006 21:19

Код: <?PHP
$ToEmail = "Брейль Андрей<pite20@gmx.de>";
$Subject = "PHP ist toll Хорошо";
$Message = "Hallo Claudia!
sender war gerade auf deinen PHP-Seiten und
wollte dir sagen, dass sie ihm/ihr sehr gut
gefallen.
Wenn du mit ihm/ihr Kontakt aufnehmen
moechtest, benutze bitte die Adresse sendermail.
Хорошо";
$Headers = "From: Breil Andreas<breil-an@mail.ru>\n";
$Headers .= "Content-Type: text/html; charset=UTF-8\n";
$Headers .="Content-Transfer-Encoding: 8bit\n";
mail($ToEmail, $Subject, $Message, $Headers);
?>
Автор: Cheery
Дата сообщения: 30.11.2006 21:49
Borodino

Цитата:
а отправитель и получатель нет.

а сам php скрипт у тебя тоже в UTF?? чтобы брать текстовую строку из переменной и ее использовать.
Автор: Borodino
Дата сообщения: 30.11.2006 21:53

Цитата:
а сам php скрипт у тебя тоже в UTF??

файл сохранён в UTF-8.
Автор: Borodino
Дата сообщения: 01.12.2006 07:17
вот что мне ответили на другом форуме

$ToEmail = "=?utf-8?B?" . base64_encode("Брейль Андрей") . "?= <pite20@gmx.de>";


Код: <?PHP
//$ToEmail = "Breil Andreas<pite20@gmx.de>";
$ToEmail = "=?utf-8?B?" . base64_encode("Брейль Андрей") . "?= <pite20@gmx.de>";
$Subject = "PHP ist toll Хорошо";
$Message = "Hallo Claudia!
sender war gerade auf deinen PHP-Seiten und
wollte dir sagen, dass sie ihm/ihr sehr gut
gefallen.
Wenn du mit ihm/ihr Kontakt aufnehmen
moechtest, benutze bitte die Adresse sendermail.
Хорошо";
//$Headers = "From: Breil Andreas<breil-andreas@mail.ru>\r\n";
$Headers = "From: =?utf-8?B?" . base64_encode("Брейль Андрюха") . "?= <breil-an@mail.ru>\r\n";
$Headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$Headers .="Content-Transfer-Encoding: 8bit\r\n";
mail($ToEmail, $Subject, $Message, $Headers);
?>
Автор: Borodino
Дата сообщения: 01.12.2006 18:10
Вот рабочий код, отправляет в кодировке UTF-8.
P.S.: чтобы легче было разобраться в коде я его немножко изменил. сам PHP файл должен быть сохранён в UTF-8.


Код: <?PHP
$FromName = "Брейль Андрюха";
$FromEmail = "breil-an@mail.ru";
$ToName = "Брейль Андрей";
$ToEmail = "pite20@gmx.de";
$Subject = "PHP ist toll Хорошо";
$Message = "Hallo Claudia! Хорошо";

$From = "=?utf-8?B?" . base64_encode($FromName) . "?= <" . $FromEmail . ">";
$To = "=?utf-8?B?" . base64_encode($ToName) . "?= <" . $ToEmail . ">";
$Headers = "From: " . $From . "\r\n";
$Headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$Headers .= "Content-Transfer-Encoding: 8bit\r\n";

mail($To, $Subject, $Message, $Headers);
?>
Автор: sTa1kEr
Дата сообщения: 01.12.2006 23:21
Borodino

Цитата:
$From = "=?utf-8?B?" . base64_encode($FromName) . "?= <" . $FromEmail . ">";

Вместо этого можно воспользоватся mb_encode_mimeheader, тогда можно будет сохранять в любой кодировке, да и отправлять тоже в любой.
Автор: Borodino
Дата сообщения: 03.12.2006 04:44
sTa1kEr

Цитата:
mb_encode_mimeheader,

не идёт в UTF-8

Добавлено:
приведи пожалуйста пример.
Автор: Cheery
Дата сообщения: 03.12.2006 05:03
Borodino
http://www.advogato.org/article/812.html
пример.. именно через mb_encode_mimeheader

Страницы: 1234567891011121314151617

Предыдущая тема: Как сделать так чтобы в MySQL грузились тяжёлые картинки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.