Письма приходят только на gmail.com

unlex

Новичок
Письма приходят только на gmail.com

PHP:
 $email = [email][email protected][/email]; //какой-то реальный ящик 
  $subject = "sbj"; 
  $body = "mailbody"; 

  $headers = "From: [email][email protected][/email]\n"; 
  $headers .= "MIME-Version: 1.0\n"; 
  $headers .= "Content-Type: text/html; charset=Windows-1251\n"; 
  $headers .= "Content-Transfer-Encoding: 8bit\n"; 
  if (!empty($email))
  if (mail($email, $subject, $body, $headers))
    echo "Письмо поставлено в очередь на отправку";
  else 
    echo "Ошибка при отправке";
Получаем "Письмо поставлено в очередь на отправку";
Письмецо получаем только на какой_то_ящик@gmail.com
На yandex, freemail,yahoo,mail и еже с ними письма тупо не приходят. Ни в карантин, ни в спам ни в куда не приходят.
Хостер не знает в чем дело.
Вопрос - Посмотрев вышеприведенный код, можете сказать чей косяк? Мой или хостера?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
1 простой mail уходит?
2 Посмотрите какие заголовки шлёт стандартный почтовый клиент
 

440hz

php.ru
все эти сервисы требуют регистрации почтового сервера в их системах. по крайнпе mail.ru точно.

пропиши в хедерах Error-to, return-path и т.д. и получи отлуп, где будет написана причина.
 

unlex

Новичок
получил следующий отлуп
Отправив письмо на один из ящиков freemail.ru, получил ответ на свой ящик

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

[email protected]
SMTP error from remote mail server after MAIL FROM:<[email protected]>:
host mx.freemail.ru [217.197.114.152]: 571 Authentication required

------ This is a copy of the message, including all the headers. ------

Return-path: <[email protected]>
Received: from nobody by s8.steadyhost.ru with local (Exim 4.68 (FreeBSD))
(envelope-from <[email protected]>)
id 1IV6uO-000JZl-GT
for [email protected]; Tue, 11 Sep 2007 18:40:08 +0400
To: [email protected]
Subject: Тема
Message-Id: <[email protected]>
From: Unprivileged user <[email protected]>
Sender: Unprivileged user <[email protected]>
Date: Tue, 11 Sep 2007 18:40:08 +0400

Однако, попытавись отправить его на yandex не получил вообще ничего..

-~{}~ 11.09.07 18:08:

Автор оригинала: 440hz
а отправь мне письмо на [email protected] и скажи откуда отправляешь (IP) - я скажу в чем косык.
отправил
 

unlex

Новичок
строка вида var_dump(mail('мой_ящик@yandex.ru', 'Тема', 'Текст', null, '-fмой_ящик@freemail.ru'));
возвращает true и письмо с трудом (почти минута), но приходит, причем вместо "Тема" лицезреем "Тема рЕЙЯР".
На freemail не приходит, и приходит отлуп, который я описал выше. На gmail приходит все. На yahoo.com не приходит ничего, да еще не приходит отлуп на freemail.ru...Всё, ахтунг, я сдаюсь!

-~{}~ 11.09.07 18:43:

Автор оригинала: SiMM
Authentication required
То есть, это проблема хостера?
 

440hz

php.ru
ну у меня все жестко:

Sep 11 18:55:50 hosting exim[90750]: H=(s8.steadyhost.ru) [72.232.205.58]:49235 I=[77.234.201.222]:25 sender verify defer for <[email protected]>: host lookup did not complete
...
Sep 11 18:55:50 hosting exim[90750]: H=(s8.steadyhost.ru) [72.232.205.58]:49235 I=[77.234.201.222]:25 F=<[email protected]> temporarily rejected RCPT <[email protected]>: Could not complete sender verify

он пытается проверить отправителя (скажем НЕТ спамерам), а его и нету...

я бы пробовал сформировать более нормальные заголовки в качестве From и т.д. и попробовал юзать какой-нить класс, а не mail()

покажи реальные данные которые приходят в mail() кроме тела письма?
 

unlex

Новичок
более нормальные, это какие?
В качестве From вместо [email protected], ессно прописан реально существующий почтовый ящик...
 

440hz

php.ru

unlex

Новичок
ок. вот реальный листинг тестового скрипта.
PHP:
<?
if (isset($_POST['BSendMail']))
  processForm();
else 
 showForm();  

function showForm()
{
	echo "<html><body><div align='center'>
		<form action=".$_SERVER['PHP_SELF']." method='post'>
		<div align='center' style='color:#FFFFFF;'>Введите свой email:</div><br>
		<input name='mailAddress' type='text'>
		<br>
		<input name='BSendMail' type='submit' value='Ok'>
		</form>
		</div></body></html>";
}

function processForm()
{
  $email = $_POST['mailAddress']; 
  $subject = "sbj"; 
  $body = "mailbody plus html tag"; 

  $headers = "From: [email][email protected][/email] "; 
  $headers .= "MIME-Version: 1.0 "; 
  $headers .= "Content-Type: text/html; charset=Windows-1251"; 
  $headers .= "Content-Transfer-Encoding: 8bit"; 
  if (!empty($email))
  if (mail($email, $subject, $body, $headers))
    echo "Письмо поставлено в очередь на отправку";
  else 
    echo "Ошибка при отправке";
}
 

440hz

php.ru
$headers = "From: [email protected] ";
$headers .= "MIME-Version: 1.0 ";
$headers .= "Content-Type: text/html; charset=Windows-1251";
$headers .= "Content-Transfer-Encoding: 8bit";

надо как минимум ставить \n для конца хедеров иначе почтовик непонимает...
=)

html кодируется
Content-Transfer-Encoding: quoted-printable
 

unlex

Новичок
Автор оригинала: 440hz
$headers = "From: [email protected] ";
$headers .= "MIME-Version: 1.0 ";
$headers .= "Content-Type: text/html; charset=Windows-1251";
$headers .= "Content-Transfer-Encoding: 8bit";

надо как минимум ставить \n для конца хедеров иначе почтовик непонимает...
=)
пробовал и так

$headers = "From: [email protected]\n ";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=Windows-1251\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";

и так

$headers = "From: [email protected]\r\n ";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Type: text/html; charset=Windows-1251\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";

Результат тот же
 

440hz

php.ru
запусти?

PHP:
<?

  $email = "[email protected]";
  $subject = "sbject";
  $body = "hello, world!";

  $headers = "From: [email][email protected][/email]\n";
  $headers .= "MIME-Version: 1.0\n";
  $headers .= "Content-Type: text/plain; charset=Windows-1251\n";
  $headers .= "Content-Transfer-Encoding: 8bit";
  mail($email, $subject, $body, $headers);

?>
 

440hz

php.ru
Автор оригинала: unlex
уже
Sep 11 20:18:19 hosting exim[92539]: H=(s8.steadyhost.ru) [72.232.205.58]:57818 I=[77.234.201.222]:25 F=<[email protected]> temporarily rejected RCPT <[email protected]>: Could not complete sender verify

mail() отправляет от nobody @ s8.steadyhost.ru (апач от nobody работает). многие почтовые сервера проверяют РЕАЛЬНОГО отправителя. В твоем случае я бы попробовал использовать класс который напрямую работает с SMTP и указывает все необходимые заголовки и параметры.

PHPMailer - PHP email class. что-то типа того...
 

Alexandre

PHPПенсионер
unlex используй PHPMailer и проблем не будет с заголовками по крайней мере.

что касается - письма не доходят - это как проблема хостера, так и твоя. Большинство публичных почтовых серверов имеют антиспам. Для того чтоб твое письмо дошло, необходимо выполнить несколько условий, одно из которых, чтоб IP отправления соответствовал MXX записи почтовой службы (это проблема хостера).
Чтоб IP отправки не числился в спамлистах (это проблема хостера).
Придерживаться правила - не болше 2х-3х писем на одну отправку (лучше - одна отправка - одно письмо ) - это уже твоя проблема.
Почтовый ящик (адрес ) отправителя реально должен существовать и его IP должен соответствовать IP отправителя, т.е. ситуация, что "почтовый сервер" находится на другом хосте не покатит.
Не отправлять письма в HTML формате (за это начисляется целых 2 штрафных балла)
 
Сверху