MAIL GMAIL: nově hlásí SSL operation failed with code 1
- rerege
- Člen | 58
Hoy lidi,
z ničehonic (resp. asi po nějaké změně na GMAILu) mi nelze posílat maily,
hlásí to:
stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
- trochu mi není jasné, jak to, že to před tím šlo
- pak nevím, jestli vůbec takovýto kód je v pořádku
$mailer = new Nette\Mail\SmtpMailer([
'host' => 'smtp.gmail.com',
'port' => '587',
'username' => 'xyz@gmail.com',
'password' => 'heslo',
'secure' => 'tls',
]);
$mailer->send($mail);
musel jsem totiž kvůli tomu na GMAILu povolit
Nastavení Povolit méně bezpečné aplikace: Zapnuto
- nu a hlavně mám teď problém s tou hláškou (viz výše)
sice to dokážu vyřešit, přidáním do SmtpMaileru.php ty 3 řádky option /viz níže), ale takovéto znásilňování do frameworku se mi tuze nelíbí – to se přeci nikdy nedělá ne?
if ((int) $this->read() !== 250) {
$this->write("HELO $self", 250);
}
stream_context_set_option($this->connection, 'ssl', 'verify_peer', FALSE);
stream_context_set_option($this->connection, 'ssl', 'verify_peer_name', FALSE);
stream_context_set_option($this->connection, 'ssl', 'allow_self_signed', TRUE);
if ($this->secure === 'tls') {
prosím, můžete mi poradit, jak posíláte maily Vy? – mám nyní možnost to celé předělat a do budoucna budu chtít z GMAILu přejít na samotný hosting (Savanu), aby adresy měly koncovku dle domény … myslím, že to pro eshopy není profesionální používat GMAIL, myslím to správně?
díky moc
za pomoc
Váňa
Editoval rerege (4. 9. 2017 11:06)
- matopeto
- Člen | 395
Urcite nepreskakuj verifikovanie ssl!!!
Chyba sa da mozno opravit akutalizaciou certifikatov v php
vid:
https://forum.nette.org/…-tela-emailu#…
Pripadne napis podpore hostingu. Niekde v logu mozno budes mat i preco overenie ssl zlyhalo…
Suhlas, pokial ma eshop vlastnu domenu mal by posielat maily so svojej domeny :)
Druha vec je trochu mimo povodnej otazky ale nevytvaraj mailer rucne ale pouzi DI a konfiguraciu pomocou (local)neonu – ak to mas niekde v presentru
Editoval matopeto (4. 9. 2017 13:31)
- rerege
- Člen | 58
@matopeto velice díky
kdyby to někomu pomohlo:
config.neon
mail:
smtp: true # zapne SmtpMailer místo SendmailMailer
host: smtp.savana.cz
port: 465
username: info@domena.cz
password: *******
secure: ssl # povolené hodnoty jsou ssl, tls nebo null
a v presenteru
/**
* @var Nette\Mail\IMailer
*/
private $mailer;
public function injectMailer(Nette\Mail\IMailer $mailer) {
$this->mailer = $mailer;
}
a samotné odesílání
$mail = new Message;
$mail->setFrom($this->email)
->addTo($email)
->setSubject('Změna stavu objednávky')
->setHtmlBody($template);
try {
$this->mailer->send($mail);
} catch (SendException $e) {
Debugger::log($e);
throw new SendException('Bohužel se nepodařilo odeslat potvrzovací email.', $e->getCode(), $e);
}
- rerege
- Člen | 58
mě snad klepne…
totální kravina, ale nejsem štonc to elegantně vyřešit
$mail = new Message;
$mail->setFrom('info@domena.cz')
->addTo($email)
->setSubject('Změna stavu objednávky')
->setHtmlBody($template);
Místo ručního zápisu 'info@domena.cz' si chci předat
$this->mailer->username injektovaný z configu.neon
když to ale zadám takto
$mail->setFrom($this->mailer->username)
tak to hodí chybu:
Nette\MemberAccessException: Cannot read an undeclared property
Nette\Mail\SmtpMailer::$username
v ..\vendor\nette\utils\src\Utils\ObjectMixin.php:153
ale mailer mám injektnut a proměnnou při debugování vidím … takže tipuji, že to „pouze“ nějak špatně předávám, to nemohu předat přímo objekt (typu string) ???
- nightfish
- Člen | 519
rerege napsal(a):
$mail->setFrom($this->mailer->username)tak to hodí chybu:
Nette\MemberAccessException: Cannot read an undeclared property Nette\Mail\SmtpMailer::$username
v ..\vendor\nette\utils\src\Utils\ObjectMixin.php:153ale mailer mám injektnut a proměnnou při debugování vidím … takže tipuji, že to „pouze“ nějak špatně předávám, to nemohu předat přímo objekt (typu string) ???
Proměnná SmtpMailer::$username
je private, proto se k ní
nedostaneš.
- matopeto
- Člen | 395
Sprav si parameter mailUsername v configu, ten pouzi v konfiguracii maileru, a na message si sprav factory, ktora bude mat na vstupe parameter from (pripadne to v configu nastavis cez setup), tu si injectnes a pouzies TvojaMessageFacgory->create() a dostanes nakonfigurovanu message s from (pripadne inymi parametrami) . Sorry ze tak obecne ale snad to vyskladas
- rerege
- Člen | 58
@nightfish tybrďo – tak to mě nenapadlo – taková prostota – díky moc
jinak metoda __get by mi nepomohla? Resp. jsem to zkoušel, ale nerozchodil
jsem to.
Připadá mi to zbytečné si dávat do configu další parametr, když už to
program ví a má to u sebe v username
Ale pokud to jinak nejde, tak no problem…