---
title: "Skicka massmail"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/96340-skicka-massmail"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Melea"
published: "2004-02-02T12:16:16.000Z"
updated: "2004-02-06T14:46:28.000Z"
replies: 13
views: 822
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/96340-skicka-massmail"
---

# Skicka massmail

## #1 — Melea, 2004-02-02T12:16Z

Hejsan wF!

Har byggt en funktion som skickar massmail till alla besökare på sidan. Problemet blir dock att det blir Fatal error och det står att tiden på 30 sekunder har blivit "exceded".

Vad kan man göra åt detta?
Såhär ser koden ut:

```php
if($_POST[to] == 1) {
$till = "where access = 1";
} elseif($_POST[to] == 2) {
$till = "where access = 2";
} elseif($_POST[to] == 3) {
$till = "where access = 3";
} elseif($_POST[to] == 4) {
$till = "where access = 4";
} elseif($_POST[to] == 5) {
$till = "";
}

$SQL = mysql_query("SELECT * FROM lan_members $till") or die (mysql_error());
while($objRS = mysql_fetch_array($SQL)) {

/* message */
$message = "<html>
<head>
 <title>Birthday Reminders for August</title>
</head>
<body>".nl2br($_POST['contact'])."</body>
</html>";

/* To send HTML mail, you can set the Content-type header. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* additional headers */
$avsandare = $_POST['writer_email'];
$headers .= "From: $avsandare\r\n";
$headers .= "Reply-To: $avsandare";

/* and now mail it */
mail($objRS['email'], $_POST['topic'], $message, $headers);

}

Header ("Location: ../?i=contact&action=massmail");
```

Jag väljer alltså i en dropdown meny till vilka jag ska skicka mailet, det är just vad If satsen listar ut.

Är det någon iställningar man måste göra? Och kan jag göra det om jag har Loopia?

Tack på förhand.

Permalänk: https://www.webforum.nu/p/96340

## #2 — lunne82, 2004-02-02T15:29Z

Du ska nog ta en titt på [set_time_limit](http://se.php.net/manual/en/function.set-time-limit.php) i manualen.
Men det vore kanske bättre att ta en titt på program lämpade för massutskick?

Permalänk: https://www.webforum.nu/p/1264718

## #3 — Melea, 2004-02-02T21:11Z

Jo, jag tänkte dela upp antalet användare i olika sektioner, med sådär 20 i varje... hur gör jag det med automatik?

mvh

Permalänk: https://www.webforum.nu/p/1264858

## #4 — lunne82, 2004-02-02T22:14Z

Du kan göra såhär för att skicka 20 mail åt gången. Du får sköta finliret själv, lägger bara ut idén här nu.

Byt ut din nuvarande rad $SQL = mysql_query(...) med dessa:

```php
$start = 0;
if (isset($_GET['mail']) && $_GET['mail'] > 0) {
  $start = $_GET['mail'];
}

$SQL = mysql_query("SELECT * FROM lan_members $till LIMIT $start,20") or die (mysql_error());
```

Detta gör så att scriptet fortsätter så länge det får ut nya mailadresser ur databasen...
Byt ut din nuvarande Header-rad mot detta:

```php
if (mysql_num_rows($SQL) > 0) {
  $next = $start + 20;
  Header ("Location: ../?i=contact&action=massmail&mail=$next");
}else{
  Header ("Location: ../?i=contact&action=massmail");
}
```

Nu är det sent för mig, så "användning sker på egen risk"... :)

Permalänk: https://www.webforum.nu/p/1264918

## #5 — Melea, 2004-02-02T22:33Z

Ah! Tack så hemskt mycket, det ska nog göra susen. Är också lite sent för mig så testar det imorgon! :)

Permalänk: https://www.webforum.nu/p/1264925

## #6 — Melea, 2004-02-03T09:01Z

Uhm, fick en liten funderar nu innan jag vågar mig på att använda koden... border inte variablen $next = $start + 20; ligga ovanför loopen?

Permalänk: https://www.webforum.nu/p/1268069

## #7 — lunne82, 2004-02-04T16:08Z

Det spelar ingen roll vart den ligger, bara den ligger under detta:

```php
if (isset($_GET['mail']) && $_GET['mail'] > 0) {
  $start = $_GET['mail'];
}
```

Permalänk: https://www.webforum.nu/p/1269016

## #8 — Melea, 2004-02-05T14:22Z

Hm, är det inte så att alla $\_POST\[\]:s försvinner när jag redirectar till contact.php igen? Hur som helst så stannar den på mail=20 i queryn. Såhär ser koden ut nu:

```php
if($_POST[to] == 1) {
	$till = "where access = 1'";
} elseif($_POST[to] == 2) {
	$till = "where access = 2";
} elseif($_POST[to] == 3) {
	$till = "where access = 3";
} elseif($_POST[to] == 4) {
	$till = "where access = 4";
} elseif($_POST[to] == 5) {
	$till = "";
}

$start = 0;

if (isset($_GET['mail']) && $_GET['mail'] > 0) {
	$start = $_GET['mail'];
}

$SQL = mysql_query("SELECT * FROM lan_members $till LIMIT $start,20") or die (mysql_error());
while($objRS = mysql_fetch_array($SQL)) {

/* message */
$message = "<html>
<head>
 <title>Birthday Reminders for August</title>
</head>
<body>".nl2br($_POST['contact'])."</body>
</html>";

/* To send HTML mail, you can set the Content-type header. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* additional headers */
$avsandare = $_POST['writer_email'];
$headers .= "From: $avsandare\r\n";
$headers .= "Reply-To: $avsandare";

/* and now mail it */
mail($objRS['email'], $_POST['topic'], $message, $headers);

}

if (mysql_num_rows($SQL) > 0) {
	$next = $start + 20;
	Header ("Location: contact.php?action=all&mail=$next");
} else {
	Header ("Location: ../?i=contact&action=massmail");
}
```

Hoppas innerligt att någon vill hjälpa mig med detta, måste vara klart tills ikväll.

Tack på förhand!

Mvh

Permalänk: https://www.webforum.nu/p/1269618

## #9 — lunne82, 2004-02-05T19:37Z

```php
if($_POST[to] == 1) {

    $till = "where access = 1'";

} elseif($_POST[to] == 2) {

    $till = "where access = 2";

} elseif($_POST[to] == 3) {

    $till = "where access = 3";

} elseif($_POST[to] == 4) {

    $till = "where access = 4";

} elseif($_POST[to] == 5) {

    $till = "";

}
```

Ändra till:

```php
if (isset($_POST[to]))
  $to = $_POST[to];
else
  $to = $_GET[to];

if($to == 1) {
    $till = "where access = 1'";
} elseif($to == 2) {
    $till = "where access = 2";
} elseif($to == 3) {
    $till = "where access = 3";
} elseif($to == 4) {
    $till = "where access = 4";
} elseif($to == 5) {
    $till = "";
}
```

Och sen ändrar du

```php
Header ("Location: contact.php?action=all&mail=$next");
```

till

```php
Header ("Location: contact.php?action=all&mail=$next&to=$to");
```

Sen är det bara att hålla tummarna. :)

Permalänk: https://www.webforum.nu/p/1269786

## #10 — Melea, 2004-02-05T21:39Z

Hm! Nu kom jag på att mailet bara skickades ut till 20 st av dom. Eftersom $\_POST\['writer_email'\], $\_POST\['topic'\] och $\_POST\['contact'\] inte finns efter det antalet... Hur löser jag detta? Hur sparar jag allting om och om igen? $\_POST\['contact'\] innehåller ju i stort sett hur mkt som helst, går inte och ha det i queryn väl?

Mvh

**/R Fick lösa det genom att använda Sessioner.**

Permalänk: https://www.webforum.nu/p/1269824

## #11 — lunne82, 2004-02-05T22:53Z

Jasså, missade dem. :)

Du skulle ju kunna göra så att du sparar texten som ska skickas i en tabell i databasen, sen hämtar du det där och skickar till alla... det är kanske enklare.

Permalänk: https://www.webforum.nu/p/1269862

## #12 — Melea, 2004-02-06T06:11Z

Mjo, men fick göra en paniklösning igårkväll... ska fixa det lite bättre idag... Finns det inte en funktion i SQL / PHP som hämtar det senaste id:et i databasen? Eller måste man skriva LIMIT 1?

Mvh

Permalänk: https://www.webforum.nu/p/1269903

## #13 — lunne82, 2004-02-06T14:03Z

Nej, du får formulera SQL-frågan så den hämar det du vill ha.
SELECT sak FROM tabell WHERE krav=1 ORDER BY id DESC LIMIT 1;

Det är nog det mest optimerade, du kan även köra
SELECT sak FROM tabell HAVING id=MAX(id);

Men HAVING optimeras inte på något sätt av MySQL, så det bör man undvika om man kan.

Permalänk: https://www.webforum.nu/p/1270171

## #14 — Alpha II, 2004-02-06T14:46Z

Spara alla POST fält som en session. Skrev ett exakt likadant script igår :)

Permalänk: https://www.webforum.nu/p/1270210

---

Tråden på webben: https://www.webforum.nu/amne/php/96340-skicka-massmail
