За последние 24 часа нас посетили 22800 программистов и 1235 роботов. Сейчас ищут 742 программиста ...

Не отправляет письма на mail.ru

Тема в разделе "Работа с почтой", создана пользователем ArtemRazulin, 21 мар 2014.

  1. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Всем доброго времени суток, есть проблема! php не отправляет письма на почту mail.ru сам в этом точно не смогу разобраться так как с PHP я вобше не дружу поэтому прошу помощи у профи.

    Кому не сложно помогите! Если потребуется то я заплачу.

    Вот код php.

    Код (Text):
    1. <?php
    2. /**
    3.  * Order
    4.  *
    5.  * @author dandelion <web.dandelion@gmail.com>
    6.  * @package App_Order
    7.  */
    8. class App_Call extends Controller
    9. {
    10.     function indexAction(array $params)
    11.     {
    12.         $this->var = $this->model->page->get('order');
    13.        
    14.         $form = $this->load->form('call');
    15.         if ($form->isSubmit() && $form->isValid())
    16.         {
    17.             $data = new Entity(array_map('strip_tags',$form->getData()));
    18.             /**
    19.              * Сохранение данных
    20.              */
    21.             $id = $this->model->order->add(array(
    22.                 'name'  => $data->name,
    23.                 'phone' => $data->phone,
    24.                 'email' => $data->email,
    25.                 'message' => $data->message,
    26.                 'timestamp'  => time()
    27.             ));
    28.             /**
    29.              * Отправка на мыло
    30.              */
    31.             $sent = false;
    32.             if ($this->var->email)
    33.             {
    34.                 require_once DIR_LIB.'/phpmailer/class.phpmailer.php';
    35.  
    36.                 $mail = new PHPMailer();
    37.                 $mail->From     = 'no-reply@'.$_SERVER['SERVER_NAME'];//$data->email;
    38.                 $mail->FromName = $_SERVER['SERVER_NAME'];//$data->name;
    39.                 $mail->Host     = $_SERVER['HTTP_HOST'];
    40.                 $mail->Mailer   = "mail";
    41.                 $mail->Body    = nl2br(
    42. "!!!Сообщение продавцу!!!");
    43.                 $mail->AltBody = strip_tags(str_replace("<br/>", "\n", $mail->Body));
    44.                 $mail->Subject = 'Заказ консультации';//$data->subject;
    45.                 $emails = array_map('trim',explode(',',$this->var->email));
    46.                 foreach ($emails as $email)
    47.                    $mail->AddAddress($email);
    48.  
    49.                 $sent = $mail->Send();
    50.             }
    51.             /**
    52.              * Отправка на мыло
    53.              */
    54.             $sent = false;
    55.             if ($this->var->email)
    56.             {
    57.                 require_once DIR_LIB.'/phpmailer/class.phpmailer.php';
    58.  
    59.                 $mail = new PHPMailer();
    60.                 $mail->From     = '!!!Почта!!!';//$data->email;
    61.                 $mail->FromName = $_SERVER['SERVER_NAME'];//$data->name;
    62.                 $mail->Host     = $_SERVER['HTTP_HOST'];
    63.                 $mail->Mailer   = "mail";
    64.                 $mail->Body    = nl2br(
    65. "!!!Сообщение клиенту!!!!");
    66.                 $mail->AltBody = strip_tags(str_replace("<br/>", "\n", $mail->Body));
    67.                 $mail->Subject = 'Заказ консультации';//$data->subject;
    68.                 $emails = array_map('trim',explode(',',$this->var->email));
    69.                 foreach ($emails as $email)
    70.                    $mail->AddAddress($data->email);
    71.  
    72.                 $sent = $mail->Send();
    73.             }
    74.             /**
    75.              * Результат
    76.              */
    77.             if ($id || $sent)
    78.             {
    79.                 die('</br></br></br><b style="font-size:17">Ваше заявка принята! Наши менеджеры свяжутся с вами в ближайшее время.</b></br></br></br><center><a href="./" class="button red3" style="font-style:normal;"><b>ОК</b></a></center>');
    80.                 $this->tpl->assignBlockVars('success');
    81.                 unset($_POST);
    82.             }
    83.             else
    84.             {
    85.                 $this->tpl->assignBlockVars('fail');
    86.             }
    87.         }
    88.         else $form->renderErrors($this->tpl);
    89.     }
    90. }
    Друзья выручите прошу.
     
  2. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Ребят я готов заплатить только помогите прошу
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    то есть, на другие сервера приходит, кроме mail.ru?
     
  4. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Да да да именно так,вы всё правильно поняли!
    Тоесть когда клиент вписывает свой email в форму то ему должно отправлятся письмо.
    Но вот клиентом с почтовыми ящиками Mail.ru письма не приходят

    Добавлено спустя 2 минуты 21 секунду:
    Чуть не забыл вот Html форма.

    Код (Text):
    1. <form action="call" method="post">
    2.     <div class="Title">Заказ консультации</div>
    3.     <div class="Descr successHide">Заполните пожалуйста поля ниже, чтобы мы могли связаться с вами</div>
    4.     <div class="oT2 successHide"><table><tbody>
    5.         <tr>
    6.             <td><span>Представьтесь, пожалуйста: <font color="red">*</font></span></td>
    7.             <td>
    8.                 <div class="inputText"><i><b><input type="text" name="name" placeholder="Введите своё имя..." /></b></i></div>
    9.                 <!-- BEGIN error_name --><div class="error">{error_name.MESSAGE}</div><!-- END error_name -->
    10.             </td>
    11.         </tr>
    12.         <tr>
    13.             <td><span>Контактный телефон: <font color="red">*</font></span></td>
    14.             <td><div class="inputText"><i><b><input type="text" name="phone" class="phone_number" id="phone" rel="+7 (999) 999-9999" value="" placeholder="Введите свой контактный телефон..." /></b></i></div>
    15.                 <!-- BEGIN error_phone --><div class="error">{error_phone.MESSAGE}</div><!-- END error_phone -->
    16.             </td>
    17.         </tr>
    18.         <tr>
    19.             <td><span>E-mail: <font color="red">*</font></span></td>
    20.             <td><div class="inputText"><i><b><input type="text" name="email" placeholder="Введите свой E-mail..." /></b></i></div>
    21.                 <!-- BEGIN error_email --><div class="error">{error_email.MESSAGE}</div><!-- END error_email -->
    22.             </td>
    23.         </tr>  
    24.         <tr>
    25.             <td><span>Дополнительная информация:</span></td>
    26.             <td>
    27.                 <div class="textarea"><i><b><textarea name="message" cols="30" rows="10" style="height:100px;" placeholder="Если требуется введите дополнительную информацию..."></textarea></b></i></div>
    28.                 <!-- BEGIN error_message --><div class="error">{error_message.MESSAGE}</div><!-- END error_message -->
    29.             </td>
    30.         </tr>
    31.         <tr>
    32.             <td class="empty">&nbsp;</td>
    33.             <td><div class="Buttons">
    34.                 <div class="button red send"><b>Свяжитесь со мной</b></div>
    35.                 <div class="button gray cancel"><b>Отмена</b></div>
    36.             </div></td>
    37.         </tr>
    38.     </tbody></table></div>
    39.     <div class="Descr successShow" style="display:none"><br/>Ваше сообщение отправлено! Наши менеджеры рассмотрят его и свяжутся с вами.</div>
    40.     <div class="Buttons successShow" style="display:none;text-align:center;">
    41.         <div class="button red cancel"><i><b>ОК</b></i></div>
    42.     </div>
    43. </form>
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Может в спаме посмотришь. Точно нет?
     
  6. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    В спаме точно нет, пробывал 7 почтовый ящиков mail.ru не на один не пришло!
    Они вобще не доходят.
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Со скриптом и формой все ОК. Это mail.ru не принимает почту с вашего домена. Во-первых, проверить DNS: надо убедиться, что домен в MX соответствует домену в адресе отправителя и что DNS-хостинг предоставляет корректные PTR.
    Еще добавление заголовка
    Код (Text):
    1. Precedence: bulk;
    снижает вероятность попадания письма в спам.

    Добавлено спустя 4 минуты 12 секунд:
    отправитель - no-reply@site.ru, а MX может быть не на site.ru, а на mail.site.ru. Кроме того, SERVER_NAME запросто может содержать localhost.
    Как выглядит адрес отправителя? какой домен?

    Добавлено спустя 38 секунд:
    Если посмотреть в ящике, на который письма приходят
     
  8. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Большое спасибо что откликнулись.
    Вы конечно можете меня сейчас послать но я честно говоря не понял что и где мне нужно посмотреть.
    Я сейчас зашёл на хостинг в DNS и в строке где написано MX написан мой домен теперь я так понимаю нужно отправить письмо и посмотреть совпадает ли адрес отправителя с адресом указанном в MX если конечно я всё правильно понял!
    Как мне посмотреть предоставляет PTR корректные данные или нет ?
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    в командной строке
    Код (Text):
    1. nslookup -type=ptr site.ru
    в responsible mail addr должен быть адрес вида email.site.ru без случайных цифр и т.д.

    Добавлено спустя 5 минут:
    Чтобы добавить заголовок, надо под каждой строкой new PHPMailer() добавить строчку
    Код (Text):
    1. $mail->AddCustomHeader('Precedence: bulk;');
     
  10. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Вот сделал как вы написали надеюсь правильно, вот что мне выдала командная строка на этот запрос.
    Address: мой ip адрес

    мой домен.ru
    primary name server = ns1.mchost.ru
    responsible mail addr = info.mchost.ru
    serial = 1393448163
    refresh = 28800 (8 hours)
    retry = 7200 (2 hours)
    expire = 604800 (7 days)
    default TTL = 600 (10 mins)

    Добавлено спустя 4 минуты 50 секунд:
    Заголовок добавил, протестировал но письма всё равно не приходят на почтовые ящики mail.ru к сожалению.
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    а MX
    Код (Text):
    1. nslookup -type=mx ...
     
  12. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Address: мой ip адрес

    Не заслуживающий доверия ответ:
    мой домен.ru MX preference = 10, mail exchanger = mx2.мой домен.ru
    мой домен.ru MX preference = 10, mail exchanger = mx1.мой домен.ru

    Готово, вот что выдало мне на этот запрос.
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    mchost для отправки почты рекомендует прописать SPF в DNS, если вы редактируете DNS сами.
    http://www.mchost.ru/help/23/

    SPF добавляется в TXT-запись
    Код (Text):
    1. v=spf1 +a +mx
    Добавлено спустя 1 минуту 8 секунд:
    отлично, письмо приходит с no-reply@ваш домен.ru?

    Добавлено спустя 1 минуту 3 секунды:
    проверьте, может быть spf уже есть
    nslookup -type=txt

    Добавлено спустя 2 минуты 25 секунд:
    И еще проверьте почтовый ящик домена в панели управления хостингом. Если такого нет, то заведите на хостинге ящик no-reply@домен. Потому что на каждое недоставленное письмо всегда приходит ответ, и он может прояснить ситуацию.
     
  14. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Так почта клиенту приходит от (мой домен.ru)
    Когда захожу то там написано так (мой домен.ru<моя почта@yandex.ru>) моя почта указанна тут $mail->From = 'моя почта';//$data->email;

    По запросу в командной строке выдаёт следующее.

    Address: мой ip адрес

    Не заслуживающий доверия ответ:
    мой домен.ru text =

    "v=spf1 a mx ip4:какой-то ip адрес ip4:какой-то ip адрес ip4:какой-то ip адрес ~all"

    Надеюсь всё правельно сделал,ешё раз спасибо что помогаете мне.
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    попробуйте в качестве эксперимента вписать туда mail@ваш_домен.ru
     
  16. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    протестировал, по прежнему письма к сожалению не доходят
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Жаль. Остается предложить только отправку прямо через яндекс
    Код (Text):
    1. $mail->Host       = 'smtp.yandex.ru';
    2. $mail->SMTPAuth   = true;
    3. $mail->Port       = 25;
    4. $mail->Username   = "ваша почта до @yandex.ru"
    5. $mail->Password   = "пароль от почты";
     
  18. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Сейчас попробую а что мне нужно в php изменить или на что заменить ?
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    нужно этот код вписать вместо строчки
    Код (Text):
    1. $mail->Host     = $_SERVER['HTTP_HOST'];
    там, где отправляется письмо клиенту.
     
  20. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Попробывал, итог один на mail не присылает к сожалению

    Может ip заблокирован?
     
  21. piknad

    piknad Новичок

    С нами с:
    22 мар 2014
    Сообщения:
    1
    Симпатии:
    0
    Зайдите на мой сайт piknad.ru/начинающему веб-мастеру/отправка почты. Может эта информация вам поможет, когда-то у меня получалось. Сейчас этим не занимаюсь.
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Может быть, если другой пользователь хостинга рассылал спам. Но в случае с отправкой через яндекс это не имеет значения, потому что письмо отправляется с почты яндекса. Если вы используете эту почту для связи, то лучше всего с неё и слать, тогда письма будет доходить 100% на любой ящик.
    Мой код должен работать, похоже надо еще
    заменить на
    $mail->IsSMTP();
    Если не получается, могу глянуть за 500 руб.
     
  23. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Всем спасибо ночь просидел но разобрался с данной проблемой!
    Вот выкладываю кусок кода из php может кому пригодиться.
    Код (Text):
    1.                
    2.                 $mail = new PHPMailer();
    3.                 $mail->From     = 'ваша почта@yandex.ru';
    4.                 $mail->FromName = 'ваша почта@yandex.ru';
    5.                 $mail->IsSMTP();   
    6.                 $mail->Host       = 'smtp.yandex.ru';
    7.                 $mail->SMTPAuth   = true;
    8.                 $mail->Port       = 25;
    9.                 $mail->Username   = "ваша почта@yandex.ru";
    10.                 $mail->Password   = "пароль от почты";
    11.             $mail->Mailer   = "smtp";
    12.             $mail->Body    = nl2br("само письмо");
    Если не отправляет то поиграйте с заголовками! мне вначале приходили письма от Yandex что сообщения не отправелено из за спама.