Всем доброго времени суток, есть проблема! php не отправляет письма на почту mail.ru сам в этом точно не смогу разобраться так как с PHP я вобше не дружу поэтому прошу помощи у профи. Кому не сложно помогите! Если потребуется то я заплачу. Вот код php. Код (Text): <?php /** * Order * * @author dandelion <web.dandelion@gmail.com> * @package App_Order */ class App_Call extends Controller { function indexAction(array $params) { $this->var = $this->model->page->get('order'); $form = $this->load->form('call'); if ($form->isSubmit() && $form->isValid()) { $data = new Entity(array_map('strip_tags',$form->getData())); /** * Сохранение данных */ $id = $this->model->order->add(array( 'name' => $data->name, 'phone' => $data->phone, 'email' => $data->email, 'message' => $data->message, 'timestamp' => time() )); /** * Отправка на мыло */ $sent = false; if ($this->var->email) { require_once DIR_LIB.'/phpmailer/class.phpmailer.php'; $mail = new PHPMailer(); $mail->From = 'no-reply@'.$_SERVER['SERVER_NAME'];//$data->email; $mail->FromName = $_SERVER['SERVER_NAME'];//$data->name; $mail->Host = $_SERVER['HTTP_HOST']; $mail->Mailer = "mail"; $mail->Body = nl2br( "!!!Сообщение продавцу!!!"); $mail->AltBody = strip_tags(str_replace("<br/>", "\n", $mail->Body)); $mail->Subject = 'Заказ консультации';//$data->subject; $emails = array_map('trim',explode(',',$this->var->email)); foreach ($emails as $email) $mail->AddAddress($email); $sent = $mail->Send(); } /** * Отправка на мыло */ $sent = false; if ($this->var->email) { require_once DIR_LIB.'/phpmailer/class.phpmailer.php'; $mail = new PHPMailer(); $mail->From = '!!!Почта!!!';//$data->email; $mail->FromName = $_SERVER['SERVER_NAME'];//$data->name; $mail->Host = $_SERVER['HTTP_HOST']; $mail->Mailer = "mail"; $mail->Body = nl2br( "!!!Сообщение клиенту!!!!"); $mail->AltBody = strip_tags(str_replace("<br/>", "\n", $mail->Body)); $mail->Subject = 'Заказ консультации';//$data->subject; $emails = array_map('trim',explode(',',$this->var->email)); foreach ($emails as $email) $mail->AddAddress($data->email); $sent = $mail->Send(); } /** * Результат */ if ($id || $sent) { 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>'); $this->tpl->assignBlockVars('success'); unset($_POST); } else { $this->tpl->assignBlockVars('fail'); } } else $form->renderErrors($this->tpl); } } Друзья выручите прошу.
Да да да именно так,вы всё правильно поняли! Тоесть когда клиент вписывает свой email в форму то ему должно отправлятся письмо. Но вот клиентом с почтовыми ящиками Mail.ru письма не приходят Добавлено спустя 2 минуты 21 секунду: Чуть не забыл вот Html форма. Код (Text): <form action="call" method="post"> <div class="Title">Заказ консультации</div> <div class="Descr successHide">Заполните пожалуйста поля ниже, чтобы мы могли связаться с вами</div> <div class="oT2 successHide"><table><tbody> <tr> <td><span>Представьтесь, пожалуйста: <font color="red">*</font></span></td> <td> <div class="inputText"><i><b><input type="text" name="name" placeholder="Введите своё имя..." /></b></i></div> <!-- BEGIN error_name --><div class="error">{error_name.MESSAGE}</div><!-- END error_name --> </td> </tr> <tr> <td><span>Контактный телефон: <font color="red">*</font></span></td> <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> <!-- BEGIN error_phone --><div class="error">{error_phone.MESSAGE}</div><!-- END error_phone --> </td> </tr> <tr> <td><span>E-mail: <font color="red">*</font></span></td> <td><div class="inputText"><i><b><input type="text" name="email" placeholder="Введите свой E-mail..." /></b></i></div> <!-- BEGIN error_email --><div class="error">{error_email.MESSAGE}</div><!-- END error_email --> </td> </tr> <tr> <td><span>Дополнительная информация:</span></td> <td> <div class="textarea"><i><b><textarea name="message" cols="30" rows="10" style="height:100px;" placeholder="Если требуется введите дополнительную информацию..."></textarea></b></i></div> <!-- BEGIN error_message --><div class="error">{error_message.MESSAGE}</div><!-- END error_message --> </td> </tr> <tr> <td class="empty"> </td> <td><div class="Buttons"> <div class="button red send"><b>Свяжитесь со мной</b></div> <div class="button gray cancel"><b>Отмена</b></div> </div></td> </tr> </tbody></table></div> <div class="Descr successShow" style="display:none"><br/>Ваше сообщение отправлено! Наши менеджеры рассмотрят его и свяжутся с вами.</div> <div class="Buttons successShow" style="display:none;text-align:center;"> <div class="button red cancel"><i><b>ОК</b></i></div> </div> </form>
Со скриптом и формой все ОК. Это mail.ru не принимает почту с вашего домена. Во-первых, проверить DNS: надо убедиться, что домен в MX соответствует домену в адресе отправителя и что DNS-хостинг предоставляет корректные PTR. Еще добавление заголовка Код (Text): Precedence: bulk; снижает вероятность попадания письма в спам. Добавлено спустя 4 минуты 12 секунд: отправитель - no-reply@site.ru, а MX может быть не на site.ru, а на mail.site.ru. Кроме того, SERVER_NAME запросто может содержать localhost. Как выглядит адрес отправителя? какой домен? Добавлено спустя 38 секунд: Если посмотреть в ящике, на который письма приходят
Большое спасибо что откликнулись. Вы конечно можете меня сейчас послать но я честно говоря не понял что и где мне нужно посмотреть. Я сейчас зашёл на хостинг в DNS и в строке где написано MX написан мой домен теперь я так понимаю нужно отправить письмо и посмотреть совпадает ли адрес отправителя с адресом указанном в MX если конечно я всё правильно понял! Как мне посмотреть предоставляет PTR корректные данные или нет ?
в командной строке Код (Text): nslookup -type=ptr site.ru в responsible mail addr должен быть адрес вида email.site.ru без случайных цифр и т.д. Добавлено спустя 5 минут: Чтобы добавить заголовок, надо под каждой строкой new PHPMailer() добавить строчку Код (Text): $mail->AddCustomHeader('Precedence: bulk;');
Вот сделал как вы написали надеюсь правильно, вот что мне выдала командная строка на этот запрос. 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 к сожалению.
Address: мой ip адрес Не заслуживающий доверия ответ: мой домен.ru MX preference = 10, mail exchanger = mx2.мой домен.ru мой домен.ru MX preference = 10, mail exchanger = mx1.мой домен.ru Готово, вот что выдало мне на этот запрос.
mchost для отправки почты рекомендует прописать SPF в DNS, если вы редактируете DNS сами. http://www.mchost.ru/help/23/ SPF добавляется в TXT-запись Код (Text): v=spf1 +a +mx Добавлено спустя 1 минуту 8 секунд: отлично, письмо приходит с no-reply@ваш домен.ru? Добавлено спустя 1 минуту 3 секунды: проверьте, может быть spf уже есть nslookup -type=txt Добавлено спустя 2 минуты 25 секунд: И еще проверьте почтовый ящик домена в панели управления хостингом. Если такого нет, то заведите на хостинге ящик no-reply@домен. Потому что на каждое недоставленное письмо всегда приходит ответ, и он может прояснить ситуацию.
Так почта клиенту приходит от (мой домен.ru) Когда захожу то там написано так (мой домен.ru<моя почта@yandex.ru>) моя почта указанна тут $mail->From = 'моя почта';//$data->email; По запросу в командной строке выдаёт следующее. Address: мой ip адрес Не заслуживающий доверия ответ: мой домен.ru text = "v=spf1 a mx ip4:какой-то ip адрес ip4:какой-то ip адрес ip4:какой-то ip адрес ~all" Надеюсь всё правельно сделал,ешё раз спасибо что помогаете мне.
Жаль. Остается предложить только отправку прямо через яндекс Код (Text): $mail->Host = 'smtp.yandex.ru'; $mail->SMTPAuth = true; $mail->Port = 25; $mail->Username = "ваша почта до @yandex.ru" $mail->Password = "пароль от почты";
нужно этот код вписать вместо строчки Код (Text): $mail->Host = $_SERVER['HTTP_HOST']; там, где отправляется письмо клиенту.
Зайдите на мой сайт piknad.ru/начинающему веб-мастеру/отправка почты. Может эта информация вам поможет, когда-то у меня получалось. Сейчас этим не занимаюсь.
Может быть, если другой пользователь хостинга рассылал спам. Но в случае с отправкой через яндекс это не имеет значения, потому что письмо отправляется с почты яндекса. Если вы используете эту почту для связи, то лучше всего с неё и слать, тогда письма будет доходить 100% на любой ящик. Мой код должен работать, похоже надо еще заменить на $mail->IsSMTP(); Если не получается, могу глянуть за 500 руб.
Всем спасибо ночь просидел но разобрался с данной проблемой! Вот выкладываю кусок кода из php может кому пригодиться. Код (Text): $mail = new PHPMailer(); $mail->From = 'ваша почта@yandex.ru'; $mail->FromName = 'ваша почта@yandex.ru'; $mail->IsSMTP(); $mail->Host = 'smtp.yandex.ru'; $mail->SMTPAuth = true; $mail->Port = 25; $mail->Username = "ваша почта@yandex.ru"; $mail->Password = "пароль от почты"; $mail->Mailer = "smtp"; $mail->Body = nl2br("само письмо"); Если не отправляет то поиграйте с заголовками! мне вначале приходили письма от Yandex что сообщения не отправелено из за спама.