spatie / laravel-mail-preview Goto Github PK
View Code? Open in Web Editor NEWA mail driver to quickly preview mail
Home Page: https://spatie.be/open-source
License: MIT License
A mail driver to quickly preview mail
Home Page: https://spatie.be/open-source
License: MIT License
How about opening the HTML files that are sent directly in the default browser?
I believe the letter_opener gem for Rails does this - would be very handy.
in /home/vagrant/mt2magic-com/vendor/laravel/framework/src/Illuminate/Http/Request.php line 859
at Request->session() in /home/vagrant/mt2magic-com/vendor/themsaid/laravel-mail-preview/src/MailPreviewMiddleware.php line 27
at MailPreviewMiddleware->handle(object(Request), object(Closure))
I keep getting "Session store not set on request"
Hi There,
In the following line of code, and the one after that there are calls to the "ray" function, but that function is not available.
link to code where issue occurs
I just clean installed this package into my project (PHP8/L8) and got the following error:
Error
Call to undefined function Spatie\MailPreview\Http\Controllers\ray()
https://standaard-cms-v3.test/spatie-mail-preview?file_type=eml&mail_preview_file_name=969172_subject
Hi! The preview driver used to work fine but now have an issue. I have console command which generates 10 mails. When I run the command, preview generated only for 1-4 mails, picked randomly (and they are shuffling on each execution). Sometimes 1, sometimes more than 1.
The most interesting part is there: if I run the command in debug mode and stops on breakpoints, and continue program execution, then previews generating ALMOST for each mail. I have 9 of 10 mails, sometimes 8 of 10. (my fault, I have 8 mails, which means all previews are generated in debug mode)
Log files contain no errors. Mailable class is Queueable.
Driver configuration:
'path' => storage_path('email-previews'),
'maximum_lifetime' => 3600,
'show_link_to_preview' => false,
'middleware' => [],
QUEUE_DRIVER=sync
Laravel 6.15.0, PHP 7.3, Windows 10 x64
Hello Themsaid,
First of all big thumbs up for your package, really like it!
I am used to cache my routes in production, but with your package its currently not possible to do.
[LogicException]
Unable to prepare route [themsaid/mail-preview] for serialization. Uses Closure.
Do you have a fix for this or any plans to change this in the future?
Not sure whose bug it is, maybe fedeisas/laravel-mail-css-inliner
's.
css inliner's service provider (in register()
):
$this->app->afterResolving('mail.manager', function (MailManager $mailManager) {
$mailManager->getSwiftMailer()->registerPlugin($this->app->make(CssInlinerPlugin::class));
return $mailManager;
});
and mail preview's (in boot()
):
$this->app['mail.manager']->extend('preview', function () {
return new PreviewTransport(
$this->app->make('Illuminate\Filesystem\Filesystem'),
$this->app['config']['mailpreview.path'],
$this->app['config']['mailpreview.maximum_lifetime']
);
});
So mail preview is directly accessing (and building) mail.manager
, which immeditately triggers css inliner's afterResolving
, which triggers immediately triggers createTransport()
, with a transport preview
that doesn't exist yet, because mail preview's extend()
hasn't even run yet.
Moving mail preview's extend()
into a afterResolving('mail.manager', ...)
doesn't help, because when the mail manager is finally created (not on every request, just when sending mail) the same race condition happens.
This wasn't a problem with css inliner 2.2 + themsaid/laravel-mail-preview
. Maybe because it was a mailer then, not a transport. No idea how to fix this. Typical DI race condition.
I'm using Laravel 5.8.
I change my env file to with MAIL_DRIVER=preview
I run composer install + publish the config file before.
But when I try to send an email I have an error said that the preview driver is not supported.
Can anyone help ?
Steps to reproduce:
laravel new mail-preview-test
composer require themsaid/laravel-mail-preview
MailPreviewController
with the following contents:<?php
namespace App\Http\Controllers;
use Mail;
class MailPreviewController extends Controller
{
public function send()
{
Mail::raw('foo', function ($message) {
$message->to('[email protected]');
});
var_dump(session()->all());
return 'mail sent';
}
public function preview()
{
var_dump(session()->all());
return '</body>';
}
}
web.php
to:<?php
Route::get('/', 'MailPreviewController@send');
Route::get('/preview', 'MailPreviewController@preview');
Demo repository: https://github.com/mrk-j/laravel-mail-preview-bug-example
I use $message->embed(path/to/file.jpg)
to display embedded image, and the HTML generated was something like this: cid:[email protected]
, and of course it is something that not recognized by browser.
I recently had to test the content of a rendered email and as such ended up building a small and relatively messy assertion around the mail-preview package.
I'd like to tidy it up, would you be open to something like a "InteractsWithMailPreview" trait that would allow assertions to made against rendered emails?
I have a tiny problem with your package unfortunately :(
Every time when i click the link in the "popup" to the email preview and go back to my application my user is logged out.
Can't imagine that this is supposed to happen...
Normally i open the previews directly from the storage folder, but sometimes clicking would be useful.
I hope you can help me out with this annoying thing!
Could you make iT compatible with Laravel 5.3 please?
Would you consider a pull request to change the logic of laravel-mail-preview/src/MailProvider.php
to call $this->registerPreviewSwiftMailer()
if either the current condition is met or $this->app['config']['mail.preview'] == true
?
The rationale is that by providing a config key which can enable mail previews without replacing the mail driver, (1) it becomes simpler to condition mail previews upon the environment, APP_DEBUG value, or similar (certainly possible as is, but more cumbersome), and (2) you open the door to enhancements akin to that in #7 (currently closed, I realize).
I'll provide the PR, just wanted to confirm it would be well received first. Thanks!
Hey, Mohamed, I have used this package this may laravel 5.1 app but it generate an error when I typed: composer require ... any ideas?
Installing v2.0 and following install guide in docs produces this error.
ReflectionException (-1)
Class swift.transport does not exist
Installing on:
laravel v5.5.19
PHP 7.1.8
swiftmailer v6.0.2
Installed this package today on a Laravel 5.4 installation. However, when I try to use it, it throws an error, Call to undefined method Illuminate\Foundation\Application::share()
.
Indeed, from the Laravel 5.4 upgrade guide:
share
Method Removed
The
share
method has been removed from the container. This was a legacy method that has not been documented in several years. If you are using this method, you should begin using thesingleton
method instead
share
is used in the MailProvider. However, changing it directly to singleton
without changing anything else also doesn't work: Container.php line 988: Illegal offset type in unset
.
Driver [preview] not supported.
When I'm creating a Mailable and attach files to it in the build() method, the created .eml file by mail-preview during the send mechanism is missing those attachments.
When I use mailtrap I have the attachments. Am I missing something, or are attachments not supported?
Hello,
I added Route::mailPreview()
inside routes/web.php and getting the following error:
Attribute [mailPreview] does not exist.
at vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php:93
I already tried clearing the cache.
PHP 7.3.25
laravel 8.27
I do not get addresses in a .html
mail file. This is what I see as MessageInfo
<!--
From:[{}],
to:[{}],
reply-to:[{}],
cc:[],
bcc:[],
subject:Test subject
-->
When I dump $message->getOriginalMessage()->getFrom()
, I get:
array:1 [
0 => Symfony\Component\Mime\Address^ {#3012
-address: "[email protected]"
-name: "Example test (no-reply)"
}
]
And when it is serialized using json_encode
, it becomes: "[{}]"
Laravel version: Laravel Framework 10.18.0
When installed in a Laravel 5.5 app there's an exception being thrown:
Declaration of Themsaid\MailPreview\PreviewTransport::send(Swift_Mime_Message $message, &$failedRecipients = NULL) must be compatible with Swift_Transport::send(Swift_Mime_SimpleMessage $message, &$failedRecipients = NULL)
This should be fixed 😄
Hi themsaid,
do you think localization, translation are good Tags for this package? ^^
greetings
Hi, I am sending an email with only "BCC", then an error occurs as the "To" header is empty.
The error happens when the preview file name is generated. Here is the line causing it
A possible solution would be to use the "CC" and "BCC" to generate the filename.
$to = '';
foreach ([$message->getTo(), $message->getCc(), $message->getBcc()] as $receipents) {
if (!empty($receipents)) {
$to = str_replace(['@', '.'], ['_at_', '_'], array_keys($receipents)[0]);
break;
}
}
I will be happy to make PR. Let me know if you have better idea.
Thanks.
Hi there!
I tried to preview some mails on my local environment, and I've got this error when I tried to see previews on the package's route.
https://flareapp.io/share/x7Xk26OP#F37
I looked on Google and I found the same issue when using Laragon. It was something with tmp directory. Unfortunately, I don't use Laragon and those solutions were not solving my problem. I use Valet.
https://laracasts.com/discuss/channels/laravel/error-valueerror-path-cannot-be-empty-in-file
Laravel Version: 9.24.0
PHP Version: 8.1.10
Composer Version: 2.4.1
Thank you!
Sometimes I miss the preview box because I've tabbed away to something else. Is the timeout on the preview link necessary? Or could we make it configurable? I'd prefer to have it up there permanently.
I'm Willing to send a PR if you decide on something!
Hi, after upgrading Laravel to 8 (8.10.0) I am getting an error:
In MailManager.php line 172:
Unsupported mail transport [preview].
Any idea what might be wrong? I have tried republishing the config file. I am using the latest laravel-mail-preview 4.0
Just wondering if this has full L5.4 support yet? I've installed it in my L5.4 project and although there are no apparent errors, its not creating the html files.
I added Route::mailPreview() inside routes/web.php and getting the following error:
Attribute [mailPreview] does not exist.
at vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php:93
the part in the envoy blade where it occures is:
@task('optimizeInstallation', ['on' => 'remote'])
{{ logMessage('✨ Optimizing installation...') }}
cd {{ $newReleaseDir }};
{{ logMessage('✨ clear-compiled...') }}
php -d disable_functions='' artisan clear-compiled;
{{ logMessage('✨ artisan optimize..') }}
php -d disable_functions='' artisan optimize;
@endtask
=> artisan clear-compiled
I don't know if this is an envoy issue or this package issue.
PHP 8.0.2
Laravel 8.28.1
We would like to actually send emails AND save a HTML version for our records.
Is this possible with this library?
Thanks
Except for output location and maximum life time, perhaps it should be mentioned something about middleware property too. It took me some time to figure out why the preview link was always logging me out.
Useful package. Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.