SmtpMailer pro smtp.office365.com přes TLS
- HonzaN
- Člen | 66
Ahoj,
potřebuju odesílat e-maily přes server smtp.office365.com který podporuje pouze TLS.
Příklad
<?php
$mail = new Message;
$mail->setFrom('Test <test@test.cz>')
->addTo('test@test.cz')
->setSubject('Potvrzení objednávky')
->setBody("Dobrý den,\nvaše objednávka byla přijata.");
$mailer = new Nette\Mail\SmtpMailer(array(
'host' => 'smtp.office365.com',
'username' => '*********',
'password' => '*********',
'secure' => 'tls'
));
$mailer->send($mail);
?>
ale končí chybou Nette\Mail\SmtpException – SMTP server did not accept .
Zkoušel jsem upřesnit port, ale dostávám tu samou chybu
<?php
$mailer = new Nette\Mail\SmtpMailer(array(
'host' => 'smtp.office365.com',
'username' => '*********',
'password' => '*********',
'secure' => 'tls',
'port' => 587
));
?>
Přihlašovací údaje jsem ověřoval a účet je funkční. Nevíte prosím jak odesílat přes smtp.office365.com ?
- HonzaN
- Člen | 66
Nette\Mail\SmtpException
SMTP server did not accept .
File: …/newsletter/nette/vendor/nette/mail/src/Mail/SmtpMailer.php:172
<?php
162: * Writes data to server and checks response.
163: * @param string
164: * @param int response code
165: * @param string error message
166: * @return void
167: */
168: protected function write($line, $expectedCode = NULL, $message = NULL)
169: {
170: fwrite($this->connection, $line . Message::EOL);
171: if ($expectedCode && !in_array((int) $this->read(), (array) $expectedCode, TRUE)) {
172: throw new SmtpException('SMTP server did not accept ' . ($message ? $message : $line));
173: }
174: }
175:
176:
?>
nebo ještě něco ? Celý log sem dávat nemůžu, příklad jsem vytvořil v testovací verzi aplikace a log obsahuje i citlivá data…
- iguana007
- Člen | 970
Něco se tomu smtp serveru nelíbí, ale pořád od tebe nevíme co (ta chyba nic neprozrazuje) – podívej se do logu a tam by si měl mít napsáno, co mu přesně vadí.
Jen tak btw – ssl modul v php máš zapnutý? Bez něj ti to pravděpodobně nebude fungovat:
extension=php_openssl.dll
Editoval iguana007 (17. 6. 2015 13:49)
- HonzaN
- Člen | 66
@iguana007 : jojo, mám. Jak lokálně tak na produkčním serveru. Autorizace přes SSL funguje bez problému.
Error log je prázdný, exception.log obsahuje pouze
<?php
[2015-06-17 19-38-47] Nette\Mail\SmtpException: SMTP server did not accept . in /Library/WebServer/Documents/newsletter/nette/vendor/nette/mail/src/Mail/SmtpMailer.php:172 @ http://newsletter/test @@ exception-2015-06-17-19-38-47-6fc1d4a7d7587f94ff56296006db5ca5.html
?>
a to i v případě použití nette/mail 2.3.1 (jinak je použitý Nette Framework 2.2.6)
- mpis
- Člen | 65
Nedávno jsem toto řešil u dvou drobných aplikací, kdy odesílání
mailů přes SMTP náhle přestalo fungovat.
Po delším zkoumání jsem zjistil, že admin firemního serveru udělal update
systému včetně PHP. A v tom byl zakopaný pes.
Takže aby mi odesílání mailů fungovalo, použil jsem SendmailMailer místo
SmtpMailer.
Problém v mém případě byl v nové verzi PHP 5.6.x. Na webu je k tomu
dost odkazů.
Zatím jsem nenašel řešení, aby fungoval i SmtpMailer.
- David Grudl
- Nette Core | 8282
Chybová hláška u nette/mail 2.3.1 musí obsahovat řetězec
with error
.
Nemyslím Nette 2.3.1, ale nette/mail 2.3.1. Ten je v Nette 2.3.3.