Подтвердить что ты не робот

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

Я хочу отправить электронное письмо с подтверждением, используя laravel. Функция laravel Mail:: send() только, кажется, принимает путь к файлу в системе. Проблема в том, что мои почтовые шаблоны хранятся в базе данных, а не в файле в системе.

Как передать простой контент по электронной почте?

Пример:

$content = "Hi,welcome user!";

Mail::send($content,$data,function(){});
4b9b3361

Ответ 1

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
});

Ответ 2

Для электронных писем Html

Mail::send(array(), array(), function ($message) use ($html) {
  $message->to(..)
    ->subject(..)
    ->from(..)
    ->setBody($html, 'text/html');
});

Ответ 3

Класс 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() { });

Ответ 4

Если вы используете почтовые рассылки. Вы можете сделать что-то подобное в методе построения:

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.

Ответ 5

Это не имеет прямого отношения к вопросу, но для тех, которые ищут установку текстовой версии вашего письма при сохранении пользовательской версии 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() оператор 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');
});

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

Ответ 6

Для отправки необработанного HTML, текста и т.д. С помощью Laravel Mailables вы можете

переопределите Mailable-> send() в вашем Mailable и там, используйте метод в предыдущих ответах:

send([], [], function($message){ $message->setBody() } )

Нет необходимости вызывать $this-> view() для вашей функции сборки.

Ответ 7

Как Вам известно

Только почтовые сообщения могут быть поставлены в очередь.

это означает, что если вы используете интерфейс ShouldQueue

1) во-первых, вы всегда должны делать

php artisan queue:restart

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',
    ]);
}

Ответ 8

public function build()
{
    $message = 'Hi,welcome user!'
    return $this->html($message)->subject($message);
}