Laravel: メールの送信 (Mailable を使わない)

こちらを参考にしました。
[Laravelでメールを送信する(SMTPにgmailを使用)](https://webree.jp/article/laravel-mail-send/)
Gmail でなく、他の smtp サーバーで確認しました。

<ol>
<li>プロジェクトの作成</li>

```bash
laravel new mail01
```

<li>トップページの修正</li>

```php:resources/views/welcome.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Laravel</title>
</head>
<body>
<h2>Laravel</h2>
<a href="/mailsend"/>mailsend</a><br />
<p>Dec/23/2023</p>
</body>
</html>
```

<li>.env の設定</li>

次はただのサンプルです。実際に動作するものと書き換えて下さい。

```text:.env
（省略）
MAIL_MAILER=smtp
MAIL_HOST="hi-ho.mose-mail.jp"
MAIL_PORT=587
MAIL_USERNAME="user@hi-ho.ne.jp"
MAIL_PASSWORD="password"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="user@hi-ho.ne.jp"
MAIL_FROM_NAME="${APP_NAME}"
（省略）
```

<li>routes/web.php の修正</li>

```php:routes/web.php
省略）
（最後に加える）
Route::get('/mailsend', 'App\Http\Controllers\mailController@send');
```

<li>Controller の作成</li>

```bash
php artisan make:controller mailController
```

```php:app/Http/Controllers/mailController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\Mail;  // ファサードを読み込み

class mailController extends Controller
{
    public function send()
    {
	$from_address = config('mail.mailers.smtp.username');
	$to_address = 'xxxxx@gmail.com';
	$subject = 'テストメール AM 11:14';

	error_log("from_address = $from_address");
	error_log("to_address = $to_address");
	error_log("subject = $subject");

        // メールに表示する内容を設定
	$data = array();
	$data['text'] = 'ここがメール本文です。' . PHP_EOL;
	$data['text'] .= 'Dec/22/2027' . PHP_EOL;
	$data['text'] .= 'AM 11:14' . PHP_EOL;
	$data['text'] .= '以上。' . PHP_EOL;

        // 第1引数：メールの内容の表示に使うテンプレート(blade)
        // 第2引数：テンプレートファイルに渡すデータ(配列で渡す)
        // 第3引数：コールバック関数で送信先やタイトルの指定
	Mail::send(
		['text' => 'mail'],
            $data,
            function($message) use ($from_address, $to_address, $subject)  {
                $message
		->from($from_address)
		->to($to_address)
                ->subject($subject);
            }
        );

	        return view('send');
    }
}
```

<li>View の作成</li>

```php:resources/views/send.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>メール送信完了画面</title>
</head>
<body>
メールの送信が完了しました。
</body>
<html>
```

```php:resources/views/mail.blade.php
{{ $text }}
```

<li>route が正しいかの確認</li>

```bash
php artisan route:list
```

実行結果

```text
$ php artisan route:list

  GET|HEAD   / ............................................................... 
  POST       _ignition/execute-solution ignition.executeSolution › Spatie\Lar…
  GET|HEAD   _ignition/health-check ignition.healthCheck › Spatie\LaravelIgni…
  POST       _ignition/update-config ignition.updateConfig › Spatie\LaravelIg…
  GET|HEAD   api/user ........................................................ 
  GET|HEAD   mailsend .................................... mailController@send
  GET|HEAD   sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum › Csrf…

                                                            Showing [7] routes
```

<li>サーバーの起動</li>

```bash
php artisan serve
```

<li>ブラウザーで、　http://localhost:8000 にアクセス</li>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/64401954-1e98-ed9c-da18-4e764141c160.png)

mailsend をクリックすると、
app/Http/Controllers/mailController.php　に書かれたアドレスに
メールが送られます。
$to_address を変更して下さい。

</ol>