Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending e-mail in Laravel with custom HTML

Tags:

php

email

laravel

I need to send e-mails but I already have the HTML generated, I don't want to use laravel blade because I need to apply a CSS Inliner to the HTML, so this is how i generate the html:

getRenderedView($viewData) {
    //code
    $html =  View::make('email.notification', $viewData)->render();
    $this->cssInliner->setCSS($this->getCssForNotificationEmail());
    $this->cssInliner->setHTML($html);
    return $this->cssInliner->convert();
}

So, to send the mail with Laravel you usually do something like this:

Mail::send('emails.welcome', $data, function($message)
{
    $message->to('[email protected]', 'John Smith')->subject('Welcome!');
});

But I don't want to pass a view, I already have the html, how can I do that?

like image 689
Carlos Goce Avatar asked Jul 23 '14 08:07

Carlos Goce


4 Answers

If I'm right in what you want to achieve, to get round this I created a view called echo.php and inside that just echo $html.

Assign your html to something like $data['html'].

Then below pass your $data['html'] to the echo view.

Mail::send('emails.echo', $data, function($message) { $message->to('[email protected]', 'John Smith')->subject('Welcome!'); });

Let me know how you get on.

like image 110
fossman83 Avatar answered Nov 18 '22 20:11

fossman83


I want to share a tip which might help sending emails without "blade".

Laravel Mail function is actually a wrapper for Swift. Just assign empty arrays to $template and $data, I mean the first 2 parameters of the function, then do the rest inside callback.

Mail::send([], [], function($message) use($to, $title, $email_body)
{
    $message->setBody($email_body)->to($to)->subject($title);
});
like image 5
Kenan Tumer Avatar answered Nov 18 '22 21:11

Kenan Tumer


The body is not accessible from the closure.

You can create the swift message by hand:

    $message = \Swift_Message::newInstance();
    $message->setFrom($messageToParse->template['fromEmail']);
    $message->setTo($messageToParse->to['email']);
    $message->setBody($messageToParse->body);
    $message->addPart($messageToParse->body, 'html contents');
    $message->setSubject('subject');

But then you to need to create the transport:

    $mailer = self::setMailer( [your transport] );
    $response =  $mailer->send($message);
like image 1
Christopher Pecoraro Avatar answered Nov 18 '22 21:11

Christopher Pecoraro


In your controller:

Mail::to("xyz.gmail.com")->send(new contactMailAdmin($userData));
like image 1
Sachin Aghera Avatar answered Nov 18 '22 20:11

Sachin Aghera