Skip to content

Send Email

JP Barbosa edited this page Mar 15, 2016 · 6 revisions

Send Email

Create article mailer
mkdir app/Mailers
nano app/Mailers/ArticleMailer.php
<?php

namespace App\Mailers;

use Mail;
use App\Article;

class ArticleMailer
{
    public function recommendTo($email, Article $article)
    {
        Mail::send('emails.article', ['article' => $article], function ($message) use ($email) {
            $message->to($email)->subject('Recommendation');
        });
    }
}
Create article mailer recommendation view
mkdir resources/views/emails
nano resources/views/emails/article.blade.php
<p>Dear friend,</p>
<p>
    Check this great article:
    {!! link_to_route('articles.show', $article['title'], $article['id']) !!}
</p>
Change configurations default e-mail from environment
nano config/mail.php
    ...
    'from' => [
        'address' => env('MAIL_ADDRESS'),
        'name' => env('MAIL_NAME')
    ],
    ...
Add environment variables
nano .env
...
MAIL_DRIVER=smtp
MAIL_HOST=smtp.yourmail.com
MAIL_PORT=587
MAIL_USERNAME=youruser
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=null
MAIL_ADDRESS=youruser@yourmail.com
MAIL_NAME="Laravel Apz"
Send recommendation using console
php artisan tinker
$mailer = new \App\Mailers\ArticleMailer
$mailer->recommendTo('me@domain.local', \App\Article::first());
Create recommendation request
php artisan make:request RecommendationRequest
Add validation
nano app/Http/Requests/RecommendationRequest.php
    ...
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'email' => 'required|email'
        ];
    }
    ...
Create recommendation controller
php artisan make:controller RecommendationsController
Add method to "store" recommendation
nano app/Http/Controllers/RecommendationsController.php
<?php

namespace App\Http\Controllers;

use Request;
use App\Http\Requests\RecommendationRequest;
use App\Http\Controllers\Controller;
use App\Article;
use App\Mailers\ArticleMailer;

class RecommendationsController extends Controller
{
    public function store(RecommendationRequest $request, Article $article, ArticleMailer $mailer)
    {
        $mailer->recommendTo($request->input('email'), $article);

        return ['Your recommendation was sent.'];
    }
}
Create recommendations routes
nano app/Http/routes.php
...
Route::resource('articles.recommendations', 'RecommendationsController', ['only' => ['create', 'store']]);
Restart the server
php artisan serve
Send recommendation using cURL
curl -H "Accept: application/json" \
     http://localhost:8000/articles/1/recommendations \
     --data "email=user@domain.local"
["Your recommendation was sent."]
Check your mailbox or laravel.log
tail storage/logs/laravel.log
Add mailer to Git
git add .
git commit -m "Add mailer to recommend article"
Next step: Send Email Views
Clone this wiki locally