Назад | Перейти на главную страницу

Проблема с отправкой электронного письма с помощью почтовой функции PHP. Предоставляется полная трассировка

У меня простая настройка скрипта:

<?php
mail('corgan1003@aol.com', 'Hello World', 'Testing a message');
?>

Я не могу отправлять электронную почту со своего сервера в учетные записи AOL. Подробная информация об ошибке приведена ниже. GMail позволяет мне отправлять сообщения ... так что я думаю, что AOL немного строже.

   Starting tcpick 0.2.1 at 2009-08-03 22:25 UTC
    Timeout for connections is 600
    tcpick: reading from tcp_dump.pcap
    1      SYN-SENT       67.23.28.65:49516 > 64.12.138.153:smtp
    1      SYN-RECEIVED   67.23.28.65:49516 > 64.12.138.153:smtp
    1      ESTABLISHED    67.23.28.65:49516 > 64.12.138.153:smtp
    220-rly-mg05.mx.aol.com ESMTP mail_relay_in-mg05.6; Mon, 03 Aug 2009 18:25:34 -0400
    220-America Online (AOL) and its affiliated companies do not
    220-     authorize the use of its proprietary computers and computer
    220-     networks to accept, transmit, or distribute unsolicited bulk
    220-     e-mail sent from the internet.  Effective immediately:  AOL 
    220-     may no longer accept connections from IP addresses which 
    220      have no reverse-DNS (PTR record) assigned.
    EHLO bandop.com
    250-rly-mg05.mx.aol.com fallsroadsunoco.com
    250 HELP
    MAIL FROM:<www-data@com>
    501 SYNTAX ERROR IN PARAMETERS OR ARGUMENTS
    RSET
    250 OK
    QUIT
    1      FIN-WAIT-1     67.23.28.65:49516 > 64.12.138.153:smtp
    2      SYN-SENT       67.23.28.65:45729 > 216.239.113.101:smtp
    1      FIN-WAIT-2     67.23.28.65:49516 > 64.12.138.153:smtp
    221 SERVICE CLOSING CHANNEL
    1      RESET          67.23.28.65:49516 > 64.12.138.153:smtp
    3      SYN-SENT       67.23.28.65:45729 > 216.239.113.101:smtp
    tcpick: done reading from tcp_dump.pcap

    20 packets captured
    3 tcp sessions detected

Вы знаете, как сделать так, чтобы параметр FROM выводился правильно? Установка заголовка FROM в почтовой функции PHP не работает.

ОБНОВИТЬ

Этот небольшой прием работает, но я бы предпочел исправить эту проблему вне PHP.

mail('corgan1003@aol.com', 'Hello World', 'Testing a message', null,'-faddress@domain.com');

Я супер новичок с почтовыми серверами

С AOL они часто не проходят, пока вы не заполните форма для попадания в белый список. Чтобы изменить источник почты, отредактируйте параметр sendmail_path в файле php.ini. Об этом говорится в php mail () doc в дополнительных_параметрах.

Например:

sendmail_path = "/usr/sbin/sendmail -t -f me@kyle.com"

Вы также можете передать вместо этого параметр функции mail ():

<?php
mail('nobody@example.com', 'the subject', 'the message', null,
   '-fwebmaster@example.com');
?>

Наконец, вы можете найти альтернативный почтовый пакет более гибким, например ГРУША ПОЧТА пакет или мсмтп, вы можете указать другие серверы smtp.

Вы хотите изменить адрес From: конверта, который отличается от заголовка From :. Видеть этот комментарий в документе функции mail ().

Адрес конверта зависит от конфигурации вашего MTA - в вашем случае «www-data» - это пользователь, от имени которого запускается ваш скрипт, а «com» ​​- (часть?) Имени хоста вашего компьютера. Предполагая, что вы используете * nix, вы можете попытаться переопределить адрес конверта следующим образом:

mail('corgan1003@aol.com', 'Hello World', 'Testing a message', null,'-faddress@domain.com');

где address@domain.com - это адрес отправителя конверта, который вы хотите показать.

Если это сработает и у вас есть доступ к вашему файлу php.ini, вы можете установить там адрес отправителя конверта - см. Сообщение Кайла.

Вы также можете взглянуть на конфигурацию вашего MTA (sendmail, postfix) - похоже, у него проблема с настройкой вашего имени хоста. Изменение настроек php-s исправит это для php, но если что-то еще (cron, logwatch) в вашей системе хочет отправлять почту, было бы полезно иметь работающий MTA.

Отредактируйте после вашего комментария: Трудно что-либо предложить, не зная конфигурации вашего почтового сервера, но для начала попробуйте следующее:

myhostname = mail.virtualhostname.com
mydomain = virtualhostname.com
myorigin = $mydomain
masquerade_domains = virtualhostname.com

Попробуйте избежать знака at.

mail('corgan1003\@aol.com', 'Hello World', 'Testing a message');