Autor Zpráva
Flashman
Profil *
Zdravím všechny znalce php.

Mám web založený na redakčním systému phpRS (určitě všichni znáte) a hosting bohužel u Pipni. Ti nedávno zavedli omezení, při kterém lze poslat maximálně 20 mailů najednou. Já ale z redakčního systému posílám hromadné maily třeba pro 80 nebo 100 lidí.

Věděl by někdo o krátkém skriptu, kterým bych doplnil funkci pro rozesílání mailů v phpRS a který by maily rozesílal třeba po 20-ti?


Ocením každou radu!
Mordae
Profil
Co třeba odesílat jen 20 a pak se ze skriptu pomocí url fopen wrapperu (fopen('http:/nekam.dom/poslat.php?blok=XY', 'r')) dotázat znovu na tentýž skript, dokud nebude odesláno vše? Taková souborová rekurze...
Flashman
Profil *
:-) Jenže sranda je, že já vím o php asi jako moje babička o kosmonautice.

Jsem spíš čekal, že se někam dá cyklus, kterej si zjistí počet adres pro odesílání a v prvním průchodu cyklem pošle mail na adresy č. 1 až 20, pak 21 až 40 atd. Takže bych spíš potřeboval nějakou syntaxi, kterou akorát hodím do zdrojáku. Ale to asi dá dohromady jenom ten, kdo ví, jak phpRS funguje...
Anonymní
Profil *
a posíláš stejné maily nebo každýmu jiný mail ?
kaifman
Profil
lze používat smtp bránu seznamu, ale musíš u nich mít email tahle třída ti to všechno obslouží,
řešil jsem na pipni stejnen problém tak sem to udělal takhle...

<?php

class smtp {

//nastavení
var $smtp_use_login = true;
var $smtp_host = "smtp.seznam.cz";
var $smtp_port = 25; //standartni port
var $smtp_username = "";
var $smtp_password = "";
var $smtp_email_from= "odchozi@adresa.cz";
var $smtp_log_file = "smtp.log"; // soubor pro logovani erroru

function smtp($mail_to, $subject, $message) {
// Převedeme konce řádku na řetezce které vyhovují RFC821.
$message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);

$headers = "Mime-Version: 1.0\r\nX-Mailer: smtp.class.php\r\nContent-Type: text/plain; charset=windows-1250\r\n";

if (trim($subject) == '')
{
error_log("Nebyl zadán žádný předmět emailu",3,$this->smtp_log_file);
}

if (trim($message) == '')
{
error_log("Tělo emailu je prázné.",3,$this->smtp_log_file);
}

// pripojime se k smtp serveru
if( !$socket = fsockopen($this->smtp_host, $this->smtp_port, $errno, $errstr, 20) )
{
error_log("Nelze se připojit k SMTP serveru : $errno : $errstr",3,$this->smtp_log_file);
}

// Pockame na odpoved
$this->server_parse($socket, "220", __LINE__);

// autentizece ? jestlize je nastavena odesleme heslo a user name
if ($this->smtp_use_login)
{
fputs($socket, "EHLO " . $this->smtp_host . "\r\n");
$this->server_parse($socket, "250", __LINE__);

fputs($socket, "AUTH LOGIN\r\n");
$this->server_parse($socket, "334", __LINE__);

fputs($socket, base64_encode($this->smtp_username) . "\r\n");
$this->server_parse($socket, "334", __LINE__);

fputs($socket, base64_encode($this->smtp_password) . "\r\n");
$this->server_parse($socket, "235", __LINE__);
}
else // neni nastavena -> pozdravime server
{
fputs($socket, "HELO " . $this->smtp_host . "\r\n");
$this->server_parse($socket, "250", __LINE__);
}

// od pochazi email ???
fputs($socket, "MAIL FROM: <" . $this->smtp_email_from . ">\r\n");
$this->server_parse($socket, "250", __LINE__);

// pokud je $mail_to pole odesleme RCPT TO pro vsechny prvky pole

if (is_array($mail_to)) {
foreach ($mail_to as $mail_one){
if (preg_match('#[^ ]+\@[^ ]+#', trim($mail_one))) {
fputs($socket, "RCPT TO: <".trim($mail_one).">\r\n");
$this->server_parse($socket, "250", __LINE__);
}
}
} else {
if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
{
fputs($socket, "RCPT TO: <$mail_to>\r\n");
$this->server_parse($socket, "250", __LINE__);
}
}

// Rekneme serveru ze jsme pripraveni odesilat data
fputs($socket, "DATA\r\n");

// Toto je posledni vyckavani na odezvu serveru
$this->server_parse($socket, "354", __LINE__);

// posleme predmet
fputs($socket, "Subject: $subject\r\n");

// Komu?.
fputs($socket, "To: $mail_to\r\n");

// Odesleme hlavicku
fputs($socket, "$headers\r\n\r\n");

// Posleme telo zpravy
fputs($socket, "$message\r\n");

fputs($socket, ".\r\n");
$this->server_parse($socket, "250", __LINE__);

// Nyni uzavreme spojeni se serverem
fputs($socket, "QUIT\r\n");
fclose($socket);

return TRUE;
}

function server_parse($socket, $response, $line = __LINE__) {
$server_response = "";
while (substr($server_response, 3, 1) != ' ') {
if (!($server_response = fgets($socket, 256))) {
error_log("Nelze přijmout odezvu serveru",3,$this->smtp_log_file);
die ("Nelze přijmout odezvu serveru");
}
}

if (!(substr($server_response, 0, 3) == $response)) {
error_log("Nastala chyba při odesílání mailu. Odezva: $server_response",3,$this->smtp_log_file);
die ("Nastala chyba při odesílání mailu. Odezva: $server_response");
}
}


} // eof class smtp
?>
Flashman
Profil *
Rozesílám všem stejné maily.

KAIFMAN: Díky za skript, ale nevím, jestli si s tím poradím... :-) Btw, z Centrum.cz to nejde?
Flashman
Profil *
Tak problém je vyřešen. Našel jsem diskusi přesně o tomhle problému na oficiálních stránkách phpRS. Že mě to nenapadlo dřív... http://www.phprs.cz/forum/read.php?2,4767,page=2
Toto téma je uzamčeno. Odpověď nelze zaslat.

0