【问题标题】:How to send email using Laravel?如何使用 Laravel 发送电子邮件?
【发布时间】:2016-03-06 18:12:07
【问题描述】:

我正在尝试发送电子邮件,但我不能再动了,这是我的看法:

<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

当我按下发送时,我删除了问题中的名称和密码,它给了我“禁止”作为消息。

谁能帮忙?

【问题讨论】:

  • 你是否在 Laravel 中配置了邮件服务?
  • @maytham-ɯɐɥʇʎɐɯ 是的,我配置了它,我将编辑问题以添加它
  • @maytham-ɯɐɥʇʎɐɯ 我正在使用 smtp
  • @maytham-ɯɐɥʇʎɐɯ 不,它只输入“禁止”这个词,什么都不发送

标签: php laravel laravel-5


【解决方案1】:

和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>

这只是示例,您可以进一步修改它。

【讨论】:

    【解决方案2】:

    根据我的理解,我认为您在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" ........
    

    【讨论】:

    • 在你的 store 方法中,第一次检查你是否正确来了,意思是刚刚做了dd(\Request::all());
    • 它重复相同的页面,没有变化
    • 我刚刚更新了我的答案,看看,希望能解决你的问题
    【解决方案3】:
    MAIL_DRIVER=sendmail
    MAIL_HOST=smtp.gmail.com
    MAIL_PORT=587
    MAIL_USERNAME=
    MAIL_PASSWORD=
    MAIL_ENCRYPTION=tls
    

    我遇到了一些类似的问题,并从 smtp 更改了 MAIL_DRIVER = sendmail

    【讨论】:

      【解决方案4】:

      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 设置中启用 SucureLess 邮件

      【讨论】:

        【解决方案5】:
        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}"
        

        【讨论】:

          猜你喜欢
          • 2015-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-01
          • 2017-10-12
          • 2018-02-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多