Mencoba membuat email Laravel 5 berfungsi

154

Saya mencoba mengirim email ke pengguna tertentu dengan mengetikkan URL, tetapi saya mendapatkan kesalahan berikut:

Swift_TransportException di AbstractSmtpTransport.php line 383: Diharapkan kode respon 250 tetapi mendapat kode "530", dengan pesan "530 5.7.1 Diperlukan otentikasi

Sejauh ini saya hanya mencoba membuatnya berfungsi dengan Gmail. Bagaimana saya bisa membuatnya bekerja?

Inilah yang saya miliki sejauh ini: 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,
    ];

Inilah yang saya miliki di rute:

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

Ini yang saya miliki di controller saya:

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

Dan inilah yang ada di file .env saya:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Vantheman6
sumber
4
Gunakan mailtrap.io untuk pengujian
roll
Kiat bagus di mailtrap.io @roll
Ben Everard
Saya mendapatkan kesalahan yang persis sama ketika menggunakan mailtrap.io
luisfer

Jawaban:

243

Saya tahu ini bekerja untuk Anda sekarang @ Vantheman6 tapi ini yang bekerja untuk saya kalau-kalau itu sama untuk orang lain.

Saya menambahkan ke file .env saya rincian layanan email yang saya gunakan. Jadi pastikan detailnya sebagai berikut

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

dalam file .env akurat.

CATATAN: Jangan lupa untuk me-restart server Anda setelah mengedit file .env sehingga akan memilih data baru yang Anda masukkan ke sana.

Jika Anda tidak me-restart server Anda, file .env masih akan terus menyajikan data email lama ke aplikasi meskipun Anda telah membuat perubahan yang dapat menyebabkan kesalahan ini.

Kristen Osei-Bonsu
sumber
59
Wow, 'Catatan' itu menyelamatkan saya. Saya tidak tahu vars ENV di-cache saat startup!
Gerben Jacobs
Bisakah Anda memperbarui jawabannya - dan menyorot server restart, bukan file konfigurasi?
mrwaim
2
@ Mrwaim, saya pikir restart server adalah persis apa yang saya tentukan dalam catatan, kecuali saya tidak mendapatkan apa yang Anda maksudkan.
Osei-Bonsu Christian
1
Saya akan menyarankan menghapus semuanya sebelum "Catatan:" - yang membantu adalah catatan, dan bukan hal-hal sebelumnya. Saya sarankan, jika Anda ingin menyimpan bagian lainnya, letakkan setelah catatan. 3 Orang menaikkan komentar 'Catatan' sehingga Catatan mungkin membantu mereka juga.
mrwaim
22
Jika sebelumnya Anda telah php artisan config:cachemen -cache konfigurasi Anda dengan restart maka server tidak akan mengambil konfigurasi yang diperbarui. Coba jalankan php artisan config:cachelagi
darronz
53

Konfigurasi file .env saya seperti ini untuk laravel 5.1

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

di sini yang paling penting adalah saya membuat kata sandi khusus aplikasi gmail (16 digit).

Saya perlu mengungkapkan satu hal lagi karena tidak beruntung untuk konfigurasi apa pun. Yaitu, setiap kali saya mengubah file .env perlu menjalankan perintah ini

php artisan config:cache

Dan ini yang paling penting karena tanpa perintah ini laravel mengeksekusi pengaturan sebelumnya dari cache itu. Diperlukan lebih dari 10 jam untuk mencari tahu.

Amir
sumber
1
Saya terus menggunakan php artisan cache:clearsaat php artisan config:cacheapa yang dipecahkan untuk saya. Terima kasih!
timgavin
4
dibatalkan karena catatan Anda tentangphp artisan config:cache
darronz
35

Anda mendapatkan kesalahan otentikasi karena nama pengguna dan kata sandi dalam file konfigurasi Anda salah setup.

Ubah ini:

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

Untuk ini:

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

The envMetode memeriksa file Anda .env. Dalam file .env Anda, Anda memanggil ini MAIL_USERNAME, jadi itulah yang perlu Anda sampaikan ke envmetode.

Satu tip pemecahan masalah: tambahkan dd(Config::get('mail'));sehingga Anda dapat melihat konfigurasi yang dihasilkan sebenarnya . Ini akan membantu Anda menemukan masalah seperti ini, dan tahu persis informasi apa yang akan dicoba dan digunakan Laravel. Jadi, Anda mungkin ingin menghentikannya di rute pengujian untuk sementara waktu untuk memeriksa apa yang Anda miliki:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
jszobody
sumber
Jadi saya mengubah file mail.php saya untuk mencerminkan saran Anda` 'nama pengguna' => env ('MAIL_USERNAME'), `dan yang menurut 'password' => env('MAIL_PASSWORD'), saya menarik karena di mana-mana saya diminta memasukkan alamat email dan kata sandi Anda untuk itu. Saya masih mendapatkan kesalahan 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'));. direktori Config berisi banyak file
Vantheman6
Lihat jawaban saya yang diperbarui, dengan contoh cara memeriksa konfigurasi Anda.
jszobody
itu luar biasa saya masih mendapatkan kesalahan, tetapi saya benar-benar dapat melihat apa yang dilakukannya. Entah mengapa ia mencoba meneruskan `" host "=>" mailtrap.io "` ke env meskipun dalam email php yang saya katakan'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6
Periksa MAIL_HOSTdi file
.env Anda
Itu akurat. MAIL_HOST=smtp.gmail.com Jadi apa yang akhirnya saya lakukan adalah menghapus semua env dari setiap bagian file mail.php. Dan sekarang informasi yang benar sedang melewati. OMG Terima kasih itu berhasil. Anda adalah pria
Vantheman6
15

masalah akan diselesaikan dengan menghapus cache

php artisan config:cache
zainudin noori
sumber
13

Akhirnya aku berhasil! Hanya untuk berbagi, ada lebih banyak konfigurasi daripada hanya .env

Ini .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 juga perlu memasukkan alamat & nama agar bisa berfungsi.

'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
sumber
11

Jika Anda pernah mengalami masalah yang sama dan mencoba semuanya secara online dan itu tidak berhasil, mungkin file cache konfigurasi yang mengirim informasi yang salah. Anda dapat menemukannya di bootstrap / cache / config.php. Pastikan kredensial ada di sana. Butuh waktu seminggu untuk memikirkannya. Saya berharap ini akan membantu seseorang suatu hari nanti.

Nabil
sumber
Anda Tuan, pantas mendapatkan Bordeaux yang bagus, terima kasih banyak! Saya perhatikan bahwa nama pengguna dan kata sandi kosong dalam file itu, walaupun sulit saya mengisinya dengan dua file yang sesuai. Dari sana, saya tahu apa yang harus dilakukan! Merci!
Gregordy
TERIMA KASIH! Serius, saya telah men-debug selama satu jam tanpa petunjuk tetapi ini !!! INI
Ahmad Alfy
11

Untuk tujuan pengembangan https://mailtrap.io/ memberi Anda semua pengaturan yang perlu ditambahkan dalam file .env. Misalnya:

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

Kalau tidak untuk tujuan implementasi, Anda bisa mendapatkan kredensial smtp untuk ditambahkan dalam file .env dari mail (seperti gmail n all)

Setelah tambahan pastikan untuk me-restart server

Bhupesh Shrestha
sumber
Setelah tambahan pastikan untuk me-restart server .. Kalimat ini menyelesaikan masalah saya.
Hos Mercury
8

Itu juga terjadi pada saya.

Itu karena ketika kita mengedit .envfile kita perlu me-restart server. Hentikan saja arus php artisan servedan mulai sekali lagi. Ini pasti akan berhasil.

Jika masih tidak berhasil coba lakukan php artisan config:cache

Advaith
sumber
5

Untuk referensi di masa mendatang kepada orang-orang yang datang ke sini. setelah Anda menjalankan perintah yang diberikan pada jawaban ketiga di sini ( saya gunakan sekarang Laravel 5.3 ).

php artisan config:cache

Anda mungkin mengalami masalah ini:

[ReflectionException]
Class view does not exist

Dalam hal ini, Anda perlu menambahkannya kembali secara manual ke daftar penyedia Anda di bawah file app.php. GO-TO: app->config->app.php->'providers[]'dan tambahkan, seperti:

Illuminate\View\ViewServiceProvider::class,

Semoga Itu bisa membantu seseorang.

GabMic
sumber
4

Saya memiliki masalah yang sama; saya MAIL_ENCRYPTIONada tlsdi mail.phptapi itu ada nulldi .envfile.
Jadi saya berubah nullmenjadi tlsdan berhasil!

abbasi mohaddese
sumber
Inilah yang terjadi!
夏 期 劇場
3

Tidak ada solusi di atas yang berfungsi untuk saya di localhost. Saya bahkan mengizinkan akses dari aplikasi yang kurang aman, mengizinkan akses melalui layar membuka captcha dan mengatur rekan verifikasi dan memverifikasi nama rekan menjadi false untuk SSL.

Akhirnya, saya menggunakan solusi pengujian SMTP open source dari MailHog. Langkah-langkahnya adalah sebagai berikut:

  1. Unduh versi terbaru MailHog untuk OS Anda
  2. Tentukan pengaturan berikut dalam file .env Anda

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = penguji

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = nol

[email protected]

  1. Jalankan file MailHog yang diunduh
  2. Mengirim email
  3. Periksa email yang terkirim dengan masuk ke localhost: 8025
Angka nol
sumber
3

Itu berarti bahwa server Anda tidak memiliki akses ke Server SMTP.

Anda dapat menguji ini dengan melakukan:

telnet <smtpServer> <smtpPort>

Anda harus mendapatkan kesalahan Akses ditolak.

Solusinya adalah dengan hanya menggunakan server SMTP lain yang dapat diakses oleh server Anda.

stidiovip
sumber
2

Anda harus me-restart server dan menjalankan perintah ini:

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

Itu seharusnya bekerja.

Jenius dalam kesulitan
sumber
0

Jika hasil Anda dari dd(Config::get('mail'));nol cukup gunakan perintah

php artisan config:clear
Mo D Genesis
sumber
0

Pendapat saya setelah membuat perubahan pada file .env Anda me-restart server Anda dan melayani aplikasi lagi. Hanya untuk memastikan kesalahan yang sebenarnya. Tukang php dihapus dan cache setelah itu berfungsi dengan cukup baik.

Alemoh Rapheal Baja
sumber
-1

Saya memiliki masalah yang sama seperti Anda, saya baru saja berhasil.

Pertama, Anda perlu memeriksa ulang bahwa pengaturan .env sudah diatur dengan benar. Ini pengaturan saya:

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

Pastikan kata sandi Anda bukan di antara tanda kutip :).

Dan di config / mail.php ia memiliki yang berikut, tanpa komentar.

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

];

Semoga berhasil untuk Anda :)

Yazeed AlSaif
sumber
-1

Dalam kasus saya: Mulai ulang server dan jalankan php artisan config:clearperintah.

Duy Nguyen
sumber
-2
  1. Anda pergi ke Mailgun
  2. Klik Penerima Resmi
  3. Tambahkan alamat email yang ingin Anda kirimi surat.
  4. Verifikasi pesan yang dikirim ke surat.
  5. Bravo! ... Anda baik-baik saja.
pengguna7141795
sumber
2
Maafkan ketidaktahuan saya. Bagaimana jawaban di atas memecahkan masalah email Laravel5 dalam pertanyaan?
jww