Как отправлять электронные письма друзьям пользователей, когда пользователь предпринимает определенные действия? - PullRequest
7 голосов
/ 10 октября 2011

Я использую этот скрипт ниже, который работает.Единственное, что он отправляет письмо на первый идентификатор электронной почты, который он получает.Остальные насмехаются.Итак, как мне отправить электронное письмо на все электронные письма?Когда я тестировал только скрипт, который тянет электронные письма, он работает, он показывает все электронные письма.

Код:

    $sql = "SELECT STRAIGHT_JOIN DISTINCT email from
    friend_email_ids WHERE my_id='$id'";
    $result = mysql_query($sql);

    $query = mysql_query($sql) or die ("Error: ".mysql_error());

    if ($result == "")
    {
    echo "";
    }
     echo "";


   $rows = mysql_num_rows($result);

   if($rows == 0)
   {
   print("");

    }
   elseif($rows > 0)
   {
    while($row = mysql_fetch_array($query))
   {

   $email = $row['email'];


  print("");
  }

  }

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "From: $usermail\r\n";
$subject = "$full_name added";
$message = "<html><body>";
$message .= "Hello, <br><br>$full_name posted someth<br><br>";
$message .= "<a href=www.domain.com/signup.php?t=&sign=>Click here.</a><br><br>";
$message .= "</body></html>";
mail("$email", "Subject: $subject",
$message, "$headers" );
echo "";

Ответы [ 4 ]

2 голосов
/ 10 октября 2011

Вы перезаписываете переменную $email каждый раз в цикле.Вместо этого вы хотите создать массив и добавлять электронную почту в массив каждый раз через цикл.Когда закончите, объедините адреса электронной почты в массиве с запятыми перед отправкой почты.

Поэтому перед циклом (возможно, после оператора $rows = ...) инициализируйте новый массив, например:

$rows = mysql_num_rows($result);
$emails = array(); /* Add this line */

Затем каждый раз в цикле добавляйте письмо в массив:

while($row = mysql_fetch_array($query)) {
    array_push($emails, $row['email']);
    /* ... */
}

Наконец, присоединяйте их запятыми в своем письме:

mail(implode(',', $emails), "Subject: $subject", $message, $headers);

В качестве альтернативыможно отправить одно отдельное электронное письмо каждому пользователю, например так:

foreach ($emails as $email) {
    mail($email, "Subject: $subject", $message, $headers);
}
0 голосов
/ 04 мая 2012

Вам нужно сделать небольшую модификацию, переместив последний блок кода внутри вашего цикла. Попробуйте это:

$rows = mysql_num_rows($result);

   if($rows == 0)
   {
   print("");

    }
   elseif($rows > 0)
   {
    while($row = mysql_fetch_array($query))
   {

   $email = $row['email'];
   $headers = "MIME-Version: 1.0\r\n";
   $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
   $headers .= "From: $usermail\r\n";
   $subject = "$full_name added";
   $message = "<html><body>";
   $message .= "Hello, <br><br>$full_name posted someth<br><br>";
   $message .= "<a href=www.domain.com/signup.php?t=&sign=>Click here.</a><br><br>";
   $message .= "</body></html>";
   mail("$email", "Subject: $subject",
   $message, "$headers" );

  print("");
  }

  }


echo "";
0 голосов
/ 01 мая 2012

Здесь я прилагаю код для отправки нескольких писем и интеграции его с существующим кодом.

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

$ email = array ();

$sql = "SELECT STRAIGHT_JOIN DISTINCT email from friend_email_ids WHERE my_id = '".$id."' ";
$result = mysql_query($sql);

$query = mysql_query($sql) or die ("Error: ".mysql_error());

while($row = mysql_fetch_assoc($query))
{
    $email[] = $row['email'];
}


/*
echo "<pre>";
print_r($email);
exit;
*/
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "From: $usermail\r\n";

$subject = "$full_name added";
$message = "<html><body>";
$message .= "Hello, <br><br>$full_name posted this mail<br><br>";
$message .= "<a href='www.aadinathtech.com/index.php'>Click here.</a><br><br>";
$message .= "</body></html>";

foreach($email as $key=>$val) {
    mail($val, "Subject: $subject", $message, "$headers" );
    echo "<br />Mail has been sent to $val<br /><br />";
}

Пожалуйста, верните меня обратно, если вы все еще найдете какие-либо проблемы.

0 голосов
/ 29 апреля 2012

Попробуйте это:

<?php

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "From: $usermail\r\n";
$subject = "$full_name added";
$message = "<html><body>";
$message .= "Hello, <br><br>$full_name posted someth<br><br>";
$message .= "<a href='www.domain.com/signup.php?t=&sign='>Click here.</a><br><br>";
$message .= "</body></html>";

$sql = "SELECT DISTINCT email from friend_email_ids WHERE my_id='$id'";
$result = mysql_query($sql) or die ("Error: ".mysql_error());

while($row = mysql_fetch_array($result))
{
   mail($row['email'], $subject, $message, $headers);
   // for debugging purposes, uncomment the following line
   // echo $row['email']
}

Изменения:

  • очищен код PHP (удалены неиспользуемые инструкции, удален второй запрос, который ничего не делает, удалены строковые переменные в " и т. Д.)
  • исправленная HTML-ссылка в сообщении электронной почты (в атрибуте href нет кавычек)
  • перебирает результаты для отправки электронной почты для каждого $row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...