Как отправлять письма через php скрипт? - PullRequest
1 голос
/ 29 июня 2009

Как я могу отправлять письма через скрипт php ?? Я пытаюсь сделать что-то вроде этого:

for($k=0;$k<=$x->length-1;$k++)
{
    for($l=0;$l<=$j-1;$l++)
    {
        if($y->item($k)->nodeValue==$JobNoArr[$l] && $AcceptanceDateArr[$l]=='0000-00-00')
        {   
            //echo  $v->item($k)->nodeValue ;
            $email = $v->item($k)->nodeValue . ",";
            $to = $email;
            $subject = "My subject";
            $txt = "Hello world!";
            $headers = "From: webmaster@example.com" . "\r\n" .
            "CC: someother.valid@email.adr";
            mail($to,$subject,$txt,$headers);
        }
    }
}

Пожалуйста, помогите мне в этом вопросе.

Лучший Zeeshan

Ответы [ 8 ]

16 голосов
/ 29 июня 2009

Я настоятельно не рекомендую отправлять почту с помощью функции PHP mail(). Составление действительных электронных писем и их успешная доставка сложнее, чем кажется на первый взгляд. Существует кодирование, сборка частей, проверка и санитария, отчеты об ошибках (более bool mail(...)), поддержка аутентификации и так далее ... Функция mail() не предлагает ничего из этого.

Попробуйте SwiftMailer или аналогичный. Вы можете настроить его для использования функции PHP mail() и многого другого. Я очень рекомендую это.

6 голосов
/ 29 июня 2009

Вы пытаетесь слишком много всего и сразу. Попробуйте идти по одному шагу за раз. Сначала отправьте простое электронное письмо с жестко заданными параметрами, чтобы оно заработало, а затем устраните неполадки в контексте ваших вложенных циклов.

5 голосов
/ 29 июня 2009

проблема в том, что функция почты очень ненадежна, особенно при отправке большого количества писем.

Я бы порекомендовал заглянуть в библиотеку PHPmailer (использует прямое SMTP-соединение): http://phpmailer.codeworxtech.com/

4 голосов
/ 29 июня 2009

Код (самый внутренний блок) выглядит правильно. Убедитесь, что ваша среда настроена правильно. http://ca3.php.net/manual/en/mail.setup.php

3 голосов
/ 29 июня 2009

сначала сделай

echo $result = mail($to,$subject,$txt,$headers);

и посмотри, что получишь, ошибка?

Рекомендую использовать такой класс phpMailer

почему у вас запятая в конце этой строки?

$email = $v->item($k)->nodeValue . ",";

вы отправляете на одно письмо каждый раз.

2 голосов
/ 06 июля 2009

Функция php-s mail использует sendmail в качестве MTA, поэтому, если некоторые письма проходят, а некоторые нет, я бы посмотрел в журнале sendmail ошибки.

1 голос
/ 07 июля 2009

если отправка писем в gmail работает, то и отправка писем в yahoo должна работать нормально

вы можете обнаружить, что проблема не в отправке электронных писем, но, возможно, Yahoo помечает их как спам или блокирует их на шлюзе

я заметил, что вы добавляете запятую в конце адреса электронной почты, какой смысл в этом?

могут быть другие проблемы, правильны ли ваши циклы, охватывают ли они все ожидаемые вами случаи.

вы отправляете тысячи писем? может ли ваш mta обрабатывать скорость, с которой вы помещаете электронные письма в очередь

Ваш скрипт выполняет max_execution time и останавливается?

1 голос
/ 06 июля 2009

Если вы используете общий веб-хост или ваш домашний компьютер, основным доменом для сервера будет что-то вроде

server.your-isp-or-host.com

После этого спам-фильтр увидит электронное письмо с заявлением от

yourdomain.com

когда он действительно пришел с первого адреса, а затем удалил бы его.

Это объясняет причину вашей ошибки.

Если вы находитесь на выделенном сервере или статический IP-адрес указывает на ваш домашний компьютер с правильно настроенным DNS, вышеприведенное не применимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...