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' =>"MyUsername@gmail.com" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('MyUsername@gmail.com'),
        '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('example@gmail.com', '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

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.


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.


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('MyUsername@gmail.com'),
'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'));
});

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


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' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

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.


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


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


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.


4

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


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

MAIL_FROM_ADDRESS=theaddress@youwant.com

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

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.


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.


0

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

php artisan config:clear

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.


-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', 'username@gmail.com'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

Espero que funcione para você :)


-1

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


-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.

2
Por favor, perdoe minha ignorância. Como a resposta acima resolve os problemas de email do Laravel5 na pergunta?
JWW
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.