Как я могу получить массив писем и убедиться, что они все отправляют? - PullRequest
0 голосов
/ 26 мая 2011

Я бы хотел получить массив писем и убедиться, что каждое письмо отправлено. (например, Массив> отправить каждое электронное письмо> результат) Я вроде как изменил вопрос, потому что это важнее, плюс я добавил 50 повторений. точка. Codewise, как я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 26 мая 2011

Помимо использования функции mail(), вы, вероятно, захотите настроить задание cron для отправки писем. Для буферизации почтовых отправлений используйте отдельную таблицу базы данных. Или, если речь идет о какой-то функции списка рассылки, тогда подойдет простой список получателей.

1 голос
/ 06 июня 2011

Если вы просто хотите разослать кучу одного и того же письма сразу, вы может вызвать implode() в вашем массиве писем, чтобы превратить его в строку:

$to_string = implode(', ', $to_array);

Или, если вы хотите попробовать что-то более сложное, вы можете использовать foreach цикл, чтобы циклически проходить каждое электронное письмо и отслеживать успехи и неудачи:

$success = array();
$failure = array();

foreach ($to_array as $to_email)
{
  if (mail($to_email, $subject, $message, ...))
    $success[] = $to_email;
  else
    $failure[] = $to_email;
}

Полагаю, ваш первоначальный вопрос касался отправки всех этих электронные письма каждый день или что-то без необходимости вас ударить кнопка. Если у вас есть доступ по ssh, посмотрите, что произойдет, если вы наберете:

crontab -e

Если вы получили какую-то ошибку, вам придется поговорить с вашей системой Администратор о cron. Если вы получили файл, то вы можете использовать cron. это не является частью вашего текущего вопроса, поэтому я оставлю это.

1 голос
/ 26 мая 2011

Простой способ отправить электронное письмо:

$to = "usermail@test.com";
$from = "my_email@mydomain.com";
$subject = "Hello!";
$contents = "This is an test mail!";

mail($to, $subject, $contents, "From: $from");
1 голос
/ 26 мая 2011

Это говорит само за себя: http://php.net/manual/en/function.mail.php

Вам просто нужен сервер исходящей почты (postfix, exim, sendmail)

1 голос
/ 26 мая 2011

Точно так же.У вас должен быть код, который отправляет электронное письмо на адрес электронной почты.Находятся ли они на сайте или нет, это один и тот же код.Вам просто нужно знать их адрес электронной почты.

РЕДАКТИРОВАТЬ: Если вам интересно, как вы могли бы инициировать отправку электронной почты, может быть, вы хотите запланировать его с помощью задания cron, например отправлять электронную почту каждый день наполночь.

0 голосов
/ 06 июня 2011

Если у вас нет доступа к заданиям cron, вам, вероятно, будет трудно работать без взаимодействия с пользователем.

Распространенный метод для решения этой проблемы - запуск при каждой загрузке n-й страницы или при каждойдовольно часто.Это работает только в том случае, если у вас есть сайт, который посещают так часто, как вы хотите отправить письмо.Вы также захотите использовать ACID-совместимую базу данных.Далее следует псевдокод.

if (1 == rand(1,100)) { // run once every 100 page loads
    $emails = get_emails_to_send();
    mark_emails_as_sent($emails);
    $results = send_emails($emails);
    mark_failures_as_needing_to_be_sent($results);
}

Альтернативно, вы можете запустить его по таймеру:

if (time() - get_last_time_run() > $run_at_least_once_every_this_many_seconds) {
    $emails = get_emails_to_send();
    mark_emails_as_sent($emails);
    $results = send_emails($emails);
    mark_failures_as_needing_to_be_sent($results);
}

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

Если вы хотите отправлять электронные письма чаще, чем вы получаете попадания на страницу ... слишком плохо;).Или попросите внешнюю службу периодически заходить на страницу.

...