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

Тема в разделе "Как сделать...", создана пользователем vave, 3 июн 2014.

  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Скрипт отправляет форму на почту, но 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 ?>
     
  2. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    450
    Симпатии:
    434
    $sendto = 'test@example.com';

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

    ps: не видно запроса к базе для $sendto
     
    Последнее редактирование: 4 июн 2014
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Запрос скорее всего в другом файле, это целый движок, а этот скрипт отвечает за отправку формы на почту.
    заменил
    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>");

    но сообщение почему-то всё равно не приходит..
     
  4. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    450
    Симпатии:
    434
    тебе надо было просто вставить строку $sendto = 'test@example.com';
    перед
    mail($sendto, $_POST[subject], $message, "From:$_POST[name] <$_POST>");
    или
    mail('test@example.com', $_POST[subject], $message, "From:$_POST[name] <$_POST>");
     
  5. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Ооо спасибо!!!
    Заработало!
    А теперь возможно не совсем по теме, но, приходят вопросики на почту, это можно как-то исправить?
     
  6. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    616
    Симпатии:
    488
    Да, нужно изменить кодировку. Копать в сторону php-функции iconv
     
  7. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    450
    Симпатии:
    434
    Как пример согласно мануалу (Перейти по ссылке)
    $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 );
     
    Шумадан нравится это.
  8. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    очень странно но с headers почта просто не приходит..
    и как кстати прописать имя и почту отправителя?
     
  9. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Это не работает всё. Дело в том, что ТЕМА письма исторически считается в кодировке КОИ.
    На кракозяблики в теме письма многие не обращают внимания. Потому что тема либо не заполняется, либо заполняется латиницей в 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('почта_кому','почта_от_кого','техническая_информация','кодировка','тема','текст_письма');
     
    Последнее редактирование: 4 июн 2014
  10. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    616
    Симпатии:
    488
    Ввиду сложностей с кодировками (а также попаданием писем в спам), я в последнее время перешел на отправку писем через smtp gmail.com при помощи класса phpmailer
    Могу скинуть рабочий код, если интересует.