webForumDet fria alternativet

Mailadmin i PHP

10 svar · 374 visningar · startad av LAMP

LAMPMedlem sedan mars 2002729 inlägg
#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?

SPiNMedlem sedan mars 20005 832 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. :)

LAMPMedlem sedan mars 2002729 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. :(

SPiNMedlem sedan mars 20005 832 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.

LAMPMedlem sedan mars 2002729 inlägg
#5

nej, ingenting då heller :(

SPiNMedlem sedan mars 20005 832 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å?

LAMPMedlem sedan mars 2002729 inlägg
#7

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

SPiNMedlem sedan mars 20005 832 inlägg
#8

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

LAMPMedlem sedan mars 2002729 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() ?

SPiNMedlem sedan mars 20005 832 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.

LAMPMedlem sedan mars 2002729 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!

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb