Správné nastavení pro maily SMTP
- MikKuba
- Člen | 83
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
- Zkus si pročíst https://forum.nette.org/…s-encryption#…
- Na lokální testování je lepší použít Nextras Mail Panel nebo služby jako mailtrap.io nebo debugmail.io.
- MikKuba
- Člen | 83
Jan Tvrdík napsal(a):
- Zkus si pročíst https://forum.nette.org/…s-encryption#…
- 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)