webForumDet fria alternativet
Logga in / Bli medlem

Mailadmin i PHP

PHP

10 svar · 374 visningar · startad av LAMP

Medlem sedan mars 2002777 inlägg
Trådstart#1

hej!

jag har ett nyhetsbrev med väldigt många medlemmar (dryga tusen). Hade först det lagrat i en databas och loopade ut breven med funktionen mail(), vilket tar ohyggligt lång tid (script timeout). Fick rådet av administratören på webhotellet att göra på annat vis.

Nu har jag tre textfiler:

* adresser.txt
* meddelandet.txt
* utskick.sh

kodsnutten i utskick.sh ser ut så här:

#!/bin/bash
ADRESSLISTA=$1
BREVET=$2

cat $ADRESSLISTA |
  while read ADRESS ; do    
   RETURADRESS=`echo $ADRESS | sed 's/@/AT/'`.nyhetsbrev@mindomän.com
   echo skickar till $ADRESS
   ( echo To: $ADRESS
     cat $BREVET
     echo Detta brev var skickat till $ADRESS
     echo Om du inte vill ha fortsatta utskick så vänligen
     echo kontakta minadress@mindomän.com. Tack. ) |
   /usr/sbin/sendmail -f $RETURADRESS $ADRESS
  done

Skickar sedan mailen med

$ chmod 700 utskick.sh
$ chmod 600 adresser.txt
$ chmod 600 meddelandet.txt
$ ./utskick.sh adresser.txt meddelandet.txt

visar resultat...

$ _

Nu till frågan, kan jag göra en enkel admin i PHP som utför uppgiften i utskick.sh och tar emot "nyheten" från ett formulär istället, så att man slipper logga in på SSH var gång?

Medlem sedan mars 20007 896 inlägg
#2

En tråd jag missat. :)

Kanske något sånt här fungerar?

<?php
if( $_POST[ 'msg' ] == "" ) {
     echo "<form action=\"" . $_SERVER[ 'PHP_SELF' ] . "\" method=\"POST\">";
     echo "<textarea name=\"msg\" id=\"msg\"></textarea>";
     echo "<input type=\"submit\" />";
     echo "</form>";

     exit;
}

$brevMeddelande = $_POST[ 'msg' ];
$filPekare = fopen( "meddelandet.txt", 'w' );
fputs( $filPekare, $brevMeddelande );
fclose( $filPekare );

exec( "./utskick.sh adresser.txt meddelandet.txt", $output );
// passthru( "./utskick.sh adresser.txt meddelandet.txt" );

...
?>

exec() exekverar din bash-kommando och resultatet hamnar i arrayen $output så att du kan behandla informationen. Behöver du inte behandla den, kan du lika gärna passthru() som skickar all information direkt tillbaka till klienten.

Hoppas nu att det var nåt sånt du menade. :)

Medlem sedan mars 2002777 inlägg
#3

Den skickar in meddelandet från formuläret i textfilen. Men det skickas aldrig iväg några mail. Jag får inte heller några felmeddelanden. :(

Medlem sedan mars 20007 896 inlägg
#4

Testa med att sätta:

error_reporting( E_ALL );

högst upp i ditt dokument, så får vi se om några notice:es kastas.

Medlem sedan mars 2002777 inlägg
#5

nej, ingenting då heller :(

Medlem sedan mars 20007 896 inlägg
#6

Testa följande då:
Kommentera bort raden med exec() i din PHP. Direkt efter att PHP-dokumetet exekverats klart, går du in i kommandoprompten och skriver ditt kommando manuellt:

$ ./utskick.sh adresser.txt meddelandet.txt

Fungerar det då?

Medlem sedan mars 2002777 inlägg
#7

Ja, det verkar fungera utan större beskymmer. :(

Medlem sedan mars 20007 896 inlägg
#8

Det verkar ju väldigt skumt. Du har inte satt safe_mode till on i php.ini?

Medlem sedan mars 2002777 inlägg
#9

Det är på webhotellet jag testkör. Kommer ij åt PHP.INI vad jag vet. Kan man få ut den infon med

php_info() ?

Medlem sedan mars 20007 896 inlägg
#10

Jäpp. Och som en liten notis kan jag lägga till att de flesta webhotell brukar köra med safe_mode påslaget.

Medlem sedan mars 2002777 inlägg
#11

Jo, så var fallet. Får se mig i stjärnorna efter detta och använda mig av kommandopromten även i fortsättningen.

Tack för ditt deltagande SPIN!

264 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)