Laravelを使用して確認メールを送信したい。 laravel Mail :: send()関数は、システム上のファイルへのパスのみを受け入れるようです。問題は、メールテンプレートがシステム上のファイルではなくデータベースに保存されることです。 。
プレーンコンテンツをメールに渡すにはどうすればよいですか?
例:
$content = "Hi,welcome user!";
Mail::send($content,$data,function(){});
更新:Laravel 5では、代わりにraw
を使用できます:
Mail::raw('Hi, welcome user!', function ($message) {
$message->to(..)
->subject(..);
});
これがあなたのやり方です:
Mail::send([], [], function ($message) {
$message->to(..)
->subject(..)
// here comes what you want
->setBody('Hi, welcome user!'); // assuming text/plain
// or:
->setBody('<h1>Hi, welcome user!</h1>', 'text/html'); // for HTML rich messages
});
HTMLメールの場合
Mail::send(array(), array(), function ($message) use ($html) {
$message->to(..)
->subject(..)
->from(..)
->setBody($html, 'text/html');
});
Mailerクラスは、文字列をaddContent
に渡します。これは、さまざまな他のメソッドを介してviews->make()
を呼び出します。その結果、コンテンツの文字列を直接渡すことは、その名前でビューをロードしようとするため、機能しません。
あなたがする必要があるのは、単にエコーするビューを作成することです$content
// mail-template.php
<?php echo $content; ?>
そして、実行時にそのビューに文字列を挿入します。
$content = "Hi,welcome user!";
$data = [
'content' => $content
];
Mail::send('mail-template', $data, function() { });
郵便物を使用していた場合。 buildメソッドで次のようなことができます:
public function build()
{
return $this->view('email')
->with(['html'=>'This is the message']);
}
そして、先に進み、ブレードビューを作成しますemail.blade.php
リソースフォルダー。
次に、ブレードでlaravelブレード構文を使用して文字列を参照できます
<html>
<body>
{{$html}}
</body>
</html>
または
<html>
<body>
{!!$html!!}
</body>
</html>
生のテキストにhtmlマークアップが含まれている場合、データベースにテンプレートが保存されており、LaravelのMailablesクラスを利用したい人にこれが機能することを願っています。
質問に直接関連するものではありませんが、カスタムHTMLバージョンを保持したまま電子メールのプレーンテキストバージョンの設定を検索する場合は、次の例を使用できます。
_Mail::raw([], function($message) {
$message->from('[email protected]', 'Company name');
$message->to('[email protected]');
$message->subject('5% off all our website');
$message->setBody( '<html><h1>5% off its awesome</h1><p>Go get it now !</p></html>', 'text/html' );
$message->addPart("5% off its awesome\n\nGo get it now!", 'text/plain');
});
_
「しかし、なぜ最初の引数をプレーンテキストとして設定しないのですか?」と尋ねる場合は、テストを行い、html部分のみを取り、生の部分は無視します。
追加の変数を使用する必要がある場合、匿名関数では次のようにuse()
ステートメントを使用する必要があります。
_Mail::raw([], function($message) use($html, $plain, $to, $subject, $formEmail, $formName){
$message->from($fromEmail, $fromName);
$message->to($to);
$message->subject($subject);
$message->setBody($html, 'text/html' ); // dont miss the '<html></html>' or your spam score will increase !
$message->addPart($plain, 'text/plain');
});
_
皆さんのお役に立てば幸いです。
public function build()
{
$message = 'Hi,welcome user!'
return $this->html($message)->subject($message);
}
あなたが知っているように
キューイングできるのは郵送物のみです。
つまり、ShouldQueue
インターフェイスを使用する場合
1)最初に、あなたはいつもするべきです
php artisan queue:restart
2)2番目に、メール可能ファイルでhtml
メソッドを使用できます(laravel 5.8でテスト済み)
public function build(): self
{
return $this
->html('
<html>
<body>
ForwardEmail
</body>
</html>
')
->subject(config('app.name') . ' ' . 'email forwarded')
->attachData($this->content, 'email.eml', [
'mime' => 'application/eml',
]);
}
Laravel Mailablesを使用して生のHTML、テキストなどを送信するには
mailableでMailable-> send()をオーバーライドし、そこで、前の応答のメソッドを使用します。
send([], [], function($message){ $message->setBody() } )
ビルド関数で$ this-> view()を呼び出す必要はまったくありません。