Понимание конфигурации sendmail - PullRequest
1 голос
/ 09 июля 2011

Я пытаюсь заставить php отправлять почту с помощью команды "mail ()" на Ubuntu linux box. Почта, кажется, отправляется, а затем отбрасывается при отправке почты - и я не знаю, что делать.делать с этим.

Функция php mail () возвращает true. Почта не доставляется. Я настроил evolutoin для доставки vi SMTP на localhost и отправил электронное письмо тому же пользователю - и оно доставлено.

Файл /var/log/mail.log содержит следующие записи.

Jul  9 15:15:34 anake postfix/pickup[1292]: 02879340040: uid=33 from=<www-data>
Jul  9 15:15:34 anake postfix/cleanup[2079]: 02879340040: message-id=<20110709141534.02879340040@anake>
Jul  9 15:15:34 anake postfix/qmgr[1293]: 02879340040: from=<www-data@anake.ianhobXXson.co.uk>, size=411, nrcpt=1 (queue active)
Jul  9 15:15:36 anake postfix/smtp[2082]: 02879340040: to=<hobXXson42@gmail.com>, relay=smtp.ntlworld.com[81.103.221.11]:25, delay=2.3, delays=0.1/0.02/2.1/0.13, dsn=5.0.0, status=bounced (host smtp.ntlworld.com[81.103.221.11] $
Jul  9 15:15:36 anake postfix/cleanup[2079]: 5370B340042: message-id=<20110709141536.5370B340042@anake>
Jul  9 15:15:36 anake postfix/bounce[2083]: 02879340040: sender non-delivery notification: 5370B340042
Jul  9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: from=<>, size=2228, nrcpt=1 (queue active)
Jul  9 15:15:36 anake postfix/qmgr[1293]: 02879340040: removed
Jul  9 15:15:36 anake postfix/local[2084]: 5370B340042: to=<www-data@anake.ianhobXXson.co.uk>, relay=local, delay=0.03, delays=0/0.02/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jul  9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: removed

Я не понимаю, откуда он получает адрес «от». Фактический код выполняетсяэто: -

<?php 
    $to      = 'hobXXson42@gmail.com';
    $subject = 'Test email';  
    $message = 'hello - this has gone round the loop';
    $headers = 'From: ian@ianhobXXson.co.uk' . "\n" .
              'Reply-To: ian@ianhobXXson.co.uk' . "\n" .
              'X-Mailer: PHP/'. phpversion()."\r\n";
    if (mail($to, $subject, $message, $headers)) {
        echo "Message sent OK";
    } else {
        echo "message send failed";
    }

?>

Может кто-нибудь заметить, что идет не так, и что я могу с этим поделать? Адреса электронной почты слегка подделаны довольно очевидным способом. Ian

1 Ответ

3 голосов
/ 09 июля 2011

Здесь "from" является отправителем конверта, то есть адресом, который заканчивается в заголовке Return-Path. Этот заголовок не может быть изменен так же, как другие заголовки, так как на самом деле это не часть письма, а часть конверта. Return-Path - это адрес, на который, помимо прочего, отправляется bounces.

Вы можете изменить отправителя конверта, используя пятый аргумент функции mail(). Postfix (который работает на вашем сервере), Sendmail и Exim позволяют изменять отправителя конверта с помощью флага -f:

...
$extra_parameters = '-fian@ianhobXXson.co.uk';
mail($to, $subject, $message, $headers, $extra_parameters);
...