Giter VIP home page Giter VIP logo

mailcoach-support's Introduction

Mailcoach support

Header image

Mailcoach is a self-hosted email list manager - in a modern jacket.

It features:

  • Subscribers and lists management
  • Subscribe, double opt-in and unsubscribe flows
  • HTML templates with drop-in variables
  • Drafts, previews and test mails
  • Send newsletters to an unlimited amount of subscribers
  • Statistics and tracking of opens and clicks

It can be installed as a stand alone app or integration in an existing Laravel application.

Have a support question?

This repo has been put in read only mode. If you have a question or need support for Mailcoach, head over to the issue tracker on the laravel-mailcoach repo.

Full documentation

mailcoach-support's People

Contributors

adrianmrn avatar freekmurze avatar riasvdv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mailcoach-support's Issues

unsubscribeUrl typo

when creating my first campaign, I noticed in the Delivery tab this message Without a way to unsubscribe, there's a high chance that your subscribers will complain. Consider adding the ::unsubscribeUrl:: placeholder.

But looking at the 'Preview' it does show an Unsubscribe button. And looking at the content tab it does show href="::unsubcribeUrl::"

In the delivered mail, the ::unsubcribeUrl:: was not replaced and just stayed as is, which caused an error when I tried to click on it.

The reason is there is a typo in the default template: 'unsubscribeUrl' !== 'unsubcribeUrl'

seeders included for audiences including one list with 137 real emails

I noticed that the standalone app (possibly the Laravel package too) comes with seeders for two email lists ('my audience' and 'sint'). The 'sint' list in particular appears to contain 137 real emails. I don't know if this is intended but it would seem risky to have people accidentally email all those people

changelog or possibility to get notified of updates?

Just wondering if there will be a changelog on the website, or if I can be emailed anytime an update is pushed so I know when to update my app.

Or alternatively, will we get access to a private repository here on Github where we can use the "watch" feature to get notified. I know Laravel Spark/Nova does it this way by granting access to private repositories.

More database columns are too short

I just got 2 more exceptions:

Illuminate\Database\QueryException, Code: 22001: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'url' at row 1 (SQL: insert into `mailcoach_campaign_links` (`campaign_id`, `url`, `updated_at`, `created_at`) values (1, https://myproject.com/unsubscribe?unsub=eyJpdiI6Ill6ODRTdEorVnNmMHVpUTRvS25DYlE9PSIsInZhbHVlIjoiWW9tV0JwVlpsejZ4M3huOGR2NndHWGdGbFpUK2VrUDN0akllbit5SkZ1bm9oYTRuU0czWW9YdUtxVlNYMng2NDBNZk4zckFCcG1IU3VKYXNaOGZoODc2N0hJNTloaitVcGd6eFNpczlWV2daU2Jscllqa3AxN3FucFNLQWRtZ20iLCJtYWMiOiJiMjNlNTIzMjQ3ZjQ3OTM3ZWQ3NmQ0NjkzZmQ4MTE4NjRmMDExMWUxYjhmOWIzNzRkZDI2YWM2MjMyYTRjZGI3In0%3D%2C+2020-02-07+17%3A21%3A11%2C+2020-02-07+17%3A21%3A11%29%29

and

PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'url' at row 1 in /apps/myproject/releases/24/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:121
Stack trace:
#0 /apps/myproject/releases/24/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(121): PDOStatement->execute()
#1 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Connection.php(463): Doctrine\DBAL\Driver\PDOStatement->execute()
#2 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Connection.php(662): Illuminate\Database\Connection->Illuminate\Database\{closure}()
#3 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Connection.php(629): Illuminate\Database\Connection->runQueryCallback()
#4 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Connection.php(464): Illuminate\Database\Connection->run()
#5 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Connection.php(416): Illuminate\Database\Connection->statement()
#6 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php(32): Illuminate\Database\Connection->insert()
#7 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2672): Illuminate\Database\Query\Processors\Processor->processInsertGetId()
#8 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1366): Illuminate\Database\Query\Builder->insertGetId()
#9 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(839): Illuminate\Database\Eloquent\Builder->__call()
#10 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(804): Illuminate\Database\Eloquent\Model->insertAndSetId()
#11 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(667): Illuminate\Database\Eloquent\Model->performInsert()
#12 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(438): Illuminate\Database\Eloquent\Model->save()
#13 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Support/helpers.php(422): Illuminate\Database\Eloquent\Builder->Illuminate\Database\Eloquent\{closure}()
#14 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(439): tap()
#15 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\Database\Eloquent\Builder->firstOrCreate()
#16 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1620): Illuminate\Database\Eloquent\Model->forwardCallTo()
#17 /apps/myproject/releases/24/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1632): Illuminate\Database\Eloquent\Model->__call()
#18 /apps/myproject/releases/24/vendor/spatie/laravel-mailcoach/src/Models/Send.php(147): Illuminate\Database\Eloquent\Model::__callStatic()
#19 /apps/myproject/releases/24/vendor/spatie/laravel-mailcoach-ses-feedback/src/SesEvents/Click.php(16): Spatie\Mailcoach\Models\Send->registerClick()

Feature: Ability to create automated workflows

As Maiilcoach is a developer-focused app

Must web app has workflows for various jobs:

  • lead warmer campaigns
  • App tutorial
  • Best practice
  • Onboarding flows
  • Winback (Notifications based on usage)

In the land of personalization and staying relevant for customers, we need to know if a user has completed step A, or clicked on link B. This is possible with Maiilcoach using link tracking, opening tracking and segments.
It is much more effective to send emails with the right content to a specific segment rather than sending newsletters out to anymore.

Workflow builder Example

Here is an example flow from Campaign Monitor:

image

Inspiration for Requirements

The workflow builder uses a basic rule engine with conditions to plan out which emails a user/segment should receive. Typically you want to add conditions with either custom fields, segments or user interaction with an email, such as "user clicked at least 1 link".
It would require MailCoach to create Emails in advance, and when building the Workflow.

Why build it?

Mailcoach has the potential of being much more than "just" a newsletter app. I can easily be the Laravel focused email platform for any type of business. Being able to build various kinds of emails supporting sales (leads), customer success (onboarding). And lets be honest, no one has filled this gap in the Laravel community yet.

Competitors like Campaign Monitor, Mailchimp, etc have vast functionality, but most Laravel focused developers would have it all covered by using MailCoach with Workflows.

Let me know what you think, and let's bounce back ideas on this matter

Statistics all show 0 (probable conflict of SES Configuration Sets)

/mailcoach/campaigns/1/summary says 0 for everything even though I have opened the email (and downloaded the images) and clicked a link. I don't know what I'm doing wrong.

I was very excited to see that my inbox received the campaign and that its links used my custom subdomain and then correctly bounced to my real domain (so I guess I configured SES and SNS correctly).

Does the fact that the "Send now" button worked mean that at least my Horizon and Redis are working?

I'm totally new to Horizon, so I wouldn't be surprised if I've done something wrong.

One problem I'm having with it is that I can't get the HorizonServiceProvider "gate" function to work because it never even gets called. I don't know why. I saw it get called yesterday, but today I haven't been able to get that to work, so I needed to ssh into my staging server and temporarily change my .env to say APP_ENV=local so that /horizon/dashboard would load without a 403 error.

But even after doing that temporary hack, everything I see in the Horizon dashboard is foreign to me; I don't know what activity I should be seeing and how to know if anything is wrong.

I even manually ran:

php artisan mailcoach:calculate-statistics
Start calculating statistics...
Calculating statistics for campaign id 1...
All done!

But the stats still say 0.

Also, instead of using "Send now" for my Campaign 2, I tried to schedule it, but it still says "This campaign is scheduled to be sent at 2020-02-04 22:45." even though that time has passed.

So then I just ran:

php artisan mailcoach:send-scheduled-campaigns
Checking if there are scheduled campaigns that should be sent...
Sending campaign `2` (2)...
All done!

But now /mailcoach/campaigns/2/summary continually says "Campaign 2 is preparing to send to test" and there is no email in my inbox.

Ohhh that was because the Horizon process had stopped. So now Campaign 2 sent.

But now even with Horizon definitely running, the stats are still incorrect for both campaigns, even when I manually run:

php artisan mailcoach:calculate-statistics
Start calculating statistics...
Calculating statistics for campaign id 2...
All done!

I'd appreciate any hints! Thanks!

Configured outgoing webhooks in standalone

Hey

I’m trying to think of the best way I can use this without polluting my main app (I’m not against the idea yet. Just playing with options).

If the standalone app had configurable outgoing webhooks it would be awesome.

These webhooks would relate directly to the events which are already dispatched in mailcoach and would ping the registered url(s) (if any configured). Would essentially allow external apps to respond to the events. :)

So rather than reacting to Mailcoach events in my main app (with mailcoach installed as a package) I would setup mc standalone and then register webhooks to do stuff when those events fire in my main app.

Cheers
Lee

Ps. The other big one would be a simple api for doing things in the standalone install. But I know this has been raised already. :)

configuration option to use a different database connection

I've chosen to install Mailcoach as a package of a very large app which uses multiple databases. I have a database dedicated to all things "comunication", this includes mail and notifications.

I would very much like the mailcoach tables to be created on that connection. I know I can publish the migration and make the change there. But packages usually require the connection to be set in the configuration as well so it knows to look for the model data on a different connection.

This is a very common configuration setting and I hope you can add it

Thank you

syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ',' or ')'

I have done a clean install using php 7.4 and am getting this error in the browser.

syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ',' or ')'
vendor/spatie/laravel-mailcoach/src/MailcoachServiceProvider.php:61

On the command line when running
php artisan migrate

I get this error.

Symfony\Component\Debug\Exception\FatalThrowableError : syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ')'

at /var/www/vhosts/xxxxxx/yyyyyy/mailcoach/vendor/spatie/laravel-mailcoach/src/MailcoachServiceProvider.php:61
57| public function register()
58| {
59| $this->mergeConfigFrom(DIR . '/../config/mailcoach.php', 'mailcoach');
60|

61| $this->app->singleton(QueryString::class, fn () => new QueryString(urldecode($this->app->request->getRequestUri())));
62|
63| $this->app->singleton(Version::class, function () {
64| $httpClient = new HttpClient();
65|

Exception trace:

1 Composer\Autoload\includeFile("/var/www/vhosts/gray.me.uk/mailcoach.gray.me.uk/mailcoach/vendor/composer/../spatie/laravel-mailcoach/src/MailcoachServiceProvider.php")
/var/www/vhosts/gray.me.uk/mailcoach.gray.me.uk/mailcoach/vendor/composer/ClassLoader.php:322

2 Composer\Autoload\ClassLoader::loadClass("Spatie\Mailcoach\MailcoachServiceProvider")
[internal]:0

I am not a laravel developer just a normal user who wants to evaluate Mailcoach.

SubscribedConfirmedEvent and other events

https://mailcoach.app/docs/package/advanced-usage/handling-events seems incorrect because SubscribedConfirmedEvent does not exist (but UnconfirmedSubscriberCreatedEvent does).

Also (and maybe I should have opened a separate issue for this next question?), other mail campaign providers offer webhooks for the following events; I'm wondering how I can create listeners for these scenarios:

  • Contact updated
  • Contact email address changed (in case not handled by "Contact updated")
  • Contact deleted
  • Soft bounce (of this campaign for this contact)
  • Hard bounce (of this campaign for this contact)
  • Contact flagged the campaign as spam

Thanks!

Domain name

Hi; What domain name should I enter in licenses if the application is tested locally in valet? Can I change domains in the future?

Incompatible php version for installing Mailcoach?

When I try to install Mailcoach using the docs, I get an error:

$ composer require "spatie/laravel-mailcoach:^1.0.0"                                                                
  [InvalidArgumentException]                                                                                            
  Package spatie/laravel-mailcoach at version ^1.0.0 has a PHP requirement incompatible with your PHP version (7.3.13)

However the console shows my php version is 7.4.2. What gives?

$ php -v
PHP 7.4.2 (cli) (built: Jan 22 2020 06:30:58) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.2, Copyright (c), by Zend Technologies

Accept custom attributes on CreateSubscriptionRequest?

As already mentioned here: #38 I've added custom attributes to my Subscribers. The next question is, how to accept these attributes on form requests to /subscribe/?

I think the only way is to extend Spatie\Mailcoach\Http\Front\Controllers\SubscribeController and replicate __invoke to accept a custom CreateSubscriptionRequest class with a custom $request->subscriberAttributes() function. Or is there a better way to handle this case?

Use with an existing user list

I have an existing user table that I use for mailing, and I'm scoping out how best to integrate mailcoach into an existing system.

Would the best way just be seeding users already authorised for newsletters into the mailcoach_subscribers? Seems a lot of duplication, especially considering I'd have to extend user registration, edit, deletion to fill/update the subscribers.

Unless I am missing something?

If nothing has happened, don’t send the weekly summary

My first weekly summary was sent and all numbers are 0. I set up a bunch of lists, but people don’t subscribe to all lists on a regular basis. It’s good to know if a few people subscribed this week, but I don’t need the info that nothing happened. What do you think?

IcVyTTsgsi

Mailchimp has daily or weekly summaries, but doesn’t send them in this case. I don’t know about other services.

Action App\Http\Controllers\Spatie\Mailcoach\Http\Front\Controllers\ConfirmSubscriberController not defined.

I created a simple newsletter form. It is working well without double-opt-in. After enabling user conformation I get the error while subscribing a user to a newsletter.:

    "message": "Action App\\Http\\Controllers\\Spatie\\Mailcoach\\Http\\Front\\Controllers\\ConfirmSubscriberController not defined.",
    "exception": "InvalidArgumentException",
    "file": "/home/robin/PhpstormProjects/project/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php",
    "line": 453,
    "trace": [
        {
            "file": "/home/robin/PhpstormProjects/project/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 103,
            "function": "action",
            "class": "Illuminate\\Routing\\UrlGenerator",
            "type": "->"
        },
        {
            "file": "/home/robin/PhpstormProjects/project/vendor/spatie/laravel-mailcoach/src/Mails/ConfirmSubscriberMail.php",
            "line": 25,
            "function": "action"
        },
        {
            "file": "/home/robin/PhpstormProjects/project/vendor/spatie/laravel-mailcoach/src/Actions/Subscribers/SendConfirmSubscriberMailAction.php",
            "line": 20,
            "function": "__construct",
            "class": "Spatie\\Mailcoach\\Mails\\ConfirmSubscriberMail",
            "type": "->"
        },
        {
            "file": "/home/robin/PhpstormProjects/project/vendor/spatie/laravel-mailcoach/src/Actions/Subscribers/CreateSubscriberAction.php",
            "line": 52,
            "function": "execute",
            "class": "Spatie\\Mailcoach\\Actions\\Subscribers\\SendConfirmSubscriberMailAction",
            "type": "->"
        },

Horizon jobs won't run

/horizon/dashboard shows:
image

/horizon/recent-jobs shows tons of jobs (mostly CalculateStatisticsJob but also SendCampaignJob), but they all say "-" for Runtime and have a Pause button for Status.
image

I then saw laravel/horizon#279 (comment) and thought "Oh, I have more environments than just local and production, so this is probably the problem!"

But even after cloning the 'production' block from https://mailcoach.app/docs/package/general/installation-and-setup#install-horizon and calling it 'staging' and running php artisan config:clear && php artisan queue:restart, the Horizon dash looks the same.

Any ideas? Thanks.

Repo is no longer letting me download via composer update

This morning, I tried to run composer require -vvv "spatie/laravel-mailcoach:^1.4.0" to get all the latest changes.

I don't remember what the error message was, but I noticed that my auth.json file was missing. And I know I didn't delete it.

So I recreated it with my key and tried again.

I have also tried composer clearcache.

Then composer require -vvv "spatie/laravel-mailcoach:^1.4.0" reaches:

Updates: spatie/laravel-mailcoach:1.4.2
  - Updating spatie/laravel-mailcoach (1.4.0 => 1.4.2): Downloading https://satis.mailcoach.app/dist/spatie/laravel-mailcoach/spatie-laravel-mailcoach-ba188cf6116be3ce8989cd1eaf09d2da1855e65a-zip-cb4d02.zip
Downloading (100%)Writing /home/vagrant/.cache/composer/files/spatie/laravel-mailcoach/0b2710f3c9da7c6e9be714076cd41b64ff0e2886.zip into cache from /home/vagrant/Code/myproject/vendor/spatie/laravel-mailcoach/699de2f72f844e44a184eb9ab2289634.zip
Executing command (CWD): unzip -qq  '/home/vagrant/Code/myproject/vendor/spatie/laravel-mailcoach/699de2f72f844e44a184eb9ab2289634.zip' -d '/home/vagrant/Code/myproject/vendor/composer/30f9fcd4'
    Update failed (Could not delete /home/vagrant/Code/myproject/vendor/composer/30f9fcd4: )
    Would you like to try reinstalling the package instead [yes]?

which is unusual. If I chose "No", I get:

Installation failed, reverting ./composer.json to its original content.

  [RuntimeException]
  Could not delete /home/vagrant/Code/myproject/vendor/composer/30f9fcd4:

If I try again and choose Yes, I get:

  - Installing spatie/laravel-mailcoach (1.4.2): Executing command (CWD): git --version

    Cloning to cache at '/home/vagrant/.cache/composer/vcs/git-github.com-spatie-laravel-mailcoach.git/'
Executing command (CWD): git clone --mirror '[email protected]:spatie/laravel-mailcoach.git' '/home/vagrant/.cache/composer/vcs/git-github.com-spatie-laravel-mailcoach.git/'
Enter passphrase for key '/home/vagrant/.ssh/id_rsa':

I don't use a key called id_rsa, so I don't know why I'm ever getting that prompt.

I try pressing Enter and then see:

Executing command (CWD): git config github.accesstoken
Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos
Executing command (CWD): hostname
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+vboxHomestead+2020-02-03+1359
to retrieve a token. It will be stored in "/home/vagrant/Code/myproject/auth.json" for future use by Composer.
Token (hidden):

But this wasn't mentioned in your instructions and feels weird.

None of this was required in the past couple days; everything had been working.

I don't think anything changed on my side. It was working yesterday before I went to sleep and now isn't working when I woke up.

Any ideas?

Thanks!

Placeholders are not working in web view

Hello,

Is there any option so that placeholders should work in web view url too?

In my list, some subscribers don't have first_name and last_name. Sending campaign to subscribers with no first_name is failing as I have used ::subscriber.first_name:: in the template. Is there any way to send email even if the subscriber don't have first_name by leaving it blank?

Textarea not working in firefox

The textarea is not working in Firefox. When opening a page the textarea looks like expected. If I'm clicking in, the textarea jumps to the right. After that the textarea has only a width of a few pixels.

I'm using Firefox Version 72.

Screenshot:

Screenshot_2020-02-01 Settings Newsletter Mailcoach

Standalone installation + main application

Hey!

Looking forward to trying out Mailcoach - but I have a question around the standalone setup.

Scenario: I have a primary Laravel app, and I'd like to install Mailcoach as a standalone app on a different server. But I'd like to sync the user list from the primary application to the Mailcoach app. Is this possible?

I could of course install Mailcoach as a dependency inside the primary application - but I want to avoid "polluting" the main app with a ton of mailing stuff (extra DB tables, events, redis, etc) if possible.

Essentially I'd like to treat Mailcoach similarly to Mailchimp - where I can just call API's to subscribe users to mailing lists. Is there any such API?

"Unable to locate publishable resources"

php artisan vendor:publish --provider="Spatie\Mailcoach\MailcoachServiceProvider" --tag="views" (found at https://mailcoach.app/docs/package/working-with-lists/using-double-opt-in#customizing-the-subscription-confirmation-response) results in:

Unable to locate publishable resources.
Publishing complete.

I don't know if this is normal. It doesn't feel like expected behavior because I don't see /resources/views/vendor/mailcoach/ created or anything in it.

This is with 1.3.0 and also earlier versions too.

Thanks.

Events need public properties or getters

Related to #28 (comment), I think you accidentally set the properties to private instead of public in BounceRegisteredEvent and ComplaintRegisteredEvent.

I think either they need to be public or there needs to be a public "getter" function that exposes their value.

Thanks.

Segment based on attributes?

I would like to let my subscribers choose a region where they live. I created an extra attribute region for that. Tags are in my option not a good fit for this purpose because a subscriber should only choose one region. Now I would like to send a newsletter with specific content for each region.

But here is my problem: I can only create Segements bases on Tags inside the App or by extending the Spatie\Mailcoach\Support\Segments\Segment with a databse query: https://mailcoach.app/docs/package/advanced-usage/segmenting-lists

I have about 20 regions. I've tried to create a Segment class and pass an individual region like RegionSegment('norway') but Spatie\Mailcoach\Models\Campain::segment only accepts a string and stores it inside database. My workaround is for now to create 20 Segment classes with only a short string diff. Thats feels wrong in my opinion.

I think it would be very helpful to support Segments based of attributes inside the App or at least inside as a Segment class.

No user icon

There is no user icon in the top right corner. Other than that I can't get into the mail configuration. I tried the /mailcoach/settings/mail-configuration and /mailcoach/settings/send-test-mail endpoint and get a 404.

Screenshot_2020-02-02 Campaigns Mailcoach

Provide ability to set the auth guard via config like nova

Hey

Thanks for building something so polished - every piece from the UI to the codebase is beautiful - amazing work!!!!

One issue I've stumbled into is that the Gate check is failing due to trying to use my default auth guard - which is not the guard I want to use, and as such is not even executing the gate callback (it's just failing and redirecting to the route configured in mailcoach.php config).

In short - can we add a config to configure the guard mailcoach uses to resolve the User, please? Nova took this route and it seemed to work pretty well.

I'm using MC as a package inside an existing app FYI.

Thanks again!
Lee

Implement a text editor for content

My clients aren't technical and so I would love to be able to have some predefined templates that campaigns can use and then have a text editor field that just allows them to format the body of the message as they see fit.

Host via Laravel Vapor

Hi,

we have all our services running via Laravel Vapor.

Since the standalone-app specifically is depending on Horizon I am wondering which steps are necessary to host Mailcoach through Vapor as well.

Do any of you have ideas to accomplish this case?

can it work with mailtrap for local testing?

I am getting an error saying the mail configuration is missing, but what I would like to do is use mailtrap.io for local testing, can it work with it or it absolutely requires SES or Mailgun or Sendgrid?

How to schedule future campaign to send to non-openers of a certain campaign

Let's say I send Campaign 1 on Monday at 08:00 with subject "hello" to 12k people.

How can I schedule a resend of that same campaign to send on Tuesday at 14:00 with subject "greetings" (even though the body will be the same as the original campaign) that will only send to the recipients of Campaign 1 who were not tracked as having opened it by the time the Tuesday campaign is scheduled to send.

Generally, I send a new campaign every "odd" day, and on "even" days, I want to send a resend of the previous day's campaign but with a new subject line and a different time of day and only send it to the recipients who hadn't opened the first version of that campaign.

And I want to be able to schedule out these sequences sometimes many days in advance (and trust that the determination of who the recipients will be won't happen until the last moment based on tracked opens).

I want to be able to schedule these all from the GUI rather than code.

https://sendpulse.com/ currently allows me to do this, but I want to close my SendPulse account and migrate to Mailcoach ASAP.

Do you have any suggestions? The docs at https://mailcoach.app/docs/package/advanced-usage/segmenting-lists are sparse and don't hint at how to seamlessly build all of this into the web GUI.

If in the short run you have hints about how I can do it programmatically (no GUI), that will be better than nothing. I'd love to schedule my first campaign by Feb 9 if possible with a schedule resend the next day to non-openers.

Thanks! :-)

Make Landingpages translatable?

Currently all Blade-Files inside the Package are in English and not translatable. I think at least for the Landingpages translatable string would be helpful.

How can I make it run on vapor?

Hey there,

I have some projects (with each having email subs) running on vapor.laravel.com and would like to use mailcoach there too. Right now i don't own a forge subscription to make maintaining & deployment easier.

The errors are about redis. Has anyone made this working on vapor??

Tested it locally, very good product I want to start using :)

Thank you!

Subscribe API for AJAX forms

With the predefined pages and the possibility to configure other URLs in the form Mailcoach is already very flexible and should work in most cases.

I’d love to see an API to subscribe users with AJAX though. I feel it improves the user experience to keep the context of the page when subscribing.

Leaving this here as a suggestion. If this feels out of scope for you, just close it.

FatalThrowableError: Class 'Spatie\Mailcoach\Http\App\Queries\Filters\SendTypeFilter' not found

I get this error when I visit /mailcoach/campaigns/3/outbox.

Symfony\Component\Debug\Exception\FatalThrowableError: Class 'Spatie\Mailcoach\Http\App\Queries\Filters\SendTypeFilter' not found
Level
ERROR
URL
https://myproject.com/mailcoach/campaigns/3/outbox
Input
[]
HTTP_REFERER
https://myproject.com/mailcoach/campaigns/3/summary

Trace
#0 /apps/myproject/releases/25/vendor/spatie/laravel-mailcoach/src/Http/App/Controllers/Campaigns/Sent/OutboxController.php(12): Spatie\Mailcoach\Http\App\Queries\CampaignSendsQuery->__construct()
#1 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(48): Spatie\Mailcoach\Http\App\Controllers\Campaigns\Sent\OutboxController->__invoke()
#2 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch()
#3 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#4 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Routing/Router.php(681): Illuminate\Routing\Route->run()
#5 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#6 /apps/myproject/releases/25/vendor/spatie/laravel-mailcoach/src/Http/App/Middleware/SetMailcoachDefaults.php(17): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#7 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Spatie\Mailcoach\Http\App\Middleware\SetMailcoachDefaults->handle()
#8 /apps/myproject/releases/25/vendor/spatie/laravel-mailcoach/src/Http/App/Middleware/Authorize.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#9 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Spatie\Mailcoach\Http\App\Middleware\Authorize->handle()
#10 /apps/myproject/releases/25/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#11 /apps/myproject/releases/25/vendor/spatie/laravel-mailcoach/src/Http/App/Middlew…

html tag (strong) not closed in view files

Hello,

I have published views for the package and found that strong tag is not closed properly in alreadyUnsubscribed.blade.php, subscribed.blade.php & unsubscribed.blade.php view files of resources/views/vendor/mailcoach/landingPages/ directory. The view file for resources/views/vendor/mailcoach/landingPages/alreadyUnsubscribed.blade.php is as following:

@extends('mailcoach::landingPages.layouts.landingPage', ['title' => 'Already unsubscribed'])

@section('content')
    <p>
        You were already unsubscribed from the list <strong class="font-semibold">{{ $emailList->name }}<strong>.
    </p>
@endsection

Instead closing the strong tag, it is being opened after {{ $emailList->name }} :(

Class 'Spatie\Mailcoach\Http\App\Queries\SendQuery' not found

When I'm at /mailcoach/email-lists/1/subscriber/1/details and click /mailcoach/email-lists/1/subscriber/1/received-campaigns I get this error that I haven't figured out yet:

/home/vagrant/Code/myproject/storage/framework/views/5805ff27c302dc3ac1d47f23cbf9b6e1704a2552.php:49:
object(Symfony\Component\Debug\Exception\FatalThrowableError)[1513]
  private 'originalClassName' => string 'Error' (length=5)
  protected 'message' => string 'Class 'Spatie\Mailcoach\Http\App\Queries\SendQuery' not found' (length=61)
  private 'string' (Exception) => string '' (length=0)
  protected 'code' => int 0
  protected 'file' => string '/home/vagrant/Code/myproject/vendor/spatie/laravel-mailcoach/src/Http/App/Controllers/EmailLists/Subscribers/ReceivedCampaignsController.php' (length=147)
  protected 'line' => int 14
  private 'trace' (Exception) => 
    array (size=45)
      0 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php' (length=108)
          'line' => int 48
          'function' => string '__invoke' (length=8)
          'class' => string 'Spatie\Mailcoach\Http\App\Controllers\EmailLists\Subscribers\ReceivedCampaignsController' (length=88)
          'type' => string '->' (length=2)
      1 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Routing/Route.php' (length=93)
          'line' => int 219
          'function' => string 'dispatch' (length=8)
          'class' => string 'Illuminate\Routing\ControllerDispatcher' (length=39)
          'type' => string '->' (length=2)
      2 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Routing/Route.php' (length=93)
          'line' => int 176
          'function' => string 'runController' (length=13)
          'class' => string 'Illuminate\Routing\Route' (length=24)
          'type' => string '->' (length=2)
      3 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Routing/Router.php' (length=94)
          'line' => int 681
          'function' => string 'run' (length=3)
          'class' => string 'Illuminate\Routing\Route' (length=24)
          'type' => string '->' (length=2)
      4 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php' (length=97)
          'line' => int 130
          'function' => string 'Illuminate\Routing\{closure}' (length=28)
          'class' => string 'Illuminate\Routing\Router' (length=25)
          'type' => string '->' (length=2)
      5 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/spatie/laravel-mailcoach/src/Http/App/Middleware/SetMailcoachDefaults.php' (length=116)

Clicks aren't always tracked as opens

If a subscriber clicks a link in a campaign when their email client is set to not download images (and therefore the open wouldn't be tracked that way), Mailcoach should still call registerOpen and fire CampaignOpenedEvent.

image

Sentry package conflict

Hey Spatie team (and thanks for building Mailcoach)!

I'm running into some issues while getting it running. Apparently, Mailcoach requires ocramius/package-versions ^1.5, which is locked at ^1.2.0 for everyone using the Sentry Laravel package. I understand this is not on your side, but keeping into account it's gonna be really difficult to get sentry to make the change (it's not a direct dependency, but a second-level dependency through jean85/pretty-package-versions), could you maybe consider supporting the older version if it provides all the required functionality?

Thank you!

add possibility to protect UI through a middleware instead of a guard

Since all my Laravel projects are pure API I usually don't have an internal user login and instead I protect sensitive routes with a 6 digit unique PIN using a custom middleware. This is how I access things like Telescope, Log Viewer and Horizon.

I would very much appreciate if it was possible to protect Mailcoach with a middleware

Thank you

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'failure_reason'

I ran into this error locally when trying to figure out #40

/home/vagrant/Code/myproject/storage/framework/views/5805ff27c302dc3ac1d47f23cbf9b6e1704a2552.php:49:
object(Illuminate\Database\QueryException)[1481]
  protected 'sql' => string 'update `mailcoach_sends` set `sent_at` = ?, `failed_at` = ?, `failure_reason` = ?, `mailcoach_sends`.`updated_at` = ? where `id` = ?' (length=132)
  protected 'bindings' => 
    array (size=5)
      0 => string '2020-02-05 04:25:23' (length=19)
      1 => string '2020-02-05 04:25:23' (length=19)
      2 => string 'Error executing "SendRawEmail" on "https://email.us-east-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-east-1.amazonaws.com` resulted in a `403 Forbidden` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-0...' (length=253)
      3 => string '2020-02-05 04:25:23' (length=19)
      4 => int 2
  protected 'message' => string 'SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'failure_reason' at row 1 (SQL: update `mailcoach_sends` set `sent_at` = 2020-02-05 04:25:23, `failed_at` = 2020-02-05 04:25:23, `failure_reason` = Error executing "SendRawEmail" on "https://email.us-east-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-east-1.amazonaws.com` resulted in a `403 Forbidden` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-0..., `mailcoach_sends`.`updated_at` ='... (length=548)
  private 'string' (Exception) => string '' (length=0)
  protected 'code' => string '22001' (length=5)
  protected 'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Database/Connection.php' (length=99)
  protected 'line' => int 669
  private 'trace' (Exception) => 
    array (size=119)
      0 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Database/Connection.php' (length=99)
          'line' => int 629
          'function' => string 'runQueryCallback' (length=16)
          'class' => string 'Illuminate\Database\Connection' (length=30)
          'type' => string '->' (length=2)
      1 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Database/Connection.php' (length=99)
          'line' => int 495
          'function' => string 'run' (length=3)
          'class' => string 'Illuminate\Database\Connection' (length=30)
          'type' => string '->' (length=2)
      2 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Database/Connection.php' (length=99)
          'line' => int 428
          'function' => string 'affectingStatement' (length=18)
          'class' => string 'Illuminate\Database\Connection' (length=30)
          'type' => string '->' (length=2)
      3 => 
        array (size=5)
          'file' => string '/home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php' (length=102)

Table 'mailcoach.media' doesn't exist

Hi Spatie Team,

When importing subscribers, I get this sql error

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mailcoach.media' doesn't exist (SQL: select * from mediawheremedia.model_id= 3 andmedia.model_idis not null andmedia.model_type = Spatie\Mailcoach\Models\SubscriberImport) (View: /home/vagrant/code/mailcoach/vendor/spatie/laravel-mailcoach/resources/views/app/emailLists/importSubscribers.blade.php)

Running php artisan migrate doesn't solve it. Please advise.

and thank you for your works!

allow mail driver configuration secrets to be set in config file rather than stored in database

There is something bothering me about #1 having to duplicate the key values for my mailgun configuration in both the .env file and having to enter them manually in the UI for them to be stored (I assume, didn't check) in a database table, and #2 for having to store these keys in a database table at all.

I would much rather these secrets be defined in one only place, the .env file, and then defined in the mailcoach.php configuration file, similar to how the /config/services.php file is structured

This would allow me to easily switch between two providers without having to re-enter the secrets in the UI. And I would feel safer knowing all my secrets are in one place, the usual place.

Supression / Blacklist support

Hey,

To keep subscribers from being emailed accidentally it might be an idea to implement a suppression/blacklist.

A subscriber can unsubscribe from a list, but still get emails from other lists. This is desired and expected behaviour.

But if the user wants to unsubscribe from ALL lists, this would be a good use case to blacklist them, which means no matter which lists they are on, they won't receive emails.

Think of the user who feels angry for some reason and unsubscribes from the list, under the impression that they won't get any further emails. But without realising it they are on another list and as such a few days later receive another email! At this point they would (understandably) report the mail as spam, hurting the IP reputation. Having an "Unsubscribe from all future emails" link under the current unsubscribe link inside the email html would be a nice feature to have.

Just a thought.

Lee

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.