Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
NouF
Člen
Avatar
NouF:13. února 16:00

Odeslat emaily rychleji, aktuální nastavení funguje tak, chci odeslat email, použiju server Amazonu SES a odešle se. Toto trvá cca 2s.

Používám nette fw a připojení amazon ses. Aktuálně mám jen loop emailů a vždy probehně odeslání, jen to mám špatně napsané. 1 email = 1request na amazon

Máte někdo zkušenost s Amazon SES?

Chci docílit: Rád bych poslal cca 8-10 emailů za vteřinu (tak jako je můj limit od Amazonu)

 
Odpovědět 13. února 16:00
Avatar
NouF
Člen
Avatar
Odpovídá na NouF
NouF:13. února 16:03

Já používám něco takového.

$options = [
    'host' => 'email-smtp.eu-west-1.amazonaws.com', // například tento, záleží podle regionu
    'username' => 'xxx',
    'password' => 'yyy',
    'secure' => 'ssl'
    'persistent' => true,
];

$message = new \Nette\Mail\Message();
$message->setFrom('[email protected]', 'Název odesilatele')
    ->addTo('[email protected]')
    ->setSubject('PHP Předmět')
    ->setHtmlBody('Máme rádi PHP!');

$smtpMailer = new \Nette\Mail\SmtpMailer($options);
$smtpMailer->send($message);
 
Nahoru Odpovědět 13. února 16:03
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. února 9:56

8-10 emailů za vteřinu

U mailu je zasadni problem spam. Ruzna antispamova opatreni zabranuji odesilat vice mailu soucasne.
Je treba s takovou transakci dohodnout se spravcem serveru, ktery maily odesila.

K odesilani mailu muzes pouzivat server, kde web bezi. Nemusis pouzivat externi sluzbu.
V obou pripadech plati, ze ta sluzba ma nastavena nejaka omezeni a antispamova opatreni. Zalezi hodne na tom, kolik platis.

Pokud se chces vyhnout antispamu, jsou na to ruzna pravidla.

  • domluva se spravcem a info od nej
  • do kazdeho mailu pridat specialni unikatni kod, podle pokynu spravce
  • odesilat behem noci (0-4h), protoze inet je okupovan uzivateli mezi 8-24h, spicky 10h (lide v praci), 14h, 16-19h (druha smena, lide z prace, deti doma)
  • dalsi pravidla
 
Nahoru Odpovědět 14. února 9:56
Avatar
NouF
Člen
Avatar
Odpovídá na Peter Mlich
NouF:14. února 10:52

Ahoj, u Amazonu mám sjednaný limit 14 mailu za s a 50 000 za den. Takže v tomto bych problém nevidel, spíš jde o to, že dlouho trvá připojení k Amazonu, takže bych rád našel řešení - jeden request na připojení k serveru a pak jen posílání a odpojení. A né připojit, poslat odpojit, připojit poslat odpojit.

Díky

 
Nahoru Odpovědět 14. února 10:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. února 12:17

google = php conect to mail server
https://www.lifewire.com/…-ssl-1171197
Tady pisou, ze pouzivaji pear mail. Ale tusim, ze firemni admin rikal, ze byla v pear ted nalezena nejaka chybka, tak ti to asi nepujde spustit na vasem serveru.

https://www.hostinger.com/…ing-php-mail
Tady pouzivaji phpmailer.

google = php conect to mail server lot of mail socket
http://php.net/…map-open.php

google = php mail socket
https://stackoverflow.com/…-with-socket

$fp=  fsockopen("smtp.myhost.com", 25);
fputs($fp, "EHLO your.domain\r\n");
fputs($fp, "AUTH LOGIN\r\n");
fputs($fp, "MAIL FROM:" . $from_mail . "\r\n");
fputs($fp, base64_encode($login) . "\r\n");
fputs($fp, base64_encode($password) . "\r\n");
fputs($fp, "RCPT TO:" . $mail_to . "\r\n");
fputs($fp, "DATA\r\n");
fputs($fp, $header . "\r\n" . $text . "\r\n.\r\n");
fputs($fp, "QUIT\r\n");

https://schoudhury.com/…h-fsockopen/

function smtp_mail($to, $subject, $message, $headers = '')
{
    $recipients = explode(',', $to);
    $user = '<your mail id>';
    $pass = '<your password>';
    // The server details that worked for you in the above step
    $smtp_host = '<server>';
    //The port that worked for you in the above step
    $smtp_port = 465;

    if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15)))
    {
      echo "Error connecting to '$smtp_host' ($errno) ($errstr)";
    }

    server_parse($socket, '220');

    fwrite($socket, 'EHLO '.$smtp_host."\r\n");
    server_parse($socket, '250');

    fwrite($socket, 'AUTH LOGIN'."\r\n");
    server_parse($socket, '334');

    fwrite($socket, base64_encode($user)."\r\n");
    server_parse($socket, '334');

    fwrite($socket, base64_encode($pass)."\r\n");
    server_parse($socket, '235');

    fwrite($socket, 'MAIL FROM: <'.$user.'>'."\r\n");
    server_parse($socket, '250');

    foreach ($recipients as $email)
    {
        fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
        server_parse($socket, '250');
    }

    fwrite($socket, 'DATA'."\r\n");
    server_parse($socket, '354');

    fwrite($socket, 'Subject: '
      .$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'
      ."\r\n".$headers."\r\n\r\n".$message."\r\n");

    fwrite($socket, '.'."\r\n");
    server_parse($socket, '250');

    fwrite($socket, 'QUIT'."\r\n");
    fclose($socket);

    return true;
}

//Functin to Processes Server Response Codes
function server_parse($socket, $expected_response)
{
    $server_response = '';
    while (substr($server_response, 3, 1) != ' ')
    {
        if (!($server_response = fgets($socket, 256)))
        {
          echo 'Error while fetching server response codes.', __FILE__, __LINE__;
        }
    }

    if (!(substr($server_response, 0, 3) == $expected_response))
    {
      echo 'Unable to send e-mail."'.$server_response.'"', __FILE__, __LINE__;
    }
}

https://gist.github.com/…ross/2002233

Editováno 14. února 12:18
 
Nahoru Odpovědět 14. února 12:17
Avatar
NouF
Člen
Avatar
Odpovídá na Peter Mlich
NouF:14. února 21:08

Ahoj, zatim díky, prokoušu se informacema a dám ti vědet, jestli sem něco vymyslel.

Děkuju

 
Nahoru Odpovědět 14. února 21:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.