Вставить E-mail в php

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
467
Реакции
16
Скрипт отправляет форму на почту, но e-mail берет из базы, из-за этого очень часто дает сбой.
Поправьте пожалуйста код, что бы e-mail можно было менять прямо в коде.
Мне так уже делали пару лет назад, но исходник я потерял.

PHP:
<head>
<?php
// send message
if($_POST[submit]) {
   
    // check for suspected injection strings
    foreach($_POST as $name => $value) {
        filter_string($value);
    }
   
    // check for unexpected newline characters
    foreach($_POST as $name => $value) {
        if($name != 'message') filter_string($value);
    }
   
    $_POST = safe_data($_POST, 'display');
   
    // check for required information
    if(!$_POST[name])
        $error .= 'The <strong>&#1048;&#1084;&#1103;</strong> &#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1087;&#1086;&#1083;&#1103;.<br/>';
    if(!check_email($_POST[email]))
        $error .= 'The <strong>E-mail</strong> &#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1087;&#1086;&#1083;&#1103;.<br/>';
    if(!$_POST[subject])
        $error .= 'The <strong>&#1053;&#1086;&#1084;&#1077;&#1088; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072;</strong> &#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1087;&#1086;&#1083;&#1103;.<br/>';
    if(!$_POST[message])
        $error .= 'The <strong>&#1057;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1077;</strong> &#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077; &#1087;&#1086;&#1083;&#1103;.<br/>';
   
    // send message if no errors have occurred
    if(!$error) {
   
        $message = "&#1047;&#1072;&#1082;&#1072;&#1079; &#1087;&#1088;&#1080;&#1085;&#1103;&#1090;: ".date($conf[dformat].' '.$conf[tformat], time()+(3600*$conf[toffset]))."

Name: $_POST[name]
Email: $_POST[email]
Phone: $_POST[phone]
Adres: $_POST[adres]
kupon: $_POST[kupon]
Metod oplati: $_POST[contact]

$_POST[message]";
       
        // remove any punctuation from name to prevent email errors
        $_POST[name] = ereg_replace("[[:punct:]]", " ", $_POST[name]);
       
        mail($sendto, $_POST[subject], $message, "From:$_POST[name] <$_POST[email]>");
       
        $sent = true;
       
        // create summary of message to display
        $summary = "
        <strong>Sent:</strong>&nbsp;&nbsp;".date($conf[dformat].' '.$conf[tformat], time()+(3600*$conf[toffset]))."
       
        <p>&nbsp;&nbsp;$_POST[name]<br/>
        &nbsp;&nbsp;$_POST[email]<br/>
        &nbsp;&nbsp;$_POST[phone]</p>
        &nbsp;&nbsp;$_POST[adres]<br/>
        &nbsp;&nbsp;$_POST[kupon]</p>
       
        <p>$_POST[contact]</p>
       
        <p>&nbsp;&nbsp;$_POST[subject]</p>
       
        <p><br/>".nl2br($_POST[message])."</p>";
   
    }

}

?>

</head>

<div style='margin-bottom:10px;'>
   


<?php if($sent) { ?>

<div align="center">
    <table border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td><img src="_l.gif" border="0"></td>
            <td><span lang="ru">
            <font face="Arial" style="font-size: 15pt" color="#87AE00">СПАСИБО
            ЗА ВАШУ ПОКУПКУ</font></span></td>
            <td><img src="_r.gif" border="0"></td>
        </tr>
    </table>
</div>

<p align="center"><font face="Arial" color="#333333">Теперь вы можете закрыть
это окно.</font></p>

<div style='margin-top:10px;'>
    <?php echo $summary; ?>
</div>

<?php } else { ?>



<form action='<?php echo $_SERVER[PHP_SELF]; ?>' method='post'>
<div style='margin-top:10px;'>
    <table border='0' cellpadding='0' cellspacing='0'>
   
        <tr>
            <td class='label'>&nbsp;</td>
            <td valign="middle">
            <span lang="ru">
                        <font face="Arial" style="font-weight:700" size="4">
                        ОФОРМЛЕНИЕ ЗАКАЗА</font></span></td>
        </tr>
   
        <tr>
            <td class='label'>&nbsp;</td>
            <td>
            <p align="left"><font face="Arial" size="1" color="#959595">
            <span lang="ru">БУДЬТЕ ВНИМАТЕЛЬНЫ ПРИ ЗАПОЛНЕНИИ ПОЛЕЙ</span></font></td>
        </tr>
   
        <tr>
            <td class='label'>&nbsp;</td>
            <td><font face="Arial"><font color="#333333"><span lang="ru">
            <font style="font-size: 11pt">Имя, Фамилия, Отчесвто</font></span><font style="font-size: 11pt"><label for='name'>:</label><br>
            </font></font><span style="font-size: 11pt"><font color="#333333">
            <input style="border:1px solid #ccc; height:30px" size="60" id='name' name='name' value='<?php echo $_POST[name]; ?>'/><br>
&nbsp;</font></span></font></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><font face="Arial"><font color="#333333"><label for='email'>
            <font style="font-size: 11pt">E<span lang="ru">-</span>mail </font>
            </label><font style="font-size: 11pt"><span lang="ru">адрес</span></font><label for='email'><font style="font-size: 11pt">:<b> </b><br>
            </font>
            </label></font><span style="font-size: 11pt"><font color="#333333"><input style="border:1px solid #ccc; height:30px" style="height:30px;" size="60" id='email' name='email' value='<?php echo $_POST[email]; ?>'/><br>
&nbsp;</font></span></font></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><font face="Arial"><font color="#333333">
            <span lang="ru"><font style="font-size: 11pt">Номера телефона</font></span><font style="font-size: 11pt">:</font><font style="font-size: 11pt"><br>
            </font></font><span style="font-size: 11pt"><font color="#333333">
            <input style="border:1px solid #ccc; height:30px" style="height:30px;" size="60" id='phone' name='phone' value='<?php echo $_POST[phone]; ?>'/><br>
&nbsp;</font></span></font></td>
        </tr>
       
                <tr>
            <td>&nbsp;</td>
            <td><font face="Arial">
            <font style="font-size: 11pt" color="#333333"><span lang="ru">Страна, город, район,
            улица, № дома, № квартиры</span>, <span lang="ru">индекс</span>:<br>
            </font><span style="font-size: 11pt"><font color="#333333">
            <input style="border:1px solid #ccc; height:30px" style="height:30px;" size="60" id='phone' name='adres' value='<?php echo $_POST[adres]; ?>'/><br>
&nbsp;</font></span></font></td>
        </tr>
       
                <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
       
        <tr>
            <td>&nbsp;</td>
            <td><label for="subject"><span lang="ru">
            <font face="Arial" style="font-size: 11pt" color="#333333">Номер
            товара</font></span></label><font face="Arial"><font color="#333333"><label for='subject'><font style="font-size: 11pt">:</font></label><font style="font-size: 11pt"><br>
            </font></font><span style="font-size: 11pt"><font color="#333333">
            <input id='subject' name='subject' value='<?php echo $_POST[subject]; ?>' style="border:1px solid #ccc; height:30px" style="height:30px;" size="60"/><br>
&nbsp;</font></span></font></td>
        </tr>
       
        <tr>
            <td>&nbsp;</td>
            <td><font face="Arial">
            <font style="font-size: 11pt" color="#333333"><span lang="ru">
            Сообщение в свободной форме</span><br>
            </font><span style="font-size: 11pt">
            <font face="Arial" color="#333333">
            <textarea id='message' name='message' style="border:1px solid #ccc; font-family:Arial; color:#808080" rows="5" cols="40" ><?php echo $_POST[message]; ?></textarea><br>
&nbsp;</font></span></font></td>
        </tr>
       
        <tr>
            <td>&nbsp;</td>
            <td>
                <font face="Arial"><font color="#333333">
                <label for="contact"><span lang="ru">
                <font style="font-size: 11pt">Способ оплаты</font></span><font style="font-size: 11pt">:&nbsp;
                </font>
                </label>
                </font><span style="font-size: 11pt"><font color="#333333">
                <select style="border:1px solid #ccc; height:30px" style="height:30px;" id='contact' name='contact'>
                    <option value='&#1041;&#1072;&#1085;&#1082;&#1086;&#1074;&#1089;&#1082;&#1080;&#1081; &#1087;&#1077;&#1088;&#1077;&#1074;&#1086;&#1076;' <?php if($_POST[contact] == '&#1041;&#1072;&#1085;&#1082;&#1086;&#1074;&#1089;&#1082;&#1080;&#1081; &#1087;&#1077;&#1088;&#1077;&#1074;&#1086;&#1076;') echo "selected='selected'"; ?>>
                    Банковский перевод</option>
                    <option value='Western Union' <?php if($_POST[contact] == '&#1053;&#1072;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1099;&#1081; &#1087;&#1083;&#1072;&#1090;&#1105;&#1078;') echo "selected='selected'"; ?>>
                    Western Union</option>
                    <option value='&#1041;&#1083;&#1080;&#1094; &#1087;&#1077;&#1088;&#1077;&#1074;&#1086;&#1076;' <?php if($_POST[contact] == '&#1041;&#1083;&#1080;&#1094; &#1087;&#1077;&#1088;&#1077;&#1074;&#1086;&#1076;') echo "selected='selected'"; ?>>
                    Блиц перевод</option>
                    <option value='&#1053;&#1072;&#1083;&#1080;&#1095;&#1085;&#1099;&#1077;' <?php if($_POST[contact] == '&#1053;&#1072;&#1083;&#1080;&#1095;&#1085;&#1099;&#1077;') echo "selected='selected'"; ?>>
                    Наличные</option>
                    <option value='PayPal' <?php if($_POST[contact] == 'PayPal') echo "selected='selected'"; ?>>
                    PayPal</option>
                </select></font></span></font></td>
        </tr>
       
        <tr>
            <td></td>
            <td><font face="Arial"><span style="font-size: 11pt">
            <input type='submit' name='submit' value='&#1043;&#1054;&#1058;&#1054;&#1042;&#1054;' style="font-size: 10pt; font-weight: bold"/></span></font></td>
        </tr>   
       
    </table>
</div>
<input type='hidden' name='mode' value='<?php echo $_GET[mode]; ?>'/>
<input type='hidden' name='id' value='<?php echo $_GET[id]; ?>'/>
</form>

<?php } ?>
 
$sendto = 'test@example.com';

mail($sendto, $_POST[subject], $message, "From:$_POST[name] <$_POST>");

ps: не видно запроса к базе для $sendto
 
Последнее редактирование:
Запрос скорее всего в другом файле, это целый движок, а этот скрипт отвечает за отправку формы на почту.
заменил
mail($sendto, $_POST[subject], $message, "From:$_POST[name] <$_POST>");
на
$sendto = 'test@example.com';
и сделал так
mail($sendto = 'test@example.com', $_POST[subject], $message, "From:$_POST[name] <$_POST>");

но сообщение почему-то всё равно не приходит..
 
тебе надо было просто вставить строку $sendto = 'test@example.com';
перед
mail($sendto, $_POST[subject], $message, "From:$_POST[name] <$_POST>");
или
mail('test@example.com', $_POST[subject], $message, "From:$_POST[name] <$_POST>");
 
Ооо спасибо!!!
Заработало!
А теперь возможно не совсем по теме, но, приходят вопросики на почту, это можно как-то исправить?
 
Ооо спасибо!!!
Заработало!
А теперь возможно не совсем по теме, но, приходят вопросики на почту, это можно как-то исправить?

Да, нужно изменить кодировку. Копать в сторону php-функции iconv
 
Как пример согласно мануалу (Для просмотра ссылки Войди или Зарегистрируйся)
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
mail($to, $subject, $email, implode("\r\n", $headers));

В $headers ты можешь указать дополнительные параметры. В твоем случае должно быть что-то типа
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers . = "From:$_POST[name] <$_POST>"; // кстати не совсем понятно зачем там $_POST в треугольных скобках (если это массив)
mail('test@example.com', $_POST[subject], $message, $headers );
 
очень странно но с headers почта просто не приходит..
и как кстати прописать имя и почту отправителя?
 
Да, нужно изменить кодировку. Копать в сторону php-функции iconv
Как пример согласно мануалу (Для просмотра ссылки Войди или Зарегистрируйся)
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
mail($to, $subject, $email, implode("\r\n", $headers));

В $headers ты можешь указать дополнительные параметры. В твоем случае должно быть что-то типа
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers . = "From:$_POST[name] <$_POST>"; // кстати не совсем понятно зачем там $_POST в треугольных скобках (если это массив)
mail('test@example.com', $_POST[subject], $message, $headers );
Это не работает всё. Дело в том, что ТЕМА письма исторически считается в кодировке КОИ.
На кракозяблики в теме письма многие не обращают внимания. Потому что тема либо не заполняется, либо заполняется латиницей в 80% случаев. Если получатель читает читает письма в браузере, он скорее всего тоже этого не заметит — все крупные почтовые сервисы в курсе и обрабатывают как надо сами.
Но в разных там Outlook Express, Почта Windows...
В общем чего говорить долго. В своё время достаточно много убил времени, чтобы понять, почему не работает.
Сделал так — письмо кодируем в base64, вот функция Для просмотра ссылки Войди или Зарегистрируйся:
PHP:
function rcms_send_mail($to, $from, $sender, $encoding, $subj, $text) {
$headers = 'From: =?'.$encoding.'?B?' . base64_encode($sender) . '?= <' . $from . ">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= 'Message-ID: <' . md5(uniqid(time())) . "@" . $sender . ">\n";
$headers .= 'Date: ' . gmdate('D, d M Y H:i:s T', time()) . "\n";
$headers .= "Content-type: text/plain; charset={$encoding}\n";
$headers .= "Content-transfer-encoding: 8bit\n";
$headers .= "X-Mailer: ReloadCMS\n";
$headers .= "X-MimeOLE: ReloadCMS\n";
return mail($to, '=?'.$encoding.'?B?' . base64_encode($subj). '?=', $text, $headers);
}
Использование:
PHP:
rcms_send_mail('почта_кому','почта_от_кого','техническая_информация','кодировка','тема','текст_письма');
 
Последнее редактирование:
Ввиду сложностей с кодировками (а также попаданием писем в спам), я в последнее время перешел на отправку писем через smtp gmail.com при помощи класса phpmailer
Могу скинуть рабочий код, если интересует.
 
Назад
Сверху