簡體   English   中英

如何使用 Laravel 發送電子郵件?

[英]How to send email using Laravel?

我正在嘗試發送電子郵件,但我不能再動了,這就是我的觀點:

<h1>Contact TODOParrot</h1>
<form action="contact" method="post">

<div class="form-group">
 <label>Your First Name</label>
 <input type="text" name="Fname" placeholder="Your First Name" />
</div>

<div class="form-group">
  <label>Your Last Name</label>
  <input type="text" name="Lname" placeholder="Your Last Name" />
</div>

<div class="form-group">
<label>Your Email</label>
  <input type="email" name="Email" placeholder="Your Email" />
</div>
<div class="form-group">
<label>Your Phone Number</label>
  <input type="text" name="Phone" placeholder="Your Phone" />
</div>
<div class="form-group">
<label>Your Order</label>
  <input type="text" name="Order" placeholder="Your Order" />
</div>

<div class="form-group">
    <button class="btn btn-default" name="Submit" type="Submit">Send Order</button>
</div>
</form>

那是我的控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;  
use App\Http\Requests\ContactFormRequest;
    
class aboutController extends Controller
{
    //
    public function create()
    {
        return view('about.contact');
    }

    public function store(ContactFormRequest $request)
    {
        \Mail::send('about.contact',
        array(
            'Fname' => $request->get('Fname'),
            'Lname' => $request->get('Lname'),
            'Email' => $request->get('Email'),
            'Phone' => $request->get('Phone'),
            'Order' => $request->get('Order')
        ), function($message)
    {
        $message->from('mohamedsasa201042@yahoo.com');
        $message->to('elbiheiry2@gmail.com', 'elbiheiry')->subject('TODOParrot Feedback');
    });

        return \Redirect::route('contact')
      ->with('message', 'Thanks for contacting us!');
    }
}

這就是我的路線:

Route::get('contact', 
  ['as' => 'contact', 'uses' => 'AboutController@create']);
Route::post('contact', 
  ['as' => 'contact', 'uses' => 'AboutController@store']);

這就是 .env 文件中的配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=ssl

當我按下發送時,我刪除了問題中的名稱和密碼,它給了我“禁止”作為消息。

任何人都可以幫忙嗎?

與OP聊天后,這是答案。

主要問題:

您的ContactFormRequest.php具有以下規則功能:

public function rules()
    {
        return [
        'name'    => 'required',
        'email'   => 'required|email',
        'message' => 'required',
        ];
    }

但是您的表單沒有名稱和消息,因此您需要刪除不存在的元素或根據需要修改它們,出於我的測試目的,我只保留了電子郵件:

public function rules()
    {
        return [
            'Email' => 'required|email',
        ];
    }

保持命名約定是一種很好的做法,例如,如果您使用帶有大寫E電子郵件,而不是在任何地方都使用電子郵件。

因此,從未提交過該表單以供發送。

我還建議您構建我已經做過並測試過的store功能,它可以工作,您可以修改它以滿足您的要求:

$data = [
            'no-reply' => 'contact-from-web@nomail.com',
            'admin'    => 'mohamedsasa201042@yahoo.com',
            'Fname'    => $request->get('Fname'),
            'Lname'    => $request->get('Lname'),
            'Email'    => $request->get('Email'),
            'Phone'    => $request->get('Phone'),
            'Order'    => $request->get('Order'),
        ];

        \Mail::send('about.contact', ['data' => $data],
            function ($message) use ($data)
            {
                $message
                    ->from($data['no-reply'])
                    ->to($data['admin'])->subject('Some body wrote to you online')
                    ->to($data['Email'])->subject('Your submitted information')
                    ->to('elbiheiry2@gmail.com', 'elbiheiry')->subject('Feedback');
            });

它應該有效,

我僅使用 Mandrill API 電子郵件服務對其進行了測試,但您可以嘗試使用 SMTP 或 API,這取決於您。

如果要進行電子郵件確認,則需要創建電子郵件確認視圖,將數據轉發給它,如下所示:

\Mail::send('about.emailconfirmation', ['data' => $data],

您的視圖可能如下所示:

<tr>
    <td>
        <h1>Contact form</h1>
        <p>Dear {{ $data['Fname'] }},</p>
        <p>Thank you for contacting me.</p>
        <p>I will respond to your inquiry as quickly as possible.</p>
        <hr/>
        <p><b>Provided email</b></p>
        <p>Email: {{ $data['Email'] }},</p>
    </td>
</tr>

這只是示例,但您可以進一步修改它。

根據我的理解,我認為您在ContactFormRequest中缺少authorize部分轉到您的此App/Http/Request/ContactFormRequest並且您將使用此方法

public function authorize()
{
    return false;
}

所以只需將 return 設置為 true。 它將允許進一​​步的處理。

public function authorize()
{
    return true;
}

已編輯

將您的Contact POST Route更改為此

Route::post('contact/store',['as' => 'contact-store', 'uses' => 'AboutController@store']);

在您的表單操作中,只需更改此設置即可。

<form action="contact/store" ........
MAIL_DRIVER=sendmail
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls

我有一些類似的問題,並從 smtp 更改了 MAIL_DRIVER = sendmail

Laravel 應用程序

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465          
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>

MAIL_ENCRYPTION= ssl   

在您的控制器設置中

面對

use Illuminate\Support\Facades\Mail;

發送郵件

$to_name = "RECEIVER_NAME";
$to_email = "tomail@gmail.com";
$data = array("name"=>"Cloudways (sender_name)", "body" => "A test mail");

Mail::send([], $data, function($message) use ($to_name, $to_email) {
$message->to($to_email, $to_name)
->subject("Laravel Test Mail");
$message->from("preealweb@gmail.com","Test Mail");
});

注意:從郵件和到郵件

確保在 gmail 設置中啟用SucureLes 郵件

Here are three methods to send email in laravel 8.
First one is through our email id.
Second one is through Mailgun.
Third one is through SendinBlue.


# For smtp

# MAIL_MAILER=smtp
# MAIL_HOST=smtp.gmail.com
# MAIL_PORT=587
# MAIL_USERNAME=xxxxxxxxxxxxx@gmail.com
# MAIL_PASSWORD=xxxxxxxxxxxxxxx
# MAIL_ENCRYPTION=tls
# MAIL_FROM_ADDRESS=xxxxxxxxxxx@gmail.com
# MAIL_FROM_NAME="${APP_NAME}"

# For Mailgun

# MAIL_MAILER=mailgun
# MAIL_HOST=smtp.mailgun.org
# MAIL_PORT=587
# MAIL_USERNAME=sandboxxxxxxxxxxxxxxxxxxxxxxxxx.mailgun.org
# MAIL_PASSWORD=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# MAIL_ENCRYPTION=tls
# MAIL_FROM_ADDRESS=xxxxxxxxxxxxxxxxxxxxxxxxx
# MAIL_FROM_NAME="${APP_NAME}"
# MAILGUN_SECRET=API private key
# MAILGUN_DOMAIN=sandboxxxxxxxxxxxxxxxxxxxxx.mailgun.org

# For sendinblue
# MAIL_DRIVER=smtp
# MAIL_HOST=smtp-relay.sendinblue.com
# MAIL_PORT=587
# MAIL_USERNAME=xxxxxxxxxxxxxxxxxxxxxx@gmail.com
# MAIL_PASSWORD=xxxxxxxxxxxxxxxxxxxxxx
# MAIL_ENCRYPTION=tls
# MAIL_FROM_ADDRESS=xxxxxxxxxxxxxxxxxxxxxx@gmail.com
# MAIL_FROM_NAME="${APP_NAME}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM