Я хочу отправить электронное письмо с подтверждением, используя laravel. Функция laravel Mail :: send () только, кажется, принимает путь к файлу в системе. Проблема в том, что мои почтовые шаблоны хранятся в базе данных, а не в файле в системе.
Как передать простой контент по электронной почте?
Пример:
$content = "Hi,welcome user!"; Mail::send($content,$data,function(){});
Класс Mailer передает строку addContent
которая с помощью других методов вызывает views->make()
. В результате передача строки содержимого напрямую не будет работать, поскольку она попытается загрузить представление по этому имени.
Что вам нужно сделать, так это создать представление, которое просто echos $content
// mail-template.php <?php echo $content; ?>
А затем вставьте строку в это представление во время выполнения.
$content = "Hi,welcome user!"; $data = [ 'content' => $content ]; Mail::send('mail-template', $data, function() { });
update: В 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'); });
Если вы используете почтовые рассылки. Вы можете сделать что-то подобное в методе построения:
public function build() { return $this->view('email') ->with(['html'=>'This is the message']); }
И вы просто продолжаете и создаете вид email.blade.php
в своей папке ресурсов.
Затем в лезвии вы можете ссылаться на свою строку, используя синтаксис ларавельного лезвия
<html> <body> {{$html}} </body> </html>
или
<html> <body> {!!$html!!} </body> </html>
Если ваш сырой текст содержит html-метку, я надеюсь, что это работает для тех, у кого есть шаблоны, хранящиеся в базе данных, и хочет использовать класс Mailables в Laravel.
Это напрямую не связано с вопросом, но для тех, которые ищут установку простой текстовой версии вашего письма, сохраняя собственную версию HTML, вы можете использовать этот пример:
Mail::raw([], function($message) { $message->from('contact@company.com', 'Company name'); $message->to('johndoe@gmail.com'); $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()
инструкцию 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'); });
Надеюсь, это поможет вам.