Laravel 5 이메일을 사용하려고합니다


154

URL을 입력하여 지정된 사용자에게 이메일을 보내려고하는데 다음과 같은 오류가 발생합니다.

AbstractSmtpTransport.php 383 줄의 Swift_TransportException : 응답 코드 250이 예상되었지만 메시지 "530"과 함께 코드 "530"이 표시됨 5.7.1 인증 필요

지금까지는 Gmail에서 작동하도록 노력하고 있습니다. 이 기능을 작동 시키려면 어떻게해야합니까?

이것은 지금까지 내가 가진 것입니다 : 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,
    ];

이것이 내가 경로에 가지고있는 것입니다 :

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

이것이 내 컨트롤러에있는 것입니다.

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

그리고 이것은 내 .env 파일에 있습니다.

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

4
테스트를 위해 mailtrap.io를 사용하십시오

mailtrap.io @roll에 관한 유용한 정보
Ben Everard

mailtrap.io를 사용할 때 정확히 같은 오류가 발생했습니다
luisfer

답변:


243

나는 그것이 당신을 위해 지금 @ Vantheman6 작동한다는 것을 알고 있지만 이것이 다른 누군가와 같은 경우 나를 위해 일한 것입니다.

사용중인 메일 서비스의 세부 정보를 내 .env 파일에 추가했습니다. 다음 세부 사항을 확인하십시오

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

.env 파일의 내용이 정확합니다.

참고 : .env 파일을 편집 한 후 서버에 다시 시작하여 새 데이터를 입력하도록하십시오.

서버를 다시 시작하지 않으면 .env 파일은이 오류의 원인이 될 수있는 변경 사항을 적용하더라도 이전 메일 데이터를 앱에 계속 제공합니다.


59
와우, 그 '노트'가 저를 구했습니다. 시작할 때 ENV 변수가 캐시되는지 몰랐습니다!
Gerben Jacobs

응답을 업데이트하고 구성 파일 대신 다시 시작 서버를 강조 표시 할 수 있습니까?
mrwaim

2
@mrwaim, 당신이 암시하는 것을 얻지 못하면 서버를 다시 시작하는 것이 내가 메모에 지정한 것과 정확히 일치한다고 생각했습니다.
Osei-Bonsu Christian

1
"Note :"이전에 모든 것을 제거하는 것이 좋습니다. 이전에 도움이되지 않았던 것이 아니라 메모에 도움이 된 것입니다. 다른 부분을 유지하려면 메모 뒤에 넣는 것이 좋습니다. 3 사람들은 '노트'주석을 상향 조정 했으므로 노트가 그들에게도 도움이되었을 것입니다.
mrwaim

22
이전에 구성을 캐시 php artisan config:cache한 경우 서버를 다시 시작하면 업데이트 된 구성이 선택되지 않습니다. php artisan config:cache다시 실행 해보십시오
darronz

53

내 .env 파일 구성은 laravel 5.1의 경우와 같습니다

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

여기서 가장 중요한 것은 Gmail 응용 프로그램 특정 비밀번호 (16 자리)를 생성했다는 것입니다.

구성에 대한 운이 없기 때문에 한 가지 더 밝힐 필요가 있습니다. 즉, .env 파일을 변경할 때마다이 명령을 실행해야합니다.

php artisan config:cache

이 명령이 없으면 laravel이 캐시에서 이전 설정을 실행하기 때문에 가장 중요합니다. 알아내는 데 10 시간 이상이 걸렸습니다.


1
내가 사용하는 유지 php artisan cache:clear하면 php artisan config:cache나를 위해 그것을 해결하는 것이다. 감사합니다!
timgavin

4
대한 때문에 메모의 upvotedphp artisan config:cache
darronz

35

구성 파일의 사용자 이름과 비밀번호가 잘못 설정되어 인증 오류가 발생했습니다.

이것을 변경하십시오 :

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),

이에:

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

env방법은 .env 파일을 확인합니다. .env 파일에서 이들을 호출 MAIL_USERNAME하므로 env메소드 에 전달해야합니다 .

하나의 문제점 해결 팁 : 실제 생성 된 구성을dd(Config::get('mail')); 볼 수 있도록 추가 하십시오 . 이를 통해 이와 같은 문제를 발견하고 Laravel이 시도하고 사용할 정보를 정확히 파악할 수 있습니다. 따라서 테스트 경로에서 일시적으로 중지하여 가지고있는 것을 검사 할 수 있습니다.

Route::get('test', function()
{
    dd(Config::get('mail'));
});

그래서 귀하의 제안을 반영하도록 mail.php 파일을 변경 'password' => env('MAIL_PASSWORD'), 했습니다. 여전히 오류가 발생 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'));합니다. Config 디렉토리에는 많은 파일이 있습니다
Vantheman6

구성을 검사하는 방법의 예와 함께 업데이트 된 답변을 참조하십시오.
jszobody

그것은 여전히 ​​오류가 발생하지만 훌륭하지만 실제로 그것이 무엇을하고 있는지 볼 수 있습니다. 몇 가지 이유 때문에 => "mailtrap.io"`ENV에 메일 PHP에서 내가 말하고에도 불구하고` "호스트"을 통과하려고'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

MAIL_HOST.env 파일에서를 다시 확인하십시오.
jszobody

정확합니다. MAIL_HOST=smtp.gmail.com 그래서 내가 한 일은 mail.php 파일의 각 부분에서 모든 env를 제거하는 것이 었습니다. 그리고 지금 올바른 정보가 전달되고 있습니다. OMG 감사합니다. 당신은 남자입니다
Vantheman6


13

마침내 나는 얻었다! 공유하기 위해 .env보다 더 많은 구성이 있습니다.

이것은 .env입니다

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config / mail.php도 작동하려면 주소와 이름을 입력해야합니다.

'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

동일한 문제가 발생하여 온라인으로 모든 것을 시도해도 작동하지 않으면 잘못된 정보를 보내는 구성 캐시 파일 일 수 있습니다. bootstrap / cache / config.php에서 찾을 수 있습니다. 신임 정보가 올바른지 확인하십시오. 알아내는 데 일주일이 걸렸습니다. 이것이 언젠가 누군가를 도울 수 있기를 바랍니다.


당신은 훌륭한 보르도 자격이 있습니다, 감사합니다! 나는 두 개의 적절한 파일을 채워서 힘들어도 파일에서 사용자 이름과 비밀번호가 비어있는 것을 알았습니다. 머시!
Gregordy

감사합니다! 심각하게 NO CLUE로 한 시간 동안 디버깅 해 왔지만 이것으로 !!! 본
아마드 Alfy

11

개발 목적으로 https://mailtrap.io/ 는 .env 파일에 추가해야하는 모든 설정을 제공합니다. 예 :

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

그렇지 않으면 구현을 위해 메일에서 .env 파일에 smtp 자격 증명을 추가 할 수 있습니다 (예 : gmail n all).

또한 서버를 다시 시작하십시오


또한 서버를 다시 시작해야합니다.이 문장은 내 문제를 해결했습니다.
호스 머큐리

8

나에게도 일어난다.

.env파일 을 편집 할 때 서버를 다시 시작해야하기 때문 입니다. 전류를 멈추고 php artisan serve다시 시작하십시오. 이것은 확실히 작동합니다.

여전히 작동하지 않으면 php artisan config:cache


5

여기에 오는 사람들을 참조하십시오. 여기 세 번째 답변에 제공된 명령을 실행 한 후 ( 지금 Laravel 5.3 사용하고 있습니다 ).

php artisan config:cache

이 문제가 발생할 수 있습니다 :

[ReflectionException]
Class view does not exist

이 경우 app.php 파일의 공급자 목록에 수동으로 다시 추가해야합니다. 이동 : 다음 app->config->app.php->'providers[]'과 같이 추가하십시오.

Illuminate\View\ViewServiceProvider::class,

희망은 누군가를 돕는다.


4

나는 같은 문제를 겪었다. 내가 MAIL_ENCRYPTION되었다 tlsmail.php그러나 그것은이었다 null.env파일.
그래서 나는 변경 nulltls하고 일했다!


이 사건이었다!
夏 期 劇場

3

위의 해결책 중 어느 것도 localhost에서 나를 위해 일하지 않았습니다. 보안이 취약한 앱의 액세스를 허용하고 디스플레이 잠금 해제 보안 문자를 통한 액세스를 허용했으며 SSL의 경우 피어 확인 및 피어 이름 확인을 false로 설정했습니다.

결국 MailHog의 오픈 소스 SMTP 테스트 솔루션을 사용했습니다. 단계는 다음과 같습니다.

  1. OS 용 최신 버전의 MailHog를 다운로드하십시오.
  2. .env 파일에서 다음 설정을 지정하십시오.

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = 널

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. MailHog의 다운로드 파일을 실행
  2. 이메일을 보내
  3. localhost : 8025로 이동하여 전송 된 이메일을 확인하십시오.

3

이는 단순히 서버가 SMTP 서버에 액세스 할 수 없음을 의미합니다.

다음을 수행하여이를 테스트 할 수 있습니다.

telnet <smtpServer> <smtpPort>

액세스 거부 오류가 발생합니다.

해결책은 서버에서 액세스 할 수있는 다른 SMTP 서버를 사용하는 것입니다.


2

서버를 다시 시작하고 다음 명령을 실행해야합니다.

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

작동합니다.


0

결과 dd(Config::get('mail'));가 null 인 경우 다음 명령을 사용하십시오.

php artisan config:clear

0

.env 파일을 변경 한 후 내 의견은 서버를 다시 시작하고 앱을 다시 제공합니다. 실제 오류를 확인하십시오. PHP 장인은 명확하고 나중에 캐시하면 꽤 잘 작동합니다.


-1

나는 당신과 같은 문제를 겪었습니다. 방금 작동했습니다.

먼저 .env 설정이 올바르게 설정되어 있는지 다시 확인해야합니다. 내 설정은 다음과 같습니다.

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

비밀번호가 따옴표로 묶지 않았는지 확인하십시오 :).

그리고 config / mail.php에는 주석없이 다음이 있습니다.

<?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,

];

그것이 당신을 위해 작동하기를 바랍니다 :)


-1

내 경우 : 서버를 다시 시작하고 php artisan config:clear명령을 실행하십시오 .


-2
  1. 당신은 Mailgun에 간다
  2. 승인 된 수신자를 클릭하십시오.
  3. 메일을 보내려는 이메일 주소를 추가하십시오.
  4. 메일로 보낸 메시지를 확인하십시오.
  5. 브라보! ... 잘가요.

2
내 무지를 용서해주세요. 위의 답변은 질문에서 Laravel5 이메일 문제를 어떻게 해결합니까?
jww
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.