質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2899閲覧

Laravel5.8で通知機能を利用したHTMLメールが上手く表示されない

majua51

総合スコア7

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/14 03:01

編集2020/01/14 05:15

お世話になっております。
Laravel5.8で通知機能を利用してHTMLメールを送信しているのですが
本番環境でメールは送信できるものの、ヘッダーとフッター以外のタグがすべて丸見えになってしまいます。
(開発環境では問題無く表示されています。)
どこを修正すれば良いのかがさっぱり分かりません。

###環境
さくらのマネージドサーバ
PHP 7.2
Laravel 5.8

###やったこと
こちらの記事を参考に通知機能を実装し
php artisan vendor:publish でnotificationのテンプレートを
/resources/views/vendor/notifications/ にコピーして編集しました。
email.blade.phpのコードです。

email

1@component('mail::message') 2 3 {{-- Greeting --}} 4 @if (! empty($greeting)) 5 {{ $greeting }} 6 @else 7 @if ($level === 'error') 8 @lang('Whoops!') 9 @else 10 @lang(__('Hello!')) 11 @endif 12 @endif 13 14 {{-- Intro Lines --}} 15 @foreach ($introLines as $line) 16 {{ $line }} 17 18 @endforeach 19 20 {{-- Action Button --}} 21 @component('mail::button', ['url' => $actionUrl, 'color' => 'blue']) 22 {{ $actionText }} 23 @endcomponent 24 25 {{-- Outro Lines --}} 26 @foreach ($outroLines as $line) 27 {{ $line }} 28 29 @endforeach 30 31 {{-- Salutation --}} 32 @if (! empty($salutation)) 33 {{ $salutation }} 34 @else 35 {{ config('app.name') }} 36 @endif 37 38 {{-- Subcopy --}} 39 @isset($actionText) 40 @slot('subcopy') 41 @lang(__('If you’re having trouble clicking the button above, copy and paste the URL below.')) 42 <br> 43 @lang(__('into your web browser:')) 44 @lang( 45 ' [:actionURL](:actionURL)', 46 [ 47 'actionText' => $actionText, 48 'actionURL' => $actionUrl, 49 ] 50 ) 51 @endslot 52 @endisset 53 54@endcomponent

通知機能です。
いくつか実装していますがどれも「メールは届くけどコードが見える」状態です。
一例としてパスワード再設定メールの通知を記載しておきます。

CustomResetPassword

1<?php 2 3namespace App\Notifications; 4 5use Illuminate\Bus\Queueable; 6use Illuminate\Notifications\Notification; 7use Illuminate\Contracts\Queue\ShouldQueue; 8use Illuminate\Notifications\Messages\MailMessage; 9 10class CustomResetPassword extends Notification 11{ 12 13 public $token; 14 15 16 public static $toMailCallback; 17 18 19 public function __construct($token) 20 { 21 $this->token = $token; 22 } 23 24 25 public function via($notifiable) 26 { 27 return ['mail']; 28 } 29 30 31 public function toMail($notifiable) 32 { 33 if (static::$toMailCallback) { 34 return call_user_func(static::$toMailCallback, $notifiable, $this->token); 35 } 36 return (new MailMessage) 37 ->from('email address', config('app.name')) 38 ->subject(__('Reset Password')) 39 ->line(__('Click button below and reset password.')) 40 ->action('パスワード再設定', url(config('app.url') . route('password.reset', ['token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false))) 41 ->line(__('If you did not request a password reset, no further action is required.')); 42 } 43 44 /** 45 * Get the array representation of the notification. 46 * 47 * @param mixed $notifiable 48 * @return array 49 */ 50 public function toArray($notifiable) 51 { 52 return [ 53 // 54 ]; 55 } 56 57 58 public static function toMailUsing($callback) 59 { 60 static::$toMailCallback = $callback; 61 } 62} 63

届いたメールがこちらです。
Gmailで受信しています。

mail

1お知らせ 2 3 ボタンをクリックしてパスワードを再設定してください。 4 5<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation"> 6<tr> 7 <td align="center"> 8 <table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation"> 9 <tr> 10 <td align="center"> 11 <table border="0" cellpadding="0" cellspacing="0" role="presentation"> 12 <tr> 13 <td> 14 <a href="http://(リセット用URL)" class="button button-blue" target="_blank">パスワード再設定</a> 15 </td> 16 </tr> 17 </table> 18 </td> 19 </tr> 20 </table> 21 </td> 22</tr> 23 このメールに心当たりがない場合は、このまま削除してください。 24 25 アプリ名 26ボタンがクリックできない場合は、下のURLをコピーしてブラウザのアドレス欄に貼り付け、直接アクセスしてください。 27ブラウザでアクセス: http://(リセット用URL)

ActionButton部分のタグが崩れている状態でしたので
ActionButtonに関する記述を削除して試したところ
タグの崩れはなくなりましたがCSSは適用されないままです。

調べてみましたがメールの表示に関する情報が出ておらず
どこから手を付ければいいのか困っております。

その他必要な情報などございましたらお知らせ下さい。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/14 03:31

提示された「受信メール」の内容が本当なら/trのあとに文章きてたり正しくtable終了してないみたいですけど、もっと簡単な構文ミスのないhtml送った場合はどうなんでしょう?
majua51

2020/01/14 04:08

htmlそのものを編集する部分が無いため上記のbladeファイルからAction button部分(tableを使って表示している部分)を除いたものを送信したところ、タグ丸見え状態は解消されました。ただ本来意図しているCSSが効いていない状態ですね・・
majua51

2020/01/14 05:04

ありがとうございます、原因はmail.blade.phpにインデントが入っていたせいでした。
m.ts10806

2020/01/14 05:07

では顛末を回答におこして自己解決としておいてください。
guest

回答1

0

自己解決

publishした email.blade.php にインデントが挿入されていたのが原因でした。
デプロイ前にphpstormのフォーマッターを使ったのがまずかったようです。

こちらを参考にインデントを消したところ、メールのhtmlの崩れも解消しCSSが適用されるようになりました。

投稿2020/01/14 05:06

編集2020/01/14 05:13
majua51

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/14 05:07

htmlの崩れの件も記載しておいた方が良いです。 もともとhtmlがそのままでることが問題で質問されてるので
majua51

2020/01/14 05:15

ありがとうございます、追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問