Laravel 5 e-postasının çalışmasını sağlamaya çalışıyorum


154

URL'yi yazarak belirtilen bir kullanıcıya e-posta göndermeye çalışıyorum, ancak aşağıdaki hatayı alıyorum:

AbstractSmtpTransport.php satır 383'te Swift_TransportException: Beklenen yanıt kodu 250, ancak "530" kodu aldı, "530 5.7.1 Kimlik doğrulaması gerekiyor

Şimdiye kadar sadece Gmail ile çalışmasını sağlamaya çalışıyorum. Bunu nasıl çalıştırabilirim?

Şimdiye kadar sahip olduğum şey bu: 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,
    ];

Bu rotalarda ne var:

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

Bu benim denetleyicide ne var:

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

Ve bu benim .env dosyamda olan şey:

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

4
Test için mailtrap.io kullanın
rulo

Mailtrap.io @roll güzel ipucu
Ben Everard

Mailtrap.io kullanırken tam olarak aynı hatayı aldım
luisfer

Yanıtlar:


243

Artık sizin için çalıştığını biliyorum @ Vantheman6 ama başka biri için aynı olması durumunda benim için işe yaradı.

Kullandığım posta hizmetinin ayrıntılarını .env dosyama ekledim. Bu yüzden aşağıdaki ayrıntılardan emin olun

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

.env dosyasında doğrudur.

NOT: .env dosyasını düzenledikten sonra sunucunuzu yeniden başlatmayı unutmayın, böylece buraya koyduğunuz yeni verileri alacaktır.

Sunucunuzu yeniden başlatmazsanız, bu hataya neden olabilecek değişiklikler yapmış olsanız bile .env dosyası eski posta verilerini uygulamaya sunmaya devam eder.


59
Vay canına, o 'Not' beni kurtardı. ENV değişkenlerinin başlangıçta önbelleğe alındığını bilmiyordum!
Gerben Jacobs

Cevabı güncelleyebilir ve yapılandırma dosyası yerine yeniden başlatma sunucusunu vurgulayabilir misiniz?
mrwaim

2
@mrwaim, ne demek istediğinizi elde edemediğim sürece sunucunun yeniden başlatılmasının tam olarak notta belirttiğim gibi olduğunu düşündüm.
Osei-Bonsu Christian

1
Ben "Not:" önce her şeyi kaldırmayı öneriyorum - not yardımcı oldu, daha önce şeyler değil. Diğer parçaları saklamak istiyorsanız, nottan sonra koyun. 3 İnsanlar 'Not' yorumunu iptal etti, bu yüzden Not muhtemelen onlara yardımcı oldu.
mrwaim

22
Daha önce yapılandırmanızı önbelleğe aldıysanız php artisan config:cache, sunucuyu yeniden başlatmak güncelleştirilmiş yapılandırmayı almaz. php artisan config:cacheTekrar
koşmayı

53

.Env dosya yapılandırmam laravel 5.1 için böyle

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

Burada en önemli şey, gmail uygulamasına özel şifre (16 haneli) oluşturduğum.

Herhangi bir konfigürasyon için şans olmadığından bir şey daha ortaya koymalıyım. Yani .env dosyasını her değiştirdiğimde bu komutu çalıştırmam gerekiyor

php artisan config:cache

Ve bu en önemlisidir çünkü bu komut olmadan laravel önceki ayarları önbelleğinden yürütür. Anlamak için 10 saatten fazla sürmem gerekiyor.


1
Benim için çözen ne php artisan cache:clearzaman kullanmaya devam php artisan config:cacheettim. Teşekkür ederim!
timgavin

4
hakkında not nedeniyle seçildiphp artisan config:cache
darronz

35

Yapılandırma dosyanızdaki kullanıcı adı ve şifre yanlış olduğundan bir kimlik doğrulama hatası alıyorsunuz.

Bunu değiştir:

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

Buna:

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

envYöntem senin .env dosyasını kontrol eder. .Env dosyanızda bunları çağırırsınız MAIL_USERNAME, bu yüzden envyönteme geçmeniz gerekir .

Bir sorun giderme ipucu: oluşturulan gerçek yapılandırmayıdd(Config::get('mail')); görebilmeniz için ekleyin . Bu, bunun gibi sorunları tespit etmenize yardımcı olur ve Laravel'in hangi bilgileri deneyip kullanacağını tam olarak bilir. Bu nedenle, sahip olduklarınızı incelemek için bunu test rotanızda geçici olarak durdurmak isteyebilirsiniz:

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

Bu yüzden mail.php dosyamı önerilerinizi yansıtacak şekilde değiştirdim `` kullanıcı adı '=> env (' MAIL_USERNAME '), `ve 'password' => env('MAIL_PASSWORD'), Hangisini ilginç buluyorum çünkü her yerde bunun için e-posta adresinizi ve şifrenizi girmem gerektiğini söylüyor. Hala bir hata alıyorum 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 dizininde çok sayıda dosya var
Vantheman6

Yapılandırmanızı nasıl inceleyeceğinizin bir örneğiyle güncellenmiş cevabımı görün.
jszobody

Bu hala bir hata alıyorum harika, ama aslında ne yaptığını görebiliyorum. Nedense php diyorum ki php diyorum ki env'ye "host" => "mailtrap.io" `geçmek çalışıyor'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

MAIL_HOST.Env dosyanızdaki dosyayı tekrar kontrol edin
jszobody

Doğru. MAIL_HOST=smtp.gmail.com Yani ben ne kadar sona erdi mail.php dosyasının her bölümünden tüm env kaldırmak oldu. Ve şimdi doğru bilgi geçiyor. OMG Teşekkürler işe yaradı. Sen erkeksin
Vantheman6


13

Sonunda aldım! Sadece paylaşmak için, sadece .env'den daha fazla yapılandırma var

Bu .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 dosyasının çalışması için adres ve ad da girmesi gerekir.

'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

Aynı sorunla karşılaşırsanız ve her şeyi çevrimiçi olarak denerseniz ve işe yaramazsa, muhtemelen yanlış bilgi gönderen yapılandırma önbellek dosyasıdır. Bootstrap / cache / config.php içinde bulabilirsiniz. Kimlik bilgilerinin tam orada olduğundan emin olun. Bunu anlamak bir haftamı aldı. Umarım bu bir gün birine yardım eder.


Siz Efendim, güzel bir Bordeaux'yu hak ettiniz, çok teşekkürler! Bu dosyada kullanıcı adı ve parolanın boş olduğunu fark ettim, hatta onları iki uygun dosyada doldurdum. Oradan ne yapacağımı biliyordum! Mersi !
Gregordy

TEŞEKKÜR EDERİM! Ciddi hiçbir saat ama bu bir saat hata ayıklama olmuştur !!! BU
Ahmad Alfy

11

Geliştirme amacıyla https://mailtrap.io/ .env dosyasına eklenmesi gereken tüm ayarları sağlar. Örneğin:

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

Aksi takdirde, uygulama amacıyla postadan .env dosyasına eklenecek smtp kimlik bilgilerini alabilirsiniz (gmail n all gibi)

Eklemeden sonra sunucuyu yeniden başlattığınızdan emin olun


Ayrıca sunucu yeniden başlattığınızdan emin olun .. Bu cümle benim sorunum çözüldü.
Hos Mercury

8

Bana da oluyor.

Çünkü .envdosyayı düzenlediğimizde sunucuyu yeniden başlatmamız gerekiyor. Akımı durdurun php artisan serveve tekrar başlatın. Bu kesinlikle işe yarayacaktır.

Hala çalışmadıysanız yapmayı deneyin php artisan config:cache


5

Buraya gelen insanlara daha sonra başvurmak için. Burada üçüncü cevapta verilen komutu çalıştırdıktan sonra ( şimdi Laravel 5.3 kullanıyorum ).

php artisan config:cache

Bu sorunla karşılaşabilirsiniz:

[ReflectionException]
Class view does not exist

Bu durumda, app.php dosyasının altındaki sağlayıcı listenize manuel olarak eklemeniz gerekir. GO-TO: app->config->app.php->'providers[]'ve ekleyin, şöyle:

Illuminate\View\ViewServiceProvider::class,

Umut bu birine yardım eder.


4

Aynı sorunu yaşadım; benim MAIL_ENCRYPTIONoldu tlsüzerinde mail.phpama öyleydi nullüzerinde .envdosyaya.
Bu yüzden değişti nulletmek tlsve işe yaradı!


Durum böyleydi!
劇場 期 劇場

3

Yukarıdaki çözümlerin hiçbiri benim için localhost üzerinde çalışmadı. Hatta daha az güvenli uygulamalardan erişime izin verdim, ekran kilidi açma captcha'sından erişime izin verdim ve eş için doğrulamayı ve eş için doğru adını SSL için yanlış olarak ayarladım.

Sonunda MailHog'un açık kaynaklı SMTP test çözümünü kullandım. Adımlar aşağıdaki gibidir:

  1. İşletim sisteminiz için MailHog'un en son sürümünü indirin
  2. .Env dosyanızda aşağıdaki ayarları belirtin

MAIL_DRIVER = SMTP

MAIL_HOST = 127.0.0.1

= 1025 MAIL_PORT

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. İndirilen MailHog dosyasını çalıştırın
  2. Eposta gönder
  3. Localhost'a giderek gönderilen e-postayı kontrol edin: 8025

3

Bu, sunucunuzun SMTP Sunucusuna erişimi olmadığı anlamına gelir.

Bunu yaparak test edebilirsiniz:

telnet <smtpServer> <smtpPort>

Erişim reddedildi hatasını almalısınız.

Çözüm, sunucunuz tarafından erişilebilen başka bir SMTP sunucusu kullanmaktır.


2

Sunucuyu yeniden başlatmalı ve şu komutları çalıştırmalısınız:

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

Bu işe yaramalı.


0

Sonuçlarınız dd(Config::get('mail'));null ise, sadece komutu kullanın

php artisan config:clear

0

.Env dosyalarınızda değişiklik yaptıktan sonra fikriniz sunucunuzu yeniden başlatıp uygulamayı tekrar sunuyor. Sadece gerçek hatadan emin olmak için. Php esnaf temiz ve daha sonra önbellek oldukça iyi çalışıyor.


-1

Seninle aynı problemi yaşadım, işe koyuldum.

Öncelikle, .env ayarlarının doğru yapılıp yapılmadığını iki kez kontrol etmeniz gerekir. İşte ayarlarım:

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

Lütfen şifrenizin tırnak işaretleri arasında olmadığından emin olun :).

Ve config / mail.php dosyasında yorum yapmadan aşağıdakilere sahiptir.

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

];

Umarım sizin için çalışır :)


-1

Benim durumumda: Sunucuyu yeniden başlatın ve php artisan config:clearkomutu çalıştırın .


-2
  1. Mailgun'a gidiyorsun
  2. Yetkili Alıcılar'ı tıklayın
  3. Posta göndermek istediğiniz e-posta adresini ekleyin.
  4. Postaya gönderilen mesajı doğrulayın.
  5. Bravo! ... Gitmen iyi.

2
Lütfen cehaletimi affet. Yukarıdaki cevap sorudaki Laravel5 e-posta sorunlarını nasıl çözüyor?
jww
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.