02. maj 2002 - 00:39Der er
62 kommentarer og 1 løsning
mailliste ved hjælp af fsockopen
jeg har ladet mig fortælle at større maillister ikke er så smart at lave med mail(), men skal bruge fsockopen istedet, nu har jeg så kigget på php.net samt her på eksperten, men kan ikke rigtigt forstå hvordan det egentlig virker, så fulgte jeg dette link http://www.zend.com/codex.php?id=347&single=1 og forvirringen er fuldkommen!! er der en der kan skære ud i pap for mig hvordan man lige får det til at hænge sammen med en mailliste der er lagret i en mysql database :-)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
hmm, det vil sq ikke lige helt som jeg vil, dette er min "sovs"
<?php $from = "ztyxx@server.dk"; $header = "Content-type: text/plain; charset=ISO-8859-1"; $subject = "Test af fsockopen()"; $body = "Dette er en test"; $smtp = smtp_client();
mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error()); mysql_select_db("ztyxx") or die (mysql_error()); $res = mysql_query("select * from mailliste order by id asc") or die (mysql_error()); while ("list = mysql_fetch_row($res)") { $smtp->email("$from", "$email", "$header", "$subject", "$body"); } $smtp->send();
mysql_close(); ?>
det giver:
Fatal error: Call to undefined function: smtp_client() in c:\programmer\apache group\apache\htdocs\phptest\ml.php on line 6 både med og uden smtp angivet
hvordan angiver man funktionen for smtp_client() er det der fsockopen() skal bruges, i så fald, hvad skal der stå i den, smtp server eller server og port??
hmm har både prøvet function () m.m. for at angive smtp_client() men kan ikke få det til at spille, og det er sikkert meget enkelt, kan bare ikke se skoven for bar træer
$from = "ztyxx@server.dk"; $header = "Content-type: text/plain; charset=ISO-8859-1"; $subject = "Test af fsockopen()"; $body = "Dette er en test"; $smtp = "smtp_client('localhost', 80)";
mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error()); mysql_select_db("ztyxx") or die (mysql_error()); list($email) = mysql_fetch_row(mysql_query("select email from mailliste")); $smtp->email("$from", "$email", "$header", "$subject", "$body");
$smtp->send();
mysql_close(); ?>
så siger den pludselig:
Fatal error: Call to a member function on a non-object in c:\programmer\apache group\apache\htdocs\phptest\ml.php on line 12 og hvad betyder det så??
dava> du siger include class´en på zend ser den sådan ud class smtp_client { var $connection; var $server; var $elog_fp; var $log_file='./smtp_client.log'; var $do_log=true;
det er så der jeg kommer i tvivl, jeg kan ikke rigtigt gennemskue den, skal den så sættes sådan:
smtp_client() (dvs. uden argumenter) kalder localhost på port 25
Hvis man vil have en anden server, kan man skrive smtp_client('servernavn'), men så vidt jeg kan se er der da ikke plads til portnummer.
Du skal ikke ændre de variable som står øverst i klassen! var $connection; <-- styrer den selv var $server; <-- angives via inputargument til smtp-client() var $elog_fp; <-- styrer den selv (filpointer) var $log_file='./smtp_client.log'; <-- navn på logfil - kan ændres var $do_log=true; <-- ja eller nej til logning - kan ændres
skramlet er det som angivet på zend, det er pastet direkte ind, $smtp-objektet?? er det de linie der hedder // default constructor function smtp_client($server='') {
oki, så er det fjernet, men får stadig Fatal error: Call to a member function on a non-object in .... i linien $smtp->email("$from_mail", "$to_mail", "$to_name", "$header", "$subject", "$body");
tror sq jeg dropper det, har brugt over 9 timer på det, det må være rigeligt, finder et færdigt script og smider op istedet. dava og erikjacobsen smid lige svar hvis i også vil have lidt af point´ene
function send() { if ($this->connection) { fputs($this->connection, "QUIT\r\n"); fclose($this->connection); $this->connection=0; } }
function close() { $this->send(); }
function elog($text, $mode=0) { if (!$this->do_log) return;
// open file if (!$this->elog_fp) { if (!($this->elog_fp=fopen($this->log_file, 'a'))) return; fwrite($this->elog_fp, "\n-------------------------------------------\n"); fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n"); fwrite($this->elog_fp, "-------------------------------------------\n"); }
// write to log if (!$mode) fwrite($this->elog_fp, " $text\n"); else fwrite($this->elog_fp, "$text\n"); } }
mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error()); mysql_select_db("ztyxx") or die (mysql_error());
$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());
$from = "ztyxx@server.dk"; // skal selvfølgelig være din rigtige adresse! $header = "Content-type: text/plain; charset=ISO-8859-1"; $subject = "Test af fsockopen()"; $body = "Dette er en test";
$smtp = smtp_client(); // brug smtp_client('smtphostname') hvis det ikke er localhost!
Så jeg vil foreslå, at du skriver en mail til freepaq og spørger hvad deres smtp-server hedder når du skal connecte direkte til den fra et php-script - og om den evt. kræver noget authentication!
ja ikk´det var sq ved at drive mig til vanvid, normalt plejer jeg at kunne gennemskue koder ved at studere dem nøje, men denne var ved at få bugt med mig, og som jeg sagde tidligere, lå løsningen jo lige foran eén, tænkte overhovedet ikke på at bruge smtp.freepaq.dk, da der i phpinfo´en stod localhost
ztyxx -> hvordan kom scriptet til at se ud da du fik det til at virke.... sidder nemlig selv og bøvler med at lave noget til en liste med +4500 modtagere på......... og det vil ikke rigtigt..... Hvis du evt. gider at poste det her eller sende det til mig på intercode@mail1.stofanet.dk :-))
<?php class smtp_client { var $connection; var $server; var $elog_fp; var $log_file='./smtp_client.log'; var $do_log=true;
// default constructor function smtp_client($server='smtp.server.dk') { //din udbyders smtp server if (!$server) $this->server="localhost"; else $this->server=$server;
$this->connection = fsockopen($this->server, 25); if ($this->connection <= 0) return 0;
function send() { if ($this->connection) { fputs($this->connection, "QUIT\r\n"); fclose($this->connection); $this->connection=0; } }
function close() { $this->send(); }
function elog($text, $mode=0) { if (!$this->do_log) return;
// open file if (!$this->elog_fp) { if (!($this->elog_fp=fopen($this->log_file, 'a'))) return; fwrite($this->elog_fp, "\n-------------------------------------------\n"); fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n"); fwrite($this->elog_fp, "-------------------------------------------\n"); }
// write to log if (!$mode) fwrite($this->elog_fp, " $text\n"); else fwrite($this->elog_fp, "$text\n"); } }
mysql_connect("mysql.server.dk", "bruger" ,"*******") or die (mysql_error()); mysql_select_db("database") or die (mysql_error());
$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());
$from = "mail@server.dk"; //din egen mail :-) $header = "Content-type: text/plain; charset=ISO-8859-1"; $subject = "Test af fsockopen()"; $body = "Dette er en test";
hmmm hvordan får jeg den til at indsætte datoen i log_fil navnet... ?
Har prøvet dette : $dato = date("dmY-H_i",time()); class smtp_client { var $connection; var $server; var $elog_fp; var $log_file='/home/domæne/web/log/smtp_$dato.log'; var $do_log=true;
Så kommer filnavnet blot til at være smto_$dato.log når jeg ser file.... hvorfor nu det... er det fordi det er en class at man ikek kan "sammensætte" variablerne ?
cyberdude: heh - det er nok lidt sent (et par måneder?) men det er fordi du bruger single quotes i stedet for dobbelt - altså ' ' i stedet for " "
-Alrua
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.