Tentando fazer com que o email do Laravel 5 funcione

154

Estou tentando enviar um email para um usuário especificado digitando a URL, mas estou recebendo o seguinte erro:

Swift_TransportException na linha AbstractSmtpTransport.php 383: código de resposta esperado 250, mas obteve o código "530", com a mensagem "530 5.7.1 Autenticação necessária

Até agora, estou tentando fazê-lo funcionar com o Gmail. Como posso fazer isso funcionar?

Isto é o que eu tenho até agora: mail.php

<?php
    return [
        'driver' => env('MAIL_DRIVER',' smtp'),
        'host' => env('MAIL_HOST', 'smtp.gmail.com'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' =>"[email protected]" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('[email protected]'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

Isto é o que eu tenho nas rotas:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('[email protected]', 'HisName')->subject('Welcome!');
    });
});

Isto é o que eu tenho no meu controlador:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}

E é isso que está no meu arquivo .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Vantheman6
fonte
4
Use mailtrap.io para teste
role
Dica boa sobre mailtrap.io @roll #
Ben Everard
I got exatamente o mesmo erro ao usar mailtrap.io
luisfer

Respostas:

243

Sei que está funcionando para você agora @ Vantheman6, mas é isso que funcionou para mim, caso seja o mesmo para outra pessoa.

Adicionei ao meu arquivo .env os detalhes do serviço de email que estou usando. Portanto, verifique se os seguintes detalhes

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

no arquivo .env são precisos.

NOTA: Não se esqueça de reiniciar o servidor após editar o arquivo .env, para que ele escolha os novos dados inseridos nele.

Se você não reiniciar o servidor, o arquivo .env continuará apresentando os dados de email antigos para o aplicativo, mesmo que você tenha feito alterações que possam causar esse erro.

Cristão Osei-Bonsu
fonte
59
Uau, essa 'Nota' me salvou. Eu não sabia que os vars ENV foram armazenados em cache na inicialização!
Gerben Jacobs 29/03
Você pode atualizar a resposta - e destacar o servidor de reinicialização, em vez do arquivo de configuração?
Mrwaim
2
@ Mrwaim, eu pensei que o reinício do servidor é exatamente o que eu especifiquei na nota, a menos que eu não esteja entendendo o que você está implicando.
Osei-Bonsu Christian
1
Eu sugeriria remover tudo antes de "Nota:" - o que ajudou foi a nota, e não as coisas antes. Eu sugeriria, se você quiser manter as outras partes, coloque-as após a nota. 3 As pessoas votaram positivamente no comentário da 'Nota', portanto a Nota provavelmente também as ajudou.
Mrwaim
22
Se você já armazenou sua configuração em cache anteriormente php artisan config:cache, a reinicialização do servidor não selecionará a configuração atualizada. Tente rodar php artisan config:cachenovamente
darronz
53

Minha configuração de arquivo .env é assim para o laravel 5.1

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls

A coisa mais importante aqui é que eu criei a senha específica do aplicativo do Gmail (16 dígitos).

Preciso revelar mais uma coisa, já que não tenho sorte em nenhuma configuração. Ou seja, sempre que eu alterava o arquivo .env, era necessário executar este comando

php artisan config:cache

E isso é o mais importante porque, sem esse comando, o laravel executa as configurações anteriores do cache. Me levou mais de 10 horas para descobrir.

Amir
fonte
1
Eu continuei usando php artisan cache:clearquando php artisan config:cacheé o que resolveu para mim. Obrigado!
timgavin
4
voto positivo por causa de sua observação sobrephp artisan config:cache
darronz
35

Você está recebendo um erro de autenticação porque o nome de usuário e a senha no seu arquivo de configuração estão configurados incorretamente.

Mude isso:

'username' => env('[email protected]'),
'password' => env('MyPassword'),

Para isso:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

O envmétodo verifica seu arquivo .env. No seu arquivo .env, você as chama MAIL_USERNAME, então é isso que você precisa passar para o envmétodo

Uma dica para solução de problemas: adicione dd(Config::get('mail'));para que você possa ver a configuração real gerada . Isso o ajudará a identificar questões como essa e saber exatamente quais informações o Laravel tentará usar. Portanto, você pode interromper temporariamente a rota de teste para examinar o que possui:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
jszobody
fonte
Então mudei meu arquivo mail.php para refletir suas sugestões `` username '=> env (' MAIL_USERNAME '), `e o 'password' => env('MAIL_PASSWORD'), que acho interessante porque em todos os lugares me diz para inserir seu endereço de e-mail e senha para isso. Ainda estou recebendo um erro Swift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required. I'm sorry but where do i actually place the " dd(Config::get('mail'));. o diretório Config contém muitos arquivos
Vantheman6
Veja minha resposta atualizada, com um exemplo de como examinar sua configuração.
jszobody
isso é incrível, ainda estou recebendo um erro, mas posso realmente ver o que está fazendo. Por alguma razão ele está tentando passar ` "host"=> "mailtrap.io"` para o env embora em php e-mail que estou dizendo'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6
Verifique o MAIL_HOSTem seu arquivo .env
jszobody
É preciso. MAIL_HOST=smtp.gmail.com Então, o que acabei fazendo foi remover todo o env de cada parte do arquivo mail.php. E agora a informação correta está passando. OMG Obrigado, funcionou. Você é o homem
Vantheman6
15

o problema será resolvido limpando o cache

php artisan config:cache
zainudin noori
fonte
13

Finalmente eu consegui! Apenas para compartilhar, há mais configurações do que apenas .env

Este é .env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

O config / mail.php também precisa inserir endereço e nome para que ele funcione.

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => '[email protected]' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
yaksowmin
fonte
11

Se você tiver o mesmo problema e tentar tudo online e não funcionar, provavelmente é o arquivo de cache de configuração que está enviando as informações incorretas. Você pode encontrá-lo em bootstrap / cache / config.php. Verifique se as credenciais estão lá. Levei uma semana para descobrir isso. Espero que isso ajude alguém algum dia.

Nabil
fonte
Senhor, merecia um bom Bordeaux, muito obrigado! Percebi que o nome de usuário e a senha estavam vazios nesse arquivo, mesmo sendo difícil, eu os preenchi nos dois arquivos apropriados. A partir daí, eu sabia o que fazer! Merci!
Gregordy
OBRIGADO! Sério, eu estive depurando por uma hora com NO CLUE, mas ISSO !!! ISTO
Ahmad Alfy 10/09
11

Para fins de desenvolvimento, https://mailtrap.io/ fornece todas as configurações que precisam ser adicionadas no arquivo .env. Por exemplo:

Host:   mailtrap.io
Port:   25 or 465 or 2525
Username:   cb1d1475bc6cce
Password:   7a330479c15f99
Auth:   PLAIN, LOGIN and CRAM-MD5
TLS:    Optional

Caso contrário, para fins de implementação, você poderá adicionar as credenciais smtp no arquivo .env pelo correio (como o gmail n all)

Após a adição, reinicie o servidor

Bhupesh Shrestha
fonte
Após a adição, reinicie o servidor. Esta frase resolveu meu problema.
Hos Mercury
8

Isso acontece comigo também.

É porque quando editamos o .envarquivo, precisamos reiniciar o servidor. Apenas pare a corrente php artisan servee inicie-a novamente. Isso funcionará com certeza.

Se ainda não funcionou, tente fazer php artisan config:cache

Advaith
fonte
5

Para referência futura a pessoas que vêm aqui. depois de executar o comando que foi fornecido na terceira resposta aqui ( agora estou usando o Laravel 5.3 ).

php artisan config:cache

Você pode encontrar este problema:

[ReflectionException]
Class view does not exist

Nesse caso, você precisa adicioná-lo novamente manualmente à sua lista de provedores no arquivo app.php. GO-TO: app->config->app.php->'providers[]'e adicione-o, assim:

Illuminate\View\ViewServiceProvider::class,

Espero que ajude alguém.

GabMic
fonte
4

Eu tive o mesmo problema; meu MAIL_ENCRYPTIONestava tlsligado, mail.phpmas estava nullno .envarquivo.
Então mudei nullpara tlse funcionou!

mohaddese abbasi
fonte
Este foi o caso!
26516 #
3

Nenhuma das soluções acima funcionou para mim no host local. Até permiti o acesso a partir de aplicativos menos seguros, o acesso através do captcha de desbloqueio de exibição e defina o ponto de verificação e o nome do ponto de verificação como false para SSL.

Eventualmente, usei a solução de teste SMTP de código aberto do MailHog. Os passos são os seguintes:

  1. Baixe a versão mais recente do MailHog para o seu sistema operacional
  2. Especifique as seguintes configurações no seu arquivo .env

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = nulo

[email protected]

  1. Execute o arquivo baixado do MailHog
  2. Enviar email
  3. Verifique o email enviado indo para localhost: 8025
ZerosAndOnes
fonte
3

Isso significa simplesmente que seu servidor não tem acesso ao servidor SMTP.

Você pode testar isso fazendo:

telnet <smtpServer> <smtpPort>

Você deve receber o erro de acesso negado.

A solução é usar apenas outro servidor SMTP que possa ser acessado pelo seu servidor.

stidiovip
fonte
2

Você deve reiniciar o servidor e executar estes comandos:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache

Isso deve funcionar.

Gênio em apuros
fonte
0

Se seus resultados dd(Config::get('mail'));forem nulos, basta usar o comando

php artisan config:clear
Mo D Genesis
fonte
0

Minha opinião, depois de fazer alterações nos arquivos .env, reinicie o servidor e sirva o aplicativo novamente. Apenas para ter certeza do erro real. O php artisan clear e cache depois funcionam muito bem.

Alemoh Rapheal Baja
fonte
-1

Eu tive o mesmo problema que você, acabei de fazê-lo funcionar.

Primeiro, você precisa verificar se as configurações .env estão definidas corretamente. Aqui estão as minhas configurações:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls

Certifique-se de que sua senha não esteja entre aspas :).

E no config / mail.php tem o seguinte, sem os comentários.

<?php

return [

'driver' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', '587'),
'from' => ['address' => 'yourusername', 'name' => 'yourname'],
'encryption' => env('MAIL_ENCRYPTION','tls'),
'username' => env('MAIL_USERNAME', '[email protected]'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

Espero que funcione para você :)

Yazeed AlSaif
fonte
-1

No meu caso: Reinicie o servidor e execute o php artisan config:clearcomando.

Duy Nguyen
fonte
-2
  1. Você vai para a Mailgun
  2. Clique em Destinatários Autorizados
  3. Adicione o endereço de e-mail para o qual deseja enviar e-mail.
  4. Verifique a mensagem enviada para o correio.
  5. Bravo! ... Você está pronto para ir.
user7141795
fonte
2
Por favor, perdoe minha ignorância. Como a resposta acima resolve os problemas de email do Laravel5 na pergunta?
JWW