Intereting Posts
Создание представлений в PHP – лучшая практика Как получить информацию о группе вместе с деталями участников и общими друзьями (присутствующими в группе) я добавляю этот код, но теперь sub <li> список меню не открыт..задание выполнено, но не открывает меню JQuery jQGrid развернуть / свернуть сетку при нажатии на слой с надписью PHP Простой синтаксический анализатор строк CSS проанализировать данные html для данных массива в php Yii: невозможно отобразить данные в режиме сетки Загрузка нескольких файлов с помощью AJAX и PHP Прямое обновление jQuery / Ajax SQL с помощью PHP HTML DOM-манипуляция в PHP CakePHP принадлежит отношению с переменным полем «модель» Laravel: метод загрузки в другом контроллере без изменения URL-адреса PHP SDK 3.1.1 getUser () иногда возвращает 0 Сброс PHP opcache + развертывание в стиле символической ссылки Не удается открыть удаленный файл XML с помощью функции fopen (). Какое все разрешение нужно установить на сервере или какие параметры мне нужно установить в функции fopen ().

Laravel mail: передать строку вместо представления

Я хочу отправить электронное письмо с подтверждением, используя 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'); }); 

Надеюсь, это поможет вам.