กำลังพยายามรับอีเมล Laravel 5 ให้ทำงาน


154

ฉันกำลังพยายามส่งอีเมลไปยังผู้ใช้ที่ระบุโดยพิมพ์ URL แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

Swift_TransportException ใน AbstractSmtpTransport.php บรรทัด 383: รหัสตอบสนองที่คาดหวัง 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 เพื่อทำการทดสอบ
roll

เคล็ดลับที่ดีเกี่ยวกับ mailtrap.io @ ม้วน
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
ว้าวนั้น 'Note' ช่วยฉันด้วย ฉันไม่ทราบว่า ENV vars ถูกแคชไว้เมื่อเริ่มต้น!
Gerben Jacobs

คุณสามารถปรับปรุงคำตอบ - และไฮไลต์เซิร์ฟเวอร์รีสตาร์ทแทนไฟล์กำหนดค่าได้หรือไม่
mrwaim

2
@mrwaim ฉันคิดว่าการรีสตาร์ทเซิร์ฟเวอร์นั้นเป็นสิ่งที่ฉันระบุในบันทึกย่อยกเว้นว่าฉันไม่ได้รับสิ่งที่คุณกำลังบอก
Osei-Bonsu Christian

1
ฉันขอแนะนำให้นำทุกอย่างออกก่อน "หมายเหตุ:" - สิ่งที่ช่วยได้คือหมายเหตุและไม่ใช่สิ่งก่อนหน้า ฉันอยากจะแนะนำถ้าคุณต้องการเก็บส่วนอื่น ๆ ไว้ให้วางไว้หลังบันทึกย่อ 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
upvoted เนื่องจากบันทึกย่อของคุณเกี่ยวกับphp 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 ของฉันเพื่อสะท้อนถึงคำแนะนำของคุณ `'ชื่อผู้ใช้' => env ('MAIL_USERNAME') 'และ'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 ดังนั้นสิ่งที่ฉันทำลงไปคือการลบ env ทั้งหมดออกจากแต่ละส่วนของไฟล์ mail.php และตอนนี้ข้อมูลที่ถูกต้องกำลังผ่าน 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 ตรวจสอบให้แน่ใจว่าข้อมูลประจำตัวอยู่ในนั้น ฉันใช้เวลาหนึ่งสัปดาห์กว่าจะเข้าใจสิ่งนั้น ฉันหวังว่านี่จะช่วยให้ใครซักคนในวันหนึ่ง


คุณเซอร์สมควรได้รับบอร์โดซ์ที่ดีขอบคุณมาก! ฉันสังเกตเห็นว่าชื่อผู้ใช้และรหัสผ่านว่างเปล่าในไฟล์นั้นแม้ฉันจะใส่ในไฟล์ที่เหมาะสมทั้งสองไฟล์จากที่นั่นฉันรู้ว่าต้องทำอะไร! Merci!
Gregordy

ขอบคุณ! อย่างจริงจังฉันได้แก้จุดบกพร่องเป็นเวลาหนึ่งชั่วโมงด้วย NO CLUE แต่นี่ !!! สิ่งนี้
Ahmad 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

มิฉะนั้นเพื่อวัตถุประสงค์ในการนำไปใช้งานคุณสามารถรับข้อมูลประจำตัว smtp ที่จะเพิ่มในไฟล์. env จากเมล (เช่น gmail n all)

หลังจากตรวจสอบให้แน่ใจว่าได้รีสตาร์ทเซิร์ฟเวอร์


หลังจากตรวจสอบให้แน่ใจว่าได้รีสตาร์ทเซิร์ฟเวอร์ .. ประโยคนี้แก้ไขปัญหาของฉันได้
Hos Mercury

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เป็นtlsบนmail.phpแต่มันก็เป็นnullใน.envไฟล์
ดังนั้นฉันจึงเปลี่ยนnullเป็นtlsและใช้งานได้!


นี่เป็นกรณี!
夏期劇場

3

วิธีการแก้ปัญหาด้านบนไม่ทำงานสำหรับฉันบน localhost ฉันอนุญาตการเข้าถึงจากแอพที่มีความปลอดภัยน้อยกว่าอนุญาตการเข้าถึงผ่านการปลดล็อกการแสดงภาพและตั้งค่าเพียร์การตรวจสอบและยืนยันชื่อเพียร์เป็นเท็จสำหรับ SSL

ในที่สุดฉันใช้โซลูชันการทดสอบ SMTP โอเพ่นซอร์สของ MailHog ขั้นตอนดังต่อไปนี้:

  1. ดาวน์โหลด MailHog เวอร์ชันล่าสุดสำหรับระบบปฏิบัติการของคุณ
  2. ระบุการตั้งค่าต่อไปนี้ในไฟล์. env ของคุณ

MAIL_DRIVER = SMTP

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. เรียกใช้ไฟล์ที่ดาวน์โหลดของ MailHog
  2. ส่งอีเมล
  3. ตรวจสอบอีเมลที่ส่งโดยไปที่ localhost: 8025

3

นั่นหมายความว่าเซิร์ฟเวอร์ของคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ SMTP ได้

คุณสามารถทดสอบสิ่งนี้ได้โดยทำ:

telnet <smtpServer> <smtpPort>

คุณควรได้รับข้อผิดพลาดถูกปฏิเสธการเข้าถึง

วิธีแก้ไขคือใช้เซิร์ฟเวอร์ SMTP อื่นที่เซิร์ฟเวอร์ของคุณสามารถเข้าถึงได้




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.