WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   skicka php massmejl (https://www.wn.se/forum/showthread.php?t=1043370)

robincox 2010-08-18 10:08

skicka php massmejl
 
Jag tänkte skicka iväg ett mejl till ca. 800 e-postadresser. Jag har skrivit en liten kodsnutt som ser till att skicka varje mejl separat:

$mejl[0] = [email protected]
$mejl[1] = [email protected]
$mejl[2] = [email protected]
...och så vidare till nr. 800...

for (i=0;i<=800;i++) {

$to = $mejl[$i];
$subject = "Hej";
$message = "Ett finfint meddelande";
$from = "[email protected]";
$headers = "From: $from";
mail($to,$subject,$message,$headers);

}

Det här borde väl vara ett säkert sätt att massmejla utan att bli svartlistad?

qson 2010-08-18 10:17

Ditt webbhotell har förmodligen en gräns på hur många mail man får skicka. Det webbhotell jag använder har en gräns på 700 mail per timma, oavsett hur de skickas. Skickas fler mail än detta så tror jag man blir svartlistad.

Sen bör du inte använda PHP:s mail()-funktion för att skicka många mail i en loop. Den öppnar och stänger anslutningen till mailservern för varje mail den skickar. Det är onödigt och tar extra prestanda och tid.

Använd hellre PEAR::mail, eller min favorit PHPMailer, där du kan skicka mail till många mottagare "separat" utan att koppla ner anslutningen för varje mail. Dessutom är PHPMailer otroligt enkel att använda. Man behöver inte tänka på headers osv. om man inte vill...

youheardit 2010-08-18 10:18

jag gjorde på samma sätt som dig fast med 1100 mailadresser och det gick utmärkt, rulla på! dock högre vet jag inte hur det kommer bli...

JLE 2010-08-18 10:39

Förmodligen kommer många mail inte att komma fram. Testa att göra ett utskick till ett Hotmail samt ett Gmail konto.

Läs sedan exempelvis http://www.wn.se/t36666-15-2.html

robincox 2010-08-18 11:09

Citat:

Ursprungligen postat av qson (Inlägg 20365915)
Ditt webbhotell har förmodligen en gräns på hur många mail man får skicka. Det webbhotell jag använder har en gräns på 700 mail per timma, oavsett hur de skickas. Skickas fler mail än detta så tror jag man blir svartlistad.

Sen bör du inte använda PHP:s mail()-funktion för att skicka många mail i en loop. Den öppnar och stänger anslutningen till mailservern för varje mail den skickar. Det är onödigt och tar extra prestanda och tid.

Använd hellre PEAR::mail, eller min favorit PHPMailer, där du kan skicka mail till många mottagare "separat" utan att koppla ner anslutningen för varje mail. Dessutom är PHPMailer otroligt enkel att använda. Man behöver inte tänka på headers osv. om man inte vill...

Jag testade lite med phpMailer och det verkar funka. Bara en fråga, ska jag använda sendmail eller mail?

qson 2010-08-18 11:33

Enkelt exempel på att använda PHPMailer:
PHP-kod:

<?php

$mejl
[0] = '[email protected]';
$mejl[1] = '[email protected]';
$mejl[2] = '[email protected]';
/* ...och så vidare till nr. 800... */

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // använd SMTP-server
$mail->Host     "smtp.example.com"// SMTP server

$mail->From     "[email protected]";     // Avsändar-adressen

foreach ($mejl as $mejladress) {
  
$mail->AddAddress($mejladress); // Mottagar-adressen
}

$mail->Subject  "Mitt första PHPMail";     // Rubriken
$mail->Body     "Ett trevligt massmail.";  // Meddelandet
$mail->WordWrap 50;       // Word-wrap, hur långa skall raderna vara

if(!$mail->Send()) {
  echo 
'Meddelandet skickades inte.';
  echo 
'Mailfel: ' $mail->ErrorInfo;
} else {
  echo 
'Meddelandet skickades';
}
?>

MEr info här:
http://phpmailer.worxware.com/index.php?pg=tutorial

Jonas 2010-08-18 11:40

Citat:

Ursprungligen postat av qson (Inlägg 20365930)
Enkelt exempel på att använda PHPMailer:
...

MEr info här:
http://phpmailer.worxware.com/index.php?pg=tutorial

qson > Tror inte alla mottagare vill se varandras adresser.

PHP-kod:

<?php

$mejl
[0] = '[email protected]';
$mejl[1] = '[email protected]';
$mejl[2] = '[email protected]';
/* ...och så vidare till nr. 800... */

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // använd SMTP-server
$mail->Host     "smtp.example.com"// SMTP server

$mail->From     "[email protected]";     // Avsändar-adressen
$mail->AddAddress('[email protected]');    // Mottagar-adressen

foreach ($mejl as $mejladress) {
  
$mail->AddBCC($mejladress);  // Mottagare
}

$mail->Subject  "Mitt första PHPMail";     // Rubriken
$mail->Body     "Ett trevligt massmail.";  // Meddelandet
$mail->WordWrap 50;       // Word-wrap, hur långa skall raderna vara

if(!$mail->Send()) {
  echo 
'Meddelandet skickades inte.';
  echo 
'Mailfel: ' $mail->ErrorInfo;
} else {
  echo 
'Meddelandet skickades';
}
?>


qson 2010-08-18 11:46

Citat:

Ursprungligen postat av Jonas (Inlägg 20365932)
qson > Tror inte alla mottagare vill se varandras adresser.

Aha, i gamla versionen av phpmailer skickades ett mail per mottagare. Nu läggs tydligen alla adresser i to-fältet samtidigt.

Finns dock en inställning som skickar individuella mail:
PHP-kod:

$SingleTo      public      false      Provides the ability to have the TO field process individual emailsinstead of sending to entire TO addresses 

Här är uppdaterad kod:
PHP-kod:

<?php

$mejl
[0] = '[email protected]';
$mejl[1] = '[email protected]';
$mejl[2] = '[email protected]';
/* ...och så vidare till nr. 800... */

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // använd SMTP-server
$mail->Host     "smtp.example.com"// SMTP server

$mail->From     "[email protected]";     // Avsändar-adressen

foreach ($mejl as $mejladress) {
  
$mail->AddAddress($mejladress); // Mottagar-adressen
}

$mail->Subject  "Mitt första PHPMail";     // Rubriken
$mail->Body     "Ett trevligt massmail.";  // Meddelandet
$mail->WordWrap 50;       // Word-wrap, hur långa skall raderna vara

$mail->SingleTo true// Se till att individuella mail skickas!

if(!$mail->Send()) {
  echo 
'Meddelandet skickades inte.';
  echo 
'Mailfel: ' $mail->ErrorInfo;
} else {
  echo 
'Meddelandet skickades';
}
?>

Jag gillar inte BCC, det står då en annan mottagare än sig själv, t.ex. "To: Undisclosed recipients"

abergman 2010-08-18 13:56

Citat:

Ursprungligen postat av robincox (Inlägg 20365912)
Jag tänkte skicka iväg ett mejl till ca. 800 e-postadresser. Jag har skrivit en liten kodsnutt som ser till att skicka varje mejl separat:

$mejl[0] = [email protected]
$mejl[1] = [email protected]
$mejl[2] = [email protected]
...och så vidare till nr. 800...

for (i=0;i<=800;i++) {

$to = $mejl[$i];
$subject = "Hej";
$message = "Ett finfint meddelande";
$from = "[email protected]";
$headers = "From: $from";
mail($to,$subject,$message,$headers);

}

Det här borde väl vara ett säkert sätt att massmejla utan att bli svartlistad?

Om spamfiltret på mottagarsidan ser att du skickar ut massor med mail med korta mellanrum så kommer de att grålista dig. Dessutom bör IPt du skickar från ha en PTR, samt att domänen bör ha SPF konfigurerat.

Jag rekomenderar att använda phplist, den sköter allt och lite till:)

studiox 2010-08-19 15:46

Jag rekommenderar INGEN att skicka mail direkt från en "vanlig" webbserver, det är inte smart om man vill att mottagaren ska kunna läsa mailet.

Ditt webbhotell kan ju ha några synpunkter på det också :)

använd en extern tjänst istället. Fast om du inte vill betala något och typ skiter i om mottagaren får mailet då går det ju :)


Alla tider är GMT +2. Klockan är nu 19:53.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson