SmtpMailer pro smtp.office365.com přes TLS

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

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 ?

Unlink
Člen | 298
+
0
-

Skopíruj celú chybovú hlášku nie len ten začiatok.

HonzaN
Člen | 66
+
0
-

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
+
0
-

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)

David Grudl
Nette Core | 8282
+
+1
-

Použij nette/mail 2.3.1, ten lépe rozepisuje chybovou zprávu.

HonzaN
Člen | 66
+
0
-

@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
+
0
-

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
+
+2
-

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.