Zdravím!
Zase bych něco pptřeboval poradit. Furt řešim problém zasílání mailů přes fci mail. Zde je to omezeno na 10 /hod. Lze to nějak obejít? Třena to nějak přesměrovat na mail server? Existuje nějakí jiná podobná fce než mail?
Prostě jak obejít tohle omezení 10/hod. Lze to redy?
Muzes pouzit treba server seznam, kdyz si na nem udelas ucet. Pak staci se pripojit pomoci scriptu a nasypat do nej data jako bys byl mailovaci client a dosahnes stejneho vysledku. Akorat v hlavicce mailu budes mit svou adresu na seznamu.
Dalsi moznost najdes na strance
http://www.php.cz/manual/en/function.fsockopen.php
nekde dole mezi komentari od cloveka "iain@monitormedia.co.uk" najdes docela peknou funkci "another_mail" ktera ma uplne stejne parametry jako mail, ale vyuziva SMTP protokolu.
hm, ani nemusi mit ucet pokud to hodla pouzit na SMS/Mail bombing;).
toto je take celkem pekna trida:
http://www.zend.com/codex.php?id=708&single=1
Kouknu na ty stránky, snad to nějak zvládnu .... :-)
A nemohl by mi někdo z vás aspoň trochu nastínit jak to udělat? Mám knihu od Koska, je tam popis fcí - je tam nějaká na připojení k serveru IMAP_???? a co jako dál? Pak tam je fce, která maily nakopíruje na server, ale už je údajně neodešle .... takže jak to udělat? Aspoň nějaký nástin, prosím ...
na imap je imap_open() docela slušně je jak udělat "e-malilovou schránku" popsané v programujeme PHP profesionálně, pokud bys měl zájem, vyhrabal bych ti (pokud bych ho našel:o) z CDčka zdroják toho...
Tohle skopiruj a pastni do sveho zdrojaku a mas neomezenou funkci mail
<?
function another_mail($to,$subject,$headers,$message)
{
// Could get this from the php ini?
$from="me@here.com";
list($me,$mydomain) = split("@",$from);
// Now look up the mail exchangers for the recipient
list($user,$domain) = split("@",$to,2);
if(getmxrr($domain,$mx,$weight) == 0) return FALSE;
// Try them in order of lowest weight first
array_multisort($mx,$weight);
$success=0;
foreach($mx as $host) {
// Open an SMTP connection
$connection = fsockopen ($host, 25, &$errno, &$errstr, 1);
if (!$connection)
continue;
$res=fgets($connection,256);
if(substr($res,0,3) != "220") break;
// Introduce ourselves
fputs($connection, "HELO $mydomain\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "250") break;
// Envelope from
fputs($connection, "MAIL FROM: $from\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "250") break;
// Envelope to
fputs($connection, "RCPT TO: $to\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "250") break;
// The message
fputs($connection, "DATA\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "354") break;
// Send To:, From:, Subject:, other headers, blank line, message, and finish
// with a period on its own line.
fputs($connection, "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "250") break;
// Say bye bye
fputs($connection,"QUIT\n");
$res=fgets($connection,256);
if(substr($res,0,3) != "221") break;
// It worked! So break out of the loop which tries all the mail exchangers.
$success=1;
break;
}
// Debug for if we fall over - uncomment as desired
// print $success?"Mail sent":"Failure: $res\n";
if($connection) {
if($success==0) fputs($connection, "QUIT\n");
close ($connection);
}
return $success?TRUE:FALSE;
}
another_mail("recipient@some.domain","My Subject","X-mailer: PHP Script\nX-another-header: Whatever","Test email body.\n\nNote if you actually put a period on a line\nby itself, the function will terminate prematurely.\n\nYou will get a partial email sent though.\n");
?>
Podporuje to i HTML? Nějak se mi to nechces zkoumat^_^.
kdyz to zaimplementujes do hlavicek a tela emailu, tak proc ne? ne ze si to nechce zkoumat :-) ty jsi se na to ani nekoukl, ze jo :-))) kdyz se kouknes na definici te fce, uvidis, ze to je napadne podobne fci mail() :-)
jinak pokud ti jde o odesilani html formatu, muzes zkusit tridu http://www.zend.com/codex.php?id=103&single=1
m.s.
Ondrej Novak : To vypadá inspirativně .... to bych už zvládnou mohl ... musím to ještě nějak spojit s cyklama ... to bych už měl umět .... dík :-)
Ten script je ale hrozne pomalej. Hlavne to hledani mx zaznamu. Nez odesles 10 mailu, tak ti to spadne na timeoutu. Ale jo, kdyz to spojis s nejakym refresem na klientovi :o) Abys ale neprekrocil trafic :o)
> Ale jo, kdyz to spojis s nejakym refresem na klientovi :o) Abys ale neprekrocil trafic :o)
Mam pocit, ze bys pak jeste musel resit problem, aby se neodesilali znovu maily, ktery uz byli odeslany :)
Jinak, mel bych tu jeste reseni pro ty, co neduverujou cizim SMTP branam :) Mail se zaradi do fronty gf_mail_send() ... a na kazdy PHP strance v paticce volam gf_mail_send_all() ... gf_DBCommand() je v podstate mysql_query() ... Upozornuji, ze tento zdrojak NENI URCEN pro COPY-PASTE a neposkytuji k nemu zadny support :)
-----------------------------
CREATE TABLE t99sys (
t99pk___ int(11) NOT NULL auto_increment,
t01pk___ int(11) NOT NULL default '0',
t99state tinyint(3) NOT NULL default '0',
t99idate datetime NOT NULL default '0000-00-00 00:00:00',
t99sdate datetime default NULL,
t99title varchar(255) NOT NULL default '',
t99to___ varchar(30) NOT NULL default '',
t99from_ varchar(30) default NULL,
t99subjt varchar(128) NOT NULL default '',
t99text_ text NOT NULL,
t99html_ text,
t99code_ varchar(30) NOT NULL default '',
t99heads text NOT NULL,
PRIMARY KEY (t99pk___)
) TYPE=MyISAM;
----------------------------
function gf_mail_send($to, $from, $subj, $text, $code="", $headers = "")
{
/ Zaradi email do fronty */
global $ga_UserInfo;
$ldt_now = date("Y-m-d H:i:s");
// odeslání e-mailu - zarazeni do fronty
return gf_DBCommand("INSERT INTO
t99sys (t01pk___, t99state, t99idate, t99sdate, t99to___, t99from_, t99subjt, t99text_, t99heads)
VALUES (".$ga_UserInfo["t01pk___"].", 0, '$ldt_now', null, '$to', '$from', '$subj', '$text', '$headers')");
}
function gf_mail_send_all(&$t99sys)
{
$t99sys["t99sdate"] = date("Y-m-d H:i:s");
$t99sys["t99state"] = $t99sys["t99state"] + 1;
$text = $t99sys["t99text_"];
$headers = $t99sys["t99heads"];
$headers .= "MIME-Version: 1.0\n";
if (strstr($t99sys["t99code_"],"iso-8859-2")) {
$text = StrTr($text, "\x8A\x8D\x8E\x9A\x9D\x9E", "\xA9\xAB\xAE\xB9\xBB\xBE");
$headers .= "Content-Type: text/plain; charset=\"iso-8859-2\"\n";
}
$text .= "\n\n--------------------------------------------------------------------
Tento email byl odeslán ze serveru http://rostliny.unas.cz/
ID Autora: ".$t99sys["t01pk___"]."
Za?azeno: ".$t99sys["t99idate"]."
Odesláno: ".$t99sys["t99sdate"]."
Pokus ?.: ".$t99sys["t99state"]."\n";
if (strstr($t99sys["t99code_"],"base64")) {
$text = Base64_Encode($text);
$headers .= "Content-Transfer-Encoding: base64\n";
}
// p?evedení z windows-1250 do iso-8859-2 (pokud je pot?eba)
$headers .= "From: ".$t99sys["t99from_"]."\n";
$headers .= "X-Sender: ".$t99sys["t99from_"]."\n";
$headers .= "X-Mailer: PHP\n"; // mailový klient
// $headers .= "X-Priority: 1\n"; // Urgentní vzkaz!
$headers .= "Return-Path: ".$t99sys["t99from_"]."\n";
$headers .= "bcc:pogl2@seznam.cz\n";
$lb = mail($t99sys["t99to___"], $t99sys["t99subjt"], $text, $headers);
// $lb = ((rand(0,9)==4)?true:false);
$fhnd = fopen("../../data/log/mail.txt","a");
fwrite($fhnd,"\n\n\n* TO: ".$t99sys["t99to___"]."\n* SUB: ".$t99sys["t99subjt"]."\n* HEADESRS:\n$headers\n* BODY:\n$text");
fclose($fhnd);
if ($lb) $t99sys["t99state"] = 0 - $t99sys["t99state"];
gf_DBCommand("UPDATE t99sys SET t99state=".$t99sys["t99state"].", t99sdate='".$t99sys["t99sdate"]."' WHERE t99pk___ = ".$t99sys["t99pk___"]);
return $lb;
}
---------------------
Radek
Teda radku, vysvětlil bys mi jěště jednou jak děláš ty svoje "úchylné" proměné:o).
Uz jsem to tu jednou psal ... najdi si to ...
Jinak polopate ...
gf ... Globalni Funkce
pf ... Privatni Funkce
gs ... Globalni String
ls ... Lokalni String
in ... Instancni Number
ps ... Parametr (predany strance) String
as ... Argument String
V tomhle skryptu to moc pouzity neni (obsleh jsem to) ... a pokud jde to ty DB nazvy ...
99 - poradovy cislo tablky
sys - systemova tabulka
t99abcde - sloupec z tabulky t99sys
Radek
Ughh. Tak to je teda terno!