Đang cố gắng để email của Laravel 5 hoạt động


154

Tôi đang cố gắng gửi email đến một người dùng được chỉ định bằng cách nhập URL, nhưng tôi gặp phải lỗi sau:

Swift_TransportException trong AbstractSmtpTransport.php dòng 383: Mã phản hồi dự kiến ​​250 nhưng có mã "530", với thông báo "530 5.7.1 Yêu cầu xác thực

Cho đến nay tôi chỉ đang cố gắng để nó hoạt động với Gmail. Làm thế nào tôi có thể làm điều này để làm việc?

Đây là những gì tôi có cho đến nay: 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,
    ];

Đây là những gì tôi có trong các tuyến đường:

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

Đây là những gì tôi có trong bộ điều khiển của mình:

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

Và đây là những gì có trong tệp .env của tôi:

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

4
Sử dụng mailtrap.io để thử nghiệm
cuộn

Mẹo hay về mailtrap.io @roll
Ben Everard

Tôi đã nhận được chính xác lỗi tương tự khi sử dụng mailtrap.io
luisfer

Câu trả lời:


243

Tôi biết nó hiện đang làm việc cho bạn @ Vantheman6 nhưng đây là điều làm việc cho tôi trong trường hợp nó giống với người khác.

Tôi đã thêm vào tệp .env của mình các chi tiết về dịch vụ thư tôi đang sử dụng. Vì vậy, hãy chắc chắn rằng các chi tiết sau đây

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

trong tập tin .env là chính xác.

LƯU Ý: Đừng quên khởi động lại máy chủ của bạn sau khi chỉnh sửa tệp .env để nó sẽ chọn dữ liệu mới mà bạn đặt vào đó.

Nếu bạn không khởi động lại máy chủ của mình, tệp .env vẫn sẽ tiếp tục hiển thị dữ liệu thư cũ cho ứng dụng mặc dù bạn đã thực hiện các thay đổi có thể gây ra lỗi này.


59
Ồ, đó là 'Ghi chú' đã cứu tôi. Tôi không biết các lọ ENV đã được lưu trong bộ nhớ cache khi khởi động!
Gerben Jacobs

Bạn có thể cập nhật câu trả lời - và tô sáng máy chủ khởi động lại, thay vì tệp cấu hình không?
mrwaim

2
@mrwaim, tôi nghĩ rằng việc khởi động lại máy chủ là chính xác những gì tôi đã chỉ định trong ghi chú, trừ khi tôi không nhận được những gì bạn đang ám chỉ.
Osei-Bonsu Christian

1
Tôi sẽ đề nghị xóa mọi thứ trước khi "Ghi chú:" - điều đã giúp là ghi chú, và không phải là những điều trước đó. Tôi sẽ đề nghị, nếu bạn muốn giữ các phần khác, hãy đặt chúng sau ghi chú. 3 người đã đưa ra nhận xét 'Ghi chú' để Ghi chú có thể cũng giúp họ.
mrwaim

22
Nếu trước đó bạn đã lưu bộ nhớ cấu hình của mình php artisan config:cachethì khởi động lại máy chủ sẽ không nhận cấu hình được cập nhật. Hãy thử chạy php artisan config:cachelại
darronz 6/10/2015

53

Cấu hình tệp .env của tôi giống như thế này cho laravel 5.1

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

Điều quan trọng nhất là tôi đã tạo mật khẩu dành riêng cho ứng dụng gmail (16 chữ số).

Tôi cần tiết lộ thêm một điều nữa vì không có may mắn cho bất kỳ cấu hình nào. Đó là, bất cứ khi nào tôi thay đổi tập tin .env cần chạy lệnh này

php artisan config:cache

Và điều này là quan trọng nhất vì không có lệnh này, laravel sẽ thực thi các cài đặt trước đó từ bộ đệm. Nó đòi hỏi tôi hơn 10 giờ để tìm ra.


1
Tôi tiếp tục sử dụng php artisan cache:clearkhi nào php artisan config:cachelà giải quyết nó cho tôi. Cảm ơn bạn!
timgavin

4
được nâng cấp vì ghi chú của bạn vềphp artisan config:cache
darronz

35

Bạn đang gặp lỗi xác thực vì tên người dùng và mật khẩu trong tệp cấu hình của bạn bị cài đặt sai.

Thay đổi điều này:

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

Về điều này:

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

Các envphương pháp kiểm tra tập tin .env của bạn. Trong tệp .env của bạn, bạn gọi chúng MAIL_USERNAME, vì vậy đó là những gì bạn cần truyền cho envphương thức.

Một mẹo khắc phục sự cố: thêm dd(Config::get('mail'));để bạn có thể thấy cấu hình được tạo thực tế . Điều này sẽ giúp bạn phát hiện ra các vấn đề như thế này và biết chính xác thông tin nào mà Laravel sẽ thử và sử dụng. Vì vậy, bạn có thể muốn tạm dừng việc đó trong lộ trình thử nghiệm của mình để kiểm tra những gì bạn có:

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

Vì vậy, tôi đã thay đổi tệp mail.php của mình để phản ánh đề xuất của bạn '' tên người dùng '=> env (' MAIL_USERNAME '), và điều 'password' => env('MAIL_PASSWORD'), mà tôi thấy thú vị bởi vì mọi nơi đều bảo tôi nhập địa chỉ email và mật khẩu của bạn cho điều đó. Tôi vẫn nhận được một lỗi 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'));. thư mục Cấu hình chứa rất nhiều tệp
Vantheman6 17/03/2015

Xem câu trả lời cập nhật của tôi, với một ví dụ về cách kiểm tra cấu hình của bạn.
jszobody 17/03/2015

thật tuyệt vời tôi vẫn nhận được một lỗi, nhưng tôi thực sự có thể thấy những gì nó đang làm. Đối với một số lý do nó đang cố gắng để vượt qua ` "host"=> "mailtrap.io"` đến env mặc dù trong thư php Tôi đang nói'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

Kiểm tra kỹ MAIL_HOSTtrong tệp .env của bạn
jszobody 17/03/2015

Nó chính xác. MAIL_HOST=smtp.gmail.com Vì vậy, những gì tôi đã làm là loại bỏ tất cả env từ mỗi phần của tệp mail.php. Và bây giờ thông tin chính xác đang đi qua. OMG Cảm ơn bạn đã làm việc. Bạn là người đàn ông
Vantheman6 17/03/2015

15

vấn đề sẽ được giải quyết bằng cách xóa bộ nhớ cache

php artisan config:cache

13

Cuối cùng tôi cũng nhận được! Chỉ để chia sẻ, có nhiều cấu hình hơn chỉ .env

Đây là .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 cũng cần nhập địa chỉ & tên để nó hoạt động.

'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

Nếu bạn từng gặp rắc rối tương tự và thử mọi thứ trực tuyến và nó không hoạt động, có thể đó là tệp bộ đệm cấu hình đang gửi thông tin sai. Bạn có thể tìm thấy nó trong bootstrap / cache / config.php. Hãy chắc chắn rằng các thông tin là đúng trong đó. Tôi phải mất một tuần để tìm ra điều đó. Tôi hy vọng điều này sẽ giúp ai đó một ngày nào đó.


Thưa ngài, xứng đáng là một người Bỉ tốt bụng, cảm ơn rất nhiều! Tôi nhận thấy rằng tên người dùng và mật khẩu trống trong tệp đó, thậm chí khó khăn, tôi đã điền chúng vào hai tệp thích hợp. Từ đó, tôi biết phải làm gì! Merci!
Gregordy

CẢM ƠN BẠN! Nghiêm túc mà nói, tôi đã gỡ lỗi trong một giờ mà KHÔNG CÓ SỰ THẬT nhưng NÀY !!! NÀY
Ahmad Alfy

11

Đối với mục đích phát triển https://mailtrap.io/ cung cấp cho bạn tất cả các cài đặt cần được thêm vào trong tệp .env. Ví dụ:

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

Mặt khác, với mục đích triển khai, bạn có thể lấy thông tin đăng nhập smtp để thêm vào tệp .env từ thư (như gmail n all)

Sau khi bổ sung, đảm bảo khởi động lại máy chủ


Sau khi thêm hãy chắc chắn để khởi động lại máy chủ .. Câu này đã giải quyết vấn đề của tôi.
Sao Thủy

8

Nó cũng xảy ra với tôi.

Đó là bởi vì khi chúng ta chỉnh sửa .envtập tin, chúng ta cần khởi động lại máy chủ. Chỉ cần dừng hiện tại php artisan servevà bắt đầu lại một lần nữa. Điều này sẽ làm việc chắc chắn.

Nếu vẫn không làm việc hãy thử làm php artisan config:cache


5

Để tham khảo trong tương lai cho những người đến đây. sau khi bạn chạy lệnh đã được đưa ra trong câu trả lời thứ ba ở đây ( tôi hiện đang sử dụng Laravel 5.3 ).

php artisan config:cache

Bạn có thể gặp phải vấn đề này:

[ReflectionException]
Class view does not exist

Trong trường hợp đó, bạn cần thêm lại thủ công vào danh sách nhà cung cấp của bạn dưới tệp app.php. GO-TO: app->config->app.php->'providers[]'và thêm nó, như vậy:

Illuminate\View\ViewServiceProvider::class,

Hy vọng điều đó sẽ giúp được ai đó.


4

Tôi đã có cùng một vấn đề; của tôi MAIL_ENCRYPTIONtlstrên mail.phpnhưng nó là nulltrong .envhồ sơ.
Vì vậy, tôi đã thay đổi nullđến tlsvà nó làm việc!


Đây là trường hợp!
夏 期

3

Không có giải pháp nào ở trên làm việc cho tôi trên localhost. Tôi thậm chí còn cho phép truy cập từ các ứng dụng kém an toàn hơn, cho phép truy cập thông qua captcha mở khóa hiển thị và đặt xác minh ngang hàng và xác minh tên ngang hàng thành sai cho SSL.

Cuối cùng, tôi đã sử dụng giải pháp kiểm tra SMTP nguồn mở của MailHog. Các bước thực hiện như sau:

  1. Tải xuống phiên bản mới nhất của MailHog cho HĐH của bạn
  2. Chỉ định các cài đặt sau trong tệp .env của bạn

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = người kiểm tra

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. Chạy tệp đã tải xuống của MailHog
  2. Gửi email
  3. Kiểm tra email đã gửi bằng cách truy cập localhost: 8025

3

Điều đó chỉ có nghĩa là máy chủ của bạn không có quyền truy cập vào Máy chủ SMTP.

Bạn có thể kiểm tra điều này bằng cách thực hiện:

telnet <smtpServer> <smtpPort>

Bạn sẽ nhận được lỗi từ chối truy cập.

Giải pháp là chỉ sử dụng một máy chủ SMTP khác mà máy chủ của bạn có thể truy cập.


2

Bạn nên khởi động lại máy chủ và chạy các lệnh này:

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

Cần làm việc.


0

Nếu kết quả của bạn dd(Config::get('mail'));là null, chỉ cần sử dụng lệnh

php artisan config:clear

0

Ý kiến ​​của tôi sau khi thực hiện các thay đổi trên tệp .env của bạn khởi động lại máy chủ của bạn và phục vụ lại ứng dụng. Chỉ để chắc chắn về lỗi thực tế. Các nghệ nhân php rõ ràng và bộ nhớ cache sau đó hoạt động khá tốt.


-1

Tôi đã có cùng một vấn đề như bạn, tôi chỉ có nó để làm việc.

Trước tiên, bạn cần kiểm tra kỹ xem cài đặt .env có được thiết lập chính xác không. Đây là cài đặt của tôi:

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

Hãy chắc chắn rằng mật khẩu của bạn không nằm giữa dấu ngoặc kép :).

Và trong config / mail.php, nó có như sau, không có ý kiến.

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

];

Hi vọng nó sẽ giúp ích cho bạn :)


-1

Trong trường hợp của tôi: Khởi động lại máy chủ và chạy php artisan config:clearlệnh.


-2
  1. Bạn đi đến Mailgun
  2. Nhấp vào Người nhận được ủy quyền
  3. Thêm địa chỉ email bạn muốn gửi thư đến.
  4. Xác nhận tin nhắn được gửi đến thư.
  5. Bravo! ... Bạn tốt để đi.

2
Xin hãy tha thứ cho sự thiếu hiểu biết của tôi. Làm thế nào để câu trả lời ở trên giải quyết các vấn đề email của Laravel5 trong câu hỏi?
jww
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.