За последние 24 часа нас посетили 71967 программистов и 1649 роботов. Сейчас ищут 925 программистов ...

Проблема с письмом.

Тема в разделе "PHP для новичков", создана пользователем Danil005, 10 июл 2017.

  1. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Я все равно не могу найти причину, как пользоваться этим мейлером... Как поменять кодировку, ничего не работает.
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, Вы пытаетесь спорить, но совершенно не вчитываетесь в мои сообщения, а вырываете отдельные фразы.
    Я говорю о том, что человек, написавший этот скрипт не осилил бы phpmailer.
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    @Danil005
    PHP:
    1. $mail->CharSet = 'UTF-8';
    @Maputo где там про не осилил? И с каких пор это вообще стало аргументом? У меня был таск на обработку почты, много писем, тысячи их, валятся на один бедный почтовый ящик, при чем частенько от 1с-ников и пхпшников, которые ниасилили. Дык вот, не считая пакета, умеющего разгребать почту сделанную культяпками, что у этих людей вместо рук, пришлось ещё сверху костылей добавить, потому что неисповедимы пути пхпшника формирующего письмо с вложением вручную. Ненависть.
     
    Fell-x27 нравится это.
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, у Вас другие задачи.
    Я писал:
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Нет. Надо делать правильно, либо стараться делать правильно, либо не делать вообще. Вы ж не пойдете к врачу который неосилил? Почему тут должно быть по другому?
     
    Fell-x27 нравится это.
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, тут никто не знает как правильно ;) Все делают вид, что знают. Но правильного пути просто не существует. Если Вы не согласитесь - то мы разведем демагогию :D А мне надоедает это очень. Последний ход за Вами и я умолкаю)
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это не магия и не поиск альтернативного пути. Почте уже не один десяток лет, есть ряд rfc где описано всё от и до. Демагогия же возникает ровно в тот момент, когда за аргументы начинают считать свои домыслы. Собсно, у меня тоже всё.
     
    Maputo нравится это.
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    О господи, философ от мира веб-разработки. Что значит "правильного пути не существует"? С чего ты это взял? Это все волшебство и вопрос веры чтоли?

    Я-то наивный, думал, что правильный путь это вопрос соблюдения стандартов и чтения документации. А сервер почтовый ты как настраивать будешь? А когда гугл тебя нахрен пошлет потому, что у тебя ни DKIM, ни даже сопливого реверс-DNS нет, ты тоже будешь им в поддержку писать, что они ничего не понимают, и правильного пути не существует?
    --- Добавлено ---
    А можно не вводить. А для отправки почты вообще почтовый ящик иметь не обязательно и аккаунт может не существовать - достаточно чтобы домен почты совпадал с доменом отправителя и, желательно, чтобы в DNS была соответствующая запись.

    Но чтоб это знать, надо же хоть чуть чуть разобраться в предмете, который собираешься обсуждать с видом знатока.

    Не обращал внимание, что почту слать умеет любая сиране джумла? Даже с шаред хостингов. Принимать, правда, не умеет, но шлет без проблем. При этом отдельный почтовый аккаунт не просит создавать. И пароли указывать. Мистика, да и только. Или нет...
     
  9. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Не помогает...
    --- Добавлено ---
    А не может ли это происходить из-за того, что я делаю include("mail.mail.php), а внутри сам шаблон в переменной $messages, ну и после include я произвожу все эти манипуляции с отправкой?
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Покажи код, как ты мейлером отправку делаешь?
    И в какой кодировке у тебя текст на самом деле? А то может у тебя там таки win-1251, например, а мы в UTF-8 усиленно пихаем ее.
     
  11. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    Ничёси холивар из-за неправильной кодировки письма попер...
    ТС, в гугле справа менюшка-гамбургер, посмотри заголовки, которые приходят на почту.
     
  12. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    @Fell-x27 Вообщем что я делаю. Я воспользовался Mail-классом, который вы порекомендовали, по-изучал его функции и т.д.
    Впрочем говоря, я прикрепил функцию в свой класс module:
    PHP:
    1. public function __mail($to, $subject, $messages, $settings='') {
    2.       $MAIL=$settings;
    3.       $this->mail->CharSet='UTF-8';
    4.       $this->mail->setFrom('no-reley@vixed.ru', 'Vixed.Ru');
    5.       $this->mail->addAddress($to);
    6.       $this->mail->isHTML(true);
    7.       $this->mail->Subject=$subject;
    8.       $this->mail->Body=$messages;
    9.  
    10.       $this->mail->send();
    11.     }
    А с Ajax стороны выполнял эту функцию:
    PHP:
    1. <?public function __Ajax_Forgot($email) {
    2.         if( empty($email) ) $error="Вы должны ввести Email-адрес."; else $db=$this->module->db->getAll("SELECT * FROM ?n WHERE ?n=?s", 'users', 'email', $email);
    3.         if( empty($db) ) $error="Такой Email-адрес не зарегистрирован у нас.";
    4.    
    5.  
    6.       if( !$error ) {
    7.       $hash=strtoupper(md5(rand(0,10000)));
    8.       $URL='https://vixed.ru/';
    9.         $MAIL=[
    10.         'username'=>$db[0]['user'],
    11.         'hash'=>$hash
    12.           ];
    13.        //Здесь у меня прикручен еще один файл:
    14.        include($_SERVER['DOCUMENT_ROOT'].'/system/mails/forgot.mail.php');
    15.         $this->module->db->query("INSERT INTO ?n(?n,?n,?n,?n) VALUES(?s,?s,?s,?s)", 'change_password_profile', 'user', 'sign', 'date', 'type', $db[0]['user'], $hash, $this->module->__unix(), 'forgot');
    16.           $this->module->__mail($email, 'Восстановление пароля', $message, $setting);
    17.         echo json_encode(['info'=>'На вашу почту был выслан ключ, по которому необходимо пройти.', 'type'=>'success']);
    18.         } else echo json_encode(['info'=>$error, 'type'=>'error']);
    И наконец сам файл forgot.mail.php:
    PHP:
    1. <?
    2. $message='
    3. <div style="background: #E7E7E7;">
    4. <div style=\'
    5. font-family: "Roboto", sans-serif;
    6. -webkit-border-radius: 0;
    7.  -moz-border-radius: 0;
    8.  -ms-border-radius: 0;
    9.  border-radius: 0;
    10.  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
    11.  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
    12.  -ms-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
    13.  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3);
    14.  border: none;
    15.  position: fixed;
    16.  top: 0;
    17.  left: 0;
    18.  z-index: 12;
    19.  width: 100%;
    20.  background-color: #4CAF50;
    21.  height: 70px;
    22.  \'>
    23.    <div style="
    24.    padding: 10px 7px;
    25.    ">
    26.    <a style="
    27.    white-space: nowrap;
    28.    -ms-text-overflow: ellipsis;
    29.    -o-text-overflow: ellipsis;
    30.    text-overflow: ellipsis;
    31.    overflow: hidden;
    32.    float: left;
    33.    padding: 10px 20px;
    34.    font-size: 22px;
    35.    color: #fff;
    36.    margin-right: 10px;
    37.    margin-left: -10px;
    38.    margin-top: 4px;
    39.    ">Vixed.Ru - фриланс площадка</a>
    40.    </div>
    41.  
    42.  
    43.    </div>
    44.  
    45. <br>
    46.  
    47. <div style="width: 100%;
    48.    height: 100%;
    49.    position: absolute;
    50.    top: 0;
    51.    left: 0;
    52.    overflow: auto;">
    53.    <div style="width: 600px;
    54.    height: 250px;
    55.    position: absolute;
    56.    top: 0;
    57.    right: 0;
    58.    bottom: 0;
    59.    left: 0;
    60.    margin: auto;">
    61. <div style="width: 100%;">
    62. <p align="center">
    63. Вы подали заявку на изменение пароля. Для продолжения необходимо нажать на кнопку снизу.
    64. После чего вы сможете сменить пароль.
    65. </p>
    66. </div>
    67. <p align="center">
    68. <a href="'.$URL.'forgot?user='.$MAIL[username].'&hash='.$MAIL[hash].'&type_pass=forgot&ssl=1" style="    background-color:#4CAF50;
    69.    border-radius: 4px;
    70.    color: #ffffff;
    71.    display: inline-block;
    72.    font-family: sans-serif;
    73.    font-size: 13px;
    74.    font-weight: bold;
    75.    line-height: 35px;text-align: center;
    76.    text-decoration: none;
    77.    width: 320px;
    78.    -webkit-text-size-adjust:none;
    79.    cursor: pointer;
    80.  ">Сменить пароль</a>
    81. </div>
    82. </div>
    83.  
    84. </div>';
    А что касаемо кодировки, то весь проект написан на UTF8.
     
    #37 Danil005, 11 июл 2017
    Последнее редактирование: 11 июл 2017
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Окей, вечером гляну. А пока присоединяюсь к предыдущему оратору - проверь заголовки письма принятого.
     
  14. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Смотрели?
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Сорь, дел было дофигищща :(
    А ты заголовки проверил? Сравнил с заголовками нормальных писем?
     
  16. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Они по всей видимости нормальные. Потому что отправляя без include, в нормальной кодировке отображается.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хм, наверное так и есть. Значит не делай инклуд прямо в письмо.

    Чтобы вытащить шаблон наружу можно сделать так:
    1) В шаблоне написать return, а дальше уже содержимое текстом.
    2) Перед отправкой письма сделать $data = include(шаблон);
    3) В переменной $data будет содержимое из инклуда.
    4) Вставляешь ее в письмо.

    return в include и возвращение инклудом этого значения, как если бы просто была вызвана функция это не хак, не костыль и не индусская лажа, это документированная фича.
     
    Danil005 нравится это.
  18. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    У меня так система классов сделана)
    Спасибо, завтра попробую.
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А вот это зря. Для классов есть autoload. И никаких ретурнов из инклуда быть не должно по-хорошему. Опиши архитектуру своего решения подробнее.
     
  20. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    @Fell-x27
    PHP:
    1.  
    2. require(__DIR__ . '/MFVbase.php');
    3. class MFV extends MFV_class\MFVbase {}
    4. $classes=require(__DIR__ . '/classes.php');
    5. MFV::classMap($classes);
    PHP:
    1. namespace MFV_class;
    2.  
    3. define("PATH_MFV", __DIR__);
    4.  
    5. class MFVbase {
    6.     public $classes=[];
    7.  
    8.     public function classMap($classes) {
    9.         foreach ($classes as $key => $value) {
    10.             include($value);
    11.         }
    12.     }
    13.  
    14.     public function xss() {
    15.       $xss = new \voku\helper\AntiXSS();
    16.       $xss_clean=$xss->xss_clean($str);
    17.       return $xss_clean;
    18.     }
    19. }
    classes.php
    PHP:
    1. return [
    2.  
    3.   'mfv\base\MySQL'=> PATH_MFV . '/base/mysql.class.php',
    4.   'mfv\web\Application'=> PATH_MFV . '/web/Application.php',
    5.   'mfv\web\Html'=> PATH_MFV . '/web/Html.php',
    6.   'mfv\web\AdditionalVar'=> PATH_MFV . '/web/AdditionalVar.php',
    7.  
    8. ];
     
    #45 Danil005, 14 июл 2017
    Последнее редактирование: 14 июл 2017