Správné nastavení pro maily SMTP

MikKuba
Člen | 75
+
0
-

Ahoj,

Snažím se (marně) rozchodit posílání emailů. Hosting budu používat od Wedosu, zatím bych ale rád, abych mohl i lokálně odesílat nějaké maily a testovat je.

Po zpracování formuláře se zavolá tato třída:

<?php

namespace App\Utils\Mail;

use Nette;
use Latte\Engine;
use Nette\Application\UI\Form;
use Nette\Security\User;
use App\Model\UserManager;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;


class AccountRegistrationService extends Nette\Application\UI\Presenter
{
	use Nette\SmartObject;

	private $userManager;

        /** @var Callable[] function(); */
        public $onErrorLogin = [];



	/** @var User */
	private $user;


	public function __construct(UserManager $userManager, User $user)
	{
		$this->userManager = $userManager;
		$this->user = $user;
	}


	public function sendEmail($values)
	{

            $latte = new Engine;
            $params = [
                'login' => $values->login,
                'pass'  => $values->password
            ];


            $mail = new Message;
            $mail->setFrom('Noreply <info@domena.cz>')
                ->addTo($values->email)
                ->setSubject('Nový účet na domena.cz')
                ->setHtmlBody($latte->renderToString(__DIR__ .'/default.latte', $params));

            $mailer = new Nette\Mail\SmtpMailer([
                'smtp' => true,
                'host' => 'smtp.gmail.com', //  pokud není nastaven, použijí se hodnoty z php.ini
                'username' => 'muj_mail@gmail.com',
                'password' => 'moje_heslo_k_mailu',
                'secure' => 'ssl',
            ]);
            $mailer->send($mail);


	}
}

Jenže po odeslání se vypíše chyba

Nette\Mail\SmtpException

stream_socket_client(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error)

Určitě to bude nějaká banalita, ale nedaří se mi to aktuálně rozlousknout. Díky! :)

Editoval MikKuba (26. 6. 2019 23:13)

Jan Tvrdík
Nette guru | 2595
+
+1
-
  1. Zkus si pročíst https://forum.nette.org/…s-encryption#…
  2. Na lokální testování je lepší použít Nextras Mail Panel nebo služby jako mailtrap.io nebo debugmail.io.
MikKuba
Člen | 75
+
0
-

Jan Tvrdík napsal(a):

  1. Zkus si pročíst https://forum.nette.org/…s-encryption#…
  2. Na lokální testování je lepší použít Nextras Mail Panel nebo služby jako mailtrap.io nebo debugmail.io.

Nextras jsem nahodil, nedošlo mi to, že ho používám už jinde :D Na localu to tam správně zachytává a vidím vše. Nicméně když to nasadím na server (Wedos) a do config.neon upravím na:

parameters:
	# Role.
	guest: guest

	# Presentery.
	error: Error


application:
	errorPresenter: Error
	mapping:
		*: App\*Module\Presenters\*Presenter

mail:
	smtp: true  # use SmtpMailer instead of SendmailMailer
	host: smtp-ID.ID.wedos.net
	port: 465
	username: info@domena.cz
	password: heslo_domeny
	secure: ssl # possible values are ssl, tls or null

session:
	expiration: 14 days

Tak celý skript proběhne a myslí si tedy, že mail odešel. Ten ale nepřijde a ani stats hostingu se netváří, že by mail odešel. Když si pak i na serveru aktivuji Tracy lištu tak ten mail vidím v ní (debug mod jsem aktivoval až po pokusu odeslat mail). To tedy znamená, že i když to mám na hostingu (subdoména test), tak si Nette myslí že to je DEV režim a proto mail neodešle, ale jen „hodí“ do Tracy? Dělám něco ještě špatně? :/

Jinak odesílání zpracovávám takto:

/** @var Nette\Mail\IMailer @inject */
	public $mailer;

public function sendEmail($values)
	{

            $latte = new Engine;
            $params = [
                'login' => $values->login
            ];


            $mail = new Message;
            $mail->setFrom('domena.cz <info@domena.cz>')
                ->addTo($values->email)
                ->setSubject('Nový účet')
                ->setHtmlBody($latte->renderToString(__DIR__ .'/default.latte', $params));

            $this->mailer->send($mail);


	}

Editoval MikKuba (27. 6. 2019 15:18)

MikKuba
Člen | 75
+
+3
-

Tak pro doplnění. Vypadá to, že jsem to vyřešil.

Šlo o to, abych config s Nextras měl jen v config.local.neon, který na produkci nemá v sobě Nextras zapnutí. A potom mít v config.neon připojení na SMTP wedosu přes TLS a port 587 :)