[addon nsmtpmailer] nSMTPMailer – knihovna pro SMTP mailování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
peci1
Člen | 60
+
0
-

Za chvíli commitnu knihovnu na git://github.com/peci1/nSMTPMailer.git , ale nejde mi založit stránka v Doplňcích :(

Honza Marek
Člen | 1664
+
0
-

Nedělal to už Vrták někdy?

peci1
Člen | 60
+
0
-

Honza Marek napsal(a):

Nedělal to už Vrták někdy?

Ano, dělal. Ale podle zdrojáků je to rychlokvaška. Zkoušel jsem ho, a funguje, ale kdo vi, jak moc…

Tohle jsem dělal do školy jako zápočťák, tak proc si to nechat kysnout na disku – a je to použitelný i bez Nette a pod new BSD licencí, která je mi bližší (Vrták na to dal LGPL) :)

Na https://github.com/…TPMailer.zip je ke stažení knihovna i s examples, až se mi podaří založit stránku v extras, tak to tam hodím.

romansklenar
Člen | 655
+
0
-

Á Clevis :) který Nette programátor z Prahy pro ně nedělá? :D

David Grudl
Nette Core | 8218
+
0
-

Mělo by to jít založit.

viktorc
Člen | 21
+
0
-

Diky za doplnok. Našiel som tam malú mušku, ktora branila odoslaniu:

COMMAND: MAIL FROM: <adresa@nekde.sk> SIZE 1255 BODY=8BITMIME
=======
RESPONSE LINE #1: 501 5.5.2 SIZE requires a value Diff:
diff -r bb58f007552a lib/nSMTPMailer/nSMTPMailer/Commands/MailCommand.php
--- a/lib/nSMTPMailer/nSMTPMailer/Commands/MailCommand.php Wed Feb 03 11:32:15 2010 +0100
+++ b/lib/nSMTPMailer/nSMTPMailer/Commands/MailCommand.php Wed Feb 03 11:39:44 2010 +0100
@@ -114,7 +114,7 @@
protected $acceptedExtensions = array('SIZE', '8BITMIME');

/** @var string String used for the SIZE extension */
- protected $sizeExtension = ' SIZE %u';
+ protected $sizeExtension = ' SIZE=%u';

/** @var NULL|int Size of the message to be sent (used by SIZE extension)*/
protected $emailSize = NULL;

A este drobnost:

diff -r bb58f007552a lib/nSMTPMailer/nSMTPMailer/Commands/DataCommand.php
--- a/lib/nSMTPMailer/nSMTPMailer/Commands/DataCommand.php Wed Feb 03 11:32:15 2010 +0100
+++ b/lib/nSMTPMailer/nSMTPMailer/Commands/DataCommand.php Wed Feb 03 11:43:03 2010 +0100
@@ -198,7 +198,7 @@
if (strlen($text) > self::MAX_LINE_LENGTH) {
$command[$line] = str_split($text, self::MAX_LINE_LENGTH);
$wasLongLine = TRUE;
- } else if ($text[0] == '.') $command[$line] = '.' . $text;
+ } else if (strlen($text) > 0 && $text[0] == '.') $command[$line] = '.' . $text;
}

if ($wasLongLine) {
peci1
Člen | 60
+
0
-

viktorc napsal(a):

Diky za doplnok. Našiel som tam malú mušku, ktora branila odoslaniu

Diky moc, uz jsem to commitnul (trochu pozde, ale bylo zkouskovy :) )

oaki
Člen | 11
+
0
-

Je to skvele, ale neviem preco mi vyhadzuje toto:
[23-Apr-2010 14:41:19] PHP Strict Standards: Declaration of MyMail::send() should be compatible with that of NMail::send() in /libs/MyMail.php on line 2
cim to moze byt? Mam to na PHP 5.3.2

Editoval oaki (23. 4. 2010 15:21)

marek.dusek
Člen | 99
+
0
-

Anglicky nemluvící vývojář by se měl stydět a okamžitě pelášit na kurzy ;)

Každopádně tyto chyby se vyskutují v případě, kdy překryješ (overridneš) nějakou metodu, ale její rozhraní není kompatibilní s předkem, takže třeba:

Předek:

metoda($neco, Trida $jineho)

A překrytí v potomkovi:

metoda($neco, JinaTrida $jineho)

… atp. Oprava je obvykle triviální, prostě si ty deklarace srovnej a uvidíš, co v té tvé MyMail::send() máš jinak oproti předkovi (pozor na namespaces atd.)

snipi
Člen | 20
+
0
-

mozno blba otazka, ale jak sa nastavuje Subject? nenasiel som ziadnu funkciu typu setSubject ani nic podobne… trosku blbeee ne?

peci1
Člen | 60
+
0
-

snipi napsal(a):

mozno blba otazka, ale jak sa nastavuje Subject? nenasiel som ziadnu funkciu typu setSubject ani nic podobne… trosku blbeee ne?

To neni problem maileru. Kdyz se podivas na ukazku na strance s doplnky , sice se tam setSubject nepouziva, ale volaji se tam ostatni metody (setBody…), a to vsechno na objektu $mail tridy Nette\Mail\Mail.

Jinak receno – vytvoreni emailu nema s knihovnou pro odesilani nic spolecneho. A doufam, ze se shodneme, ze subject je vlastnost emailu a ne knihovny, ktera ho ma pouze odeslat.

Tedy v reci ukazky z vyse zminovaneho odkazu:

$mail->setSubject("SPAM!!!");
snipi
Člen | 20
+
0
-

peci1 napsal(a):

snipi napsal(a):

mozno blba otazka, ale jak sa nastavuje Subject? nenasiel som ziadnu funkciu typu setSubject ani nic podobne… trosku blbeee ne?

To neni problem maileru. Kdyz se podivas na ukazku na strance s doplnky , sice se tam setSubject nepouziva, ale volaji se tam ostatni metody (setBody…), a to vsechno na objektu $mail tridy Nette\Mail\Mail.

Jinak receno – vytvoreni emailu nema s knihovnou pro odesilani nic spolecneho. A doufam, ze se shodneme, ze subject je vlastnost emailu a ne knihovny, ktera ho ma pouze odeslat.

Tedy v reci ukazky z vyse zminovaneho odkazu:

$mail->setSubject("SPAM!!!");

jo, to vse sedi kdyz to pouzivas v ramci nette, avsak kdyz to vezmes mimo nette, tak to je absentujici prvek, nebo se mylim?

peci1
Člen | 60
+
0
-

snipi napsal(a):

jo, to vse sedi kdyz to pouzivas v ramci nette, avsak kdyz to vezmes mimo nette, tak to je absentujici prvek, nebo se mylim?

Ahoj, tak koukam, ze jsi stale jeste 100% nepochopil ucel maileru. Jsou dve moznosti, jak email odeslat:

  1. Predat objektu tridy SmtpMailer objekt Nette\Mail (ten ma metodu setSubject()) – tzn. stacilo by z Nette vzit jeste tridy Mail a IMailer.
  2. Nebo pouzit primo SmtpClient (predpokladam, ze to je tvuj pripad). Pak ale metoda setBody nenastavuje pouze „obycejne“ telo mailu, nybrz veskery text, ktery bude jeho soucasti (tj. vcetne hlavicek atd.). No a to uz se dostavame k odpovedi na tvou otazku: predmet nastavis pridanim nasledujici hlavicky:
Subject: Muj skvely subject.
elektricman
Člen | 29
+
0
-

Jak nejlíp odeslat před nSMTPmailer hromadný email (infomail), kde ale každý příjmce má jiný obsah zbrávy (body) ,.. kvuli variabinímu symbolu při platbě, jménu a tak,..

Nějak aby se to na smtp.gmail.com připojilo jen jednou, a prostě to tam naházelo všechny emaily k odeslání?

Nebo te nejde líp, než prostěcykl, kde několikrát odešlu jeden email?

Díky za odpověd :)

peci1
Člen | 60
+
0
-

elektricman napsal(a):

Jak nejlíp odeslat před nSMTPmailer hromadný email (infomail), kde ale každý příjmce má jiný obsah zbrávy (body) ,.. kvuli variabinímu symbolu při platbě, jménu a tak,..

Nějak aby se to na smtp.gmail.com připojilo jen jednou, a prostě to tam naházelo všechny emaily k odeslání?

Nebo te nejde líp, než prostěcykl, kde několikrát odešlu jeden email?

Díky za odpověd :)

Ahoj, tohle API primo nepodporuje… Nicmene si muzes podedit SmtpClient. Podle zbezneho pohledu by melo stacit prepsat buildCommandQueue(), aby pri argumentech (NULL, FALSE) provedla serii operaci, ktere po maileru chces (tj. asi obalit cely vnitrek funkce (krome radku s HELO, ty muzes ignorovat) nejakym foreach). Pri ostatnich argumentech by mohlo stacit vratit to, co predek…

Rozhodne jsem to netestoval, ale mohlo by to fungovat…

bene
Člen | 82
+
0
-

Mohu se zeptat, jake nastaveni musim mit, kdyz chci posilat z smtp localu bez autentizace?

smtp.host = localhost
smtp.port = 25
smtp.transport = tcp
smtp.mechanism = PLAIN
smtp.username = username
smtp.password = password

tohle funguje, ale je to spravne? (mozna to funguje protoze tryUnauthenticated = true)
uzivatel „username“ samozrejme neexistuje

peci1
Člen | 60
+
0
-

bene napsal(a):

Mohu se zeptat, jake nastaveni musim mit, kdyz chci posilat z smtp localu bez autentizace?

smtp.host = localhost
smtp.port = 25
smtp.transport = tcp
smtp.mechanism = PLAIN
smtp.username = username
smtp.password = password

tohle funguje, ale je to spravne? (mozna to funguje protoze tryUnauthenticated = true)
uzivatel „username“ samozrejme neexistuje

rychlym pohledem do zdrojaku vidim, ze pokud $username.$password == '', pak se mailer o autentizaci nepokousi…

tj. nastaveni

smtp.mechanism=
smtp.username=
smtp.password=

by melo fungovat „cistym“ zpusobem

bene
Člen | 82
+
0
-

rychlym pohledem do zdrojaku vidim, ze pokud $username.$password == '', pak se mailer o autentizaci nepokousi…

tj. nastaveni

smtp.mechanism=
smtp.username=
smtp.password=

by melo fungovat „cistym“ zpusobem

Diky,

p.s. nejaka bool hodnota useAuthentication by se mi libila vice ;-)