Я хочу отправить подтверждение по электронной почте, используя laravel.
Кажется, что функция laravel Mail :: send () принимает путь к файлу в системе.
Проблема в том, что мои почтовые шаблоны хранятся в базе данных, а не в файле системы.
Как я могу передать простой контент на электронную почту?
Пример:
$content = "Hi,welcome user!";
Mail::send($content,$data,function(){});
обновление: в Ларавел 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() { });
Если вы использовали почтовые сообщения. Вы можете сделать что-то вроде этого в методе сборки:
public function build()
{
return $this->view('email')
->with(['html'=>'This is the message']);
}
И вы просто идете вперед и создаете вид лезвия email.blade.php
в папке вашего ресурса.
Затем в клинке вы можете ссылаться на вашу строку, используя синтаксис Laravel Blade
<html>
<body>
{{$html}}
</body>
</html>
или же
<html>
<body>
{!!$html!!}
</body>
</html>
Если ваш необработанный текст содержит HTML-разметку
Я надеюсь, что это работает для тех, у кого есть шаблоны, хранящиеся в базе данных, и кто хочет воспользоваться классом Mailables в Laravel.
Он не имеет прямого отношения к вопросу, но для тех, которые ищут установку версии вашего письма в обычном тексте, сохраняя пользовательскую версию 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>' if the email dont contains it to decrease your spam score !!
$message->addPart($plain, 'text/plain');
});
Надеюсь, это поможет вам.
Для отправки необработанного HTML, текста и т. Д. С помощью Laravel Mailables вы можете
переопределите Mailable-> send () в вашем Mailable и используйте метод в предыдущих ответах:
send([], [], function($message){ $message->setBody() } )
Нет необходимости вызывать $ this-> view () для вашей функции сборки.