Git Product home page Git Product logo

sendportal-core's People

Contributors

adithyasrinivasan avatar aivis avatar cerbero90 avatar dependabot[bot] avatar dljfield avatar infiniziconsulting avatar ingoldsby avatar jinjie avatar jonob avatar joshuafranks avatar krysits avatar maizergomes avatar mauricius avatar navaer avatar rubenmuehlhans avatar sdebacker avatar shankhadevpadam avatar techieshark avatar tiagodevweb avatar willselby avatar zuzana-kunckova 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

sendportal-core's Issues

Campaign status is sent but no mails were sent

Hi there,

I do have template and content created.

Any tips?

It worked on v1, I did a fresh install off v2.

BTW, if the campaign is set as SENDING BEHAVIOUR to Queue draft and then each mails send individually the mail is actually sent.

Captura de Pantalla 2021-04-10 a la(s) 1 14 58 p  m

About the latest campaign:
Captura de Pantalla 2021-04-10 a la(s) 1 15 47 p  m

Error installing on php 8.1

I get this error when try to use the package.

Environment - php8.1, Larevel 8.75

Error:

Problem 1
- mettle/sendportal-core[v2.0.2, ..., v2.0.3] require kriswallsmith/buzz ^1.2 -> satisfiable by kriswallsmith/buzz[1.2.0].
- mettle/sendportal-core[v2.0.0, ..., v2.0.1] require php ^7.3 -> your php version (8.1.0) does not satisfy that requirement.
- kriswallsmith/buzz 1.2.0 requires symfony/options-resolver ^3.4 || ^4.0 || ^5.0 -> found symfony/options-resolver[v3.4.0-BETA1, ..., 3.4.x-dev, v4.0.0-BETA1, ..., 4.4.x-dev, v5.0.0-BETA1, ..., 5.4.x-dev] but the package is fixed to v6.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
- Root composer.json requires mettle/sendportal-core ^2.0 -> satisfiable by mettle/sendportal-core[v2.0.0, v2.0.1, v2.0.2, v2.0.3].

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

Suggestion: Switch back to self hosted assets

As Sendportal is a modern open-source self-hosted email marketing tool, it would feel naturaual to not load assets from CDNS as those would ping pack the IP and the URL of the instance to third party Organsiations and other 7-reasons-not-to-use-a-cdn add to such the opinion / motivation to do so.

A individual that evaluates sendportal for the implementation would (possibly) be grateful to have the option 'out of box' to control asset loading.

Would you and the community be interested in a PR that handles the third-party js and css assets to be self hosted?

Suggested solution

package.json

{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "mix",
        "watch": "mix watch",
        "watch-poll": "mix watch -- --watch-options-poll=1000",
        "hot": "mix watch --hot",
        "prod": "npm run production",
        "production": "mix --production"
    },
    "devDependencies": {
        "axios": "^0.21",
        "@fortawesome/fontawesome-free": "^5.13.0",
        "bootstrap": "^4.4.1",
        "jquery": "^3.2",
        "laravel-mix": "^6.0.6",
        "popper.js": "^1.16",
        "postcss": "^8.2.13",
        "resolve-url-loader": "^3.1.2",
        "sass": "^1.15.2",
        "sass-loader": "^8.0.0",
        "@fontsource/nunito": "^4.2.2",
        "chart.js": "^2.9.3"
    },
    "dependencies": {}
}

webpack.mix.js

const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel application. By default, we are compiling the Sass
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js('resources/js/app.js', 'public/js')
    .extract(['jquery', 'bootstrap', 'popper.js']);
mix.copy('node_modules/chart.js/dist/Chart.js', 'public/js/chart.js');
mix.sass('resources/sass/app.scss', 'public/css');

app.scss

// Fonts
// Fontawesome
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/brands';

// Nunito Font
@import "~@fontsource/nunito/latin-300.css";
@import "~@fontsource/nunito/latin-300-italic.css";
@import "~@fontsource/nunito/latin-400.css";
@import "~@fontsource/nunito/latin-400-italic.css";
@import "~@fontsource/nunito/latin-600.css";
@import "~@fontsource/nunito/latin-600-italic.css";
@import "~@fontsource/nunito/latin-700.css";
@import "~@fontsource/nunito/latin-700-italic.css";

// Variables
@import 'variables';
@import 'utilities.scss';
@import 'typography.scss';
@import 'borders';
@import 'forms.scss';
@import 'buttons.scss';
@import 'pages.scss';
@import 'modals.scss';
@import 'tables.scss';

// Bootstrap
@import '~bootstrap/scss/bootstrap';

(...)

blade.php

<!---css-->
<link href="{{ asset(mix('css/app.css')) }}" rel="stylesheet">

<!--js-->
<script src="{{asset(mix('js/manifest.js'))}}"></script>
<script src="{{asset(mix('js/vendor.js'))}}"></script>
<script src="{{asset(mix('js/app.js'))}}"></script>

<!--chartjs only where needed (e.g. dasboard) -->
@push('js')
    <script src="{{asset(mix('js/chart.js'))}}"></script>
   (...)
@endpush

[Feature Request] Different host urls for workspaces

We have set up various workspaces with us.
The sub/unsubscriber and webview links are always linked to the hostname.

The goal would be to be able to point different URLs to the same instance and adjust the webview link accordingly.

Actual:

Host Pointed to Workspace Webview Link
host1.com host1.com WS 1 host1.com/webview/....
host2.com host1.com WS 2 host1.com/webview/....

Goal:

Host Pointed to Workspace Webview Link
host1.com host1.com WS 1 host1.com/webview/....
host2.com host1.com WS 2 host2.com/webview/....

Or is this already possible?

thanks a lot
ruvus11

Feature Request: override or disable the scheduler

I am trying to run the package in a multi-tenant environment using Tenancy for Laravel. The task that is added to the scheduler is not aware of this, as it has no context.

As such, when the cron job fires, it does not do anything. Both of the below scenarios do not work:

  1. schedule:run or schedule:work in local environments
  2. tenants:run schedule:run or tenants:run schedule:work --tenants={tenant_id} in local environments (where tenant_id is the unique UUID of the tenant)

The only thing that does work is tenants:run sp:campaigns:dispatch, which makes it tenant aware at command level.

As such, it would be good if the scheduler built into the package could be disabled so that custom tenant logic could be added instead.

In the meantime, I'll move SendPortal out of the tenant scope – as much as I would like it to be there (for the purposes of separating concerns at tenant level), it is not absolutely crucial yet.

PS: Would be a nice first-option in that empty config file 😉

SMTP bounce processing?

Hi, i don't see any SMTP bounce processing or am i looking in the wrong places? how can i set it up?

Facades to do the CRUD?

First of all, thanks for the nice package. I am trying to do category-base lists (tags). Once user subscribe through the form, they will be added under the tag named after the category they are subscribing to.

After reading the docs and this issue, I realized that this can only be done through API calls.

But since I am using the package version (Sendportal Core), it feels like I am going around unnecessarily. It would be nice to have the facades and do the CRUD directly.

Is there any direct ways to do the CRUD?

Sending Campaign to Segment does not work

I created a campaign, selected the segment to be send and it says sent successfully but when i check the recipients, there are none.

I tried testing; created test segment, added my email, tried sending, did not receive and email, test email works fine.

Campaign stuck in queue

Hi, thanks for making this & open sourcing it.

I've set up a mailgun-based email service and try to send to my sample list of size 1, and it has been stuck pending in the queue for quite a while (hours).

image

Have any ideas on how to debug something not sending?

Skip subscribers on import if unsubscribed before

Hi,
We have few offline data collection sales points, we get that data on weekly basis in CSV files and upload them into the sendportal to send campaigns.
The issue we are facing is that sometimes there are customers who have unsubscribed from getting emails but if the same email is listed in our CSV files, these are updated automatically and they again start to receive these campaigns.
We had this issue referred to us by those customers.

Is there any way to skip import of emails which are already in the system and are unsubscribed?
Thanks.

Your campaign is currently sending

I installed and configured Sendportal as standalone application. I sent some campaigns earlier with 50+ subscribers. Total I tried to send a campaign to around 15K subscribers. I used Tags to select these 15K subscribers.

It has been about 3 hours and the campaign status page showing as the following. What can i do to send the remaining subscribers? I faced this issue once in the previous version of sendportal and after that I stopped using the application. The new version have the same issue. How can I debug and fix the issue?

Screenshot_2021-03-15 Campaign Status MailPortal

Error In installing

Laravel :8.50.0
PHP :8.0.8
Error

- mettle/sendportal-core[v2.0.2, ..., v2.0.3] require aws/aws-sdk-php-laravel ^3.6 -> satisfiable by aws/aws-sdk-php-laravel[3.6.0].
    - aws/aws-sdk-php-laravel 3.6.0 requires aws/aws-sdk-php ~3.0 -> satisfiable by aws/aws-sdk-php[3.0.0-beta.1, ..., 3.185.13].
    - aws/aws-sdk-php 3.0.x-dev is an alias of aws/aws-sdk-php dev-master and thus requires it to be installed too.
    - mettle/sendportal-core[v2.0.0, ..., v2.0.1] require php ^7.3 -> your php version (8.0.8) does not satisfy that requirement.
    - aws/aws-sdk-php[dev-master, 3.173.20, ..., 3.185.13] require guzzlehttp/psr7 ^1.7.0 -> found guzzlehttp/psr7[1.7.0, ..., 1.x-dev] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - aws/aws-sdk-php 3.0.0-beta.1 requires guzzlehttp/guzzle ~5.0 -> found guzzlehttp/guzzle[5.0.0, ..., 5.3.x-dev] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php 3.0.0 requires guzzlehttp/guzzle ^5.3 || ^6.0.1 -> found guzzlehttp/guzzle[5.3.0, ..., 5.3.x-dev, 6.0.1, ..., 6.5.x-dev] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php[3.0.1, ..., 3.3.4] require guzzlehttp/psr7 ~1.0 -> found guzzlehttp/psr7[1.0.0, ..., 1.x-dev] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - aws/aws-sdk-php[3.3.5, ..., 3.18.28] require guzzlehttp/guzzle ~5.3|~6.0.1|~6.1 -> found guzzlehttp/guzzle[5.3.0, ..., 5.3.x-dev, 6.0.1, ..., 6.5.x-dev] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php 3.18.29 requires guzzlehttp/guzzle ~5.3.1|~6.2.1 -> found guzzlehttp/guzzle[5.3.1, ..., 5.3.x-dev, 6.2.1, 6.2.2, 6.2.3] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php[3.18.30, ..., 3.69.10] require guzzlehttp/guzzle ^5.3.1|^6.2.1 -> found guzzlehttp/guzzle[5.3.1, ..., 5.3.x-dev, 6.2.1, ..., 6.5.x-dev] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php[3.69.11, ..., 3.130.3] require guzzlehttp/guzzle ^5.3.3|^6.2.1 -> found guzzlehttp/guzzle[5.3.3, 5.3.4, 5.3.x-dev, 6.2.1, ..., 6.5.x-dev] but it conflicts with your root composer.json require (^7.0.1).
    - aws/aws-sdk-php[3.131.0, ..., 3.173.19] require guzzlehttp/psr7 ^1.4.1 -> found guzzlehttp/psr7[1.4.1, ..., 1.x-dev] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - Root composer.json requires mettle/sendportal-core ^2.0 -> satisfiable by mettle/sendportal-core[v2.0.0, v2.0.1, v2.0.2, v2.0.3].

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.
   

Add ability to 'view in browser'

Newsletters tend to have a 'view in browser' link that leads to a linkable version of the newsletter.
wouldn't it be nice sendportal could render the newsletter with an uuid oder md5 URL ?

afterthought

maybe this is best reserved for API consumption, e.g. a JAM stack site could consume the data from the API to display the newsletter

Add placeholders for Title and PreHeaderText

for now 'only' some placeholders are available

https://sendportal.io/docs/v2/features/templates

    {{email}} – The subscriber's email
    {{first_name}} – The subscriber's first name (if set)
    {{last_name}} – The subscriber's last name (if set)
    {{unsubscribe_url}} – A URL generated to allow the subscriber to unsubscribe
    {{webview_url}} – A URL generated to allow the subscriber to view the message in a web view

as per my reserach a lot of email templates contain sections like

  • title
  • preheader-text

Pre Header

Email preheader is the summary text that follows a subject line when the email is viewed in an inbox. In many cases, it’s used to provide a short summary of the email, and is typically one sentence long.

https://www.campaignmonitor.com/resources/glossary/email-preheader/

title

Is it useful to have a <title> in the email templat?

only for 'view in browser' as per this litmus thread

Delete Subscriber

The delete functionality is missing from subscriber page, I can only unsub but cant delete a subscriber?

[enhancement]Include sender in header for PostalAdapter

If a settings param by name default_mail_sender exist or is not empty or null, it should be assigned to the header variable in the postal api.

+ if(!empty(Arr::get($this->config, 'default_mail_sender'))){
+       $message->sender(Arr::get($this->config, 'default_mail_sender'));
+}

This should come before the

  $message->send()

Also a modification to resources/views/email_services/options/postal.blade.php to include default_mail_sender

+ <x-sendportal.text-field name="settings[default_mail_sender]" :label="__('Default Sender Address')" :value="Arr::get($settings ?? [], 'default_mail_sender')" autocomplete="off" /> 

This will allow postal users send emails using the header parameter as verification for the MTA instead of the FROM.

This will enable users achieve proxy mailing. Example sent from [email protected] via mailer.absolute.com.
Screenshot 2023-01-09 005327

how to setup

can please hepl on how to setup .....prepare any videos quick setup

thanks

Sending Campaign to Segment does not work

I created a campaign, selected the segment to be send and it says sent successfully but when i check the recipients, there are none.

I tried testing; created test segment, added my email, tried sending, did not receive and email, test email works fine.

Need Help

Hello,
First I'd like to thank you for this awesome package.
I've integrated it using Mailjet service, and I'm able to create campaigns / Templates / Subscribers from the dashboard, and also I can send test to a given email
But No thing happens in my Mailjet account dashboard, i cannot see any subscriber / campaigns ... etc
Am I missing something to force synchronize between my local project and Mailjet Account ?
Also, if it's possible to provide us a small tutorial (code) how to create a subscription form, because I tried to use the Api but no chance to make it working.

Thanks.

Sent items count not same as subscribers count

the count of sent item in campaign always smaller than the sum of tags subscribers, when campaign dispatched.

example;
tag A = 8000 subs
tag B = 6000 subs
tag C = 3000 subs

total campaign subs expected is 17,000
campaign scheduled at 9am, after 2 hours total sent is only 5,289 message
image

latest sendportal, using SES on aws ec2 instance
queue is database, with supervisor

Subscribe Store API Multiple Subs

When I generate the API request to store a new subscriber it generates new subscriber rather checking if the subscriber exists in the system under the workspace and then create it.

Also there is no method available to check if the subscriber exists based on an email being sent.

Issue with Event Listener Not Firing

Hi SendPortal!

I'm encountering an issue with the event-listener flow in my application.

Details:

I've confirmed that the MessageDispatchEvent is being dispatched. I have added a dump statement within the constructor of this event, and I see the expected output.
I have also ensured that this event is linked to the MessageDispatchHandler listener in the EventServiceProvider.
When the event is dispatched, I expect the handle method in the MessageDispatchHandler to execute. However, it seems this method is not being called, even though the listener's constructor is.
I've also noticed that the MessageDispatchHandler is queued (implements ShouldQueue). While the constructor is being executed, the queued handle method seems to be the part not working.

What I've tried:

  1. Checked to ensure the queue worker is running and processing jobs.
  2. Checked for any failed jobs using php artisan queue:failed.
  3. Checked the application logs for any potential errors related to this flow.
  4. I'm not sure why the handle method inside the listener is not being executed after the event is dispatched. Any guidance or assistance would be much appreciated.

Thank you for your support.

How to enable a translation?

I am using the sendportal git repository, therefore I get sendportal-core import via composer. I notice there is an en.json, after creating an nl.json and updating sendportal-host.php nl is able to be selected, but I don't see it change in the interface. Maybe this is due to the localization preferences in the browser.

diff --git a/config/sendportal-host.php b/config/sendportal-host.php
index df3442b..16733b5 100644
--- a/config/sendportal-host.php
+++ b/config/sendportal-host.php
@@ -12,7 +12,8 @@ return [
     */
     'locale' => [
         'supported' => [
-            'en' => ['name' => 'English', 'native' => 'English']
+            'en' => ['name' => 'English', 'native' => 'English'],
+            'nl' => ['name' => 'Dutch', 'native' => 'Nederlands']
         ]
     ],

Support PHP 8

php -v

PHP 8.0.1 (cli) (built: Jan 13 2021 08:22:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.1, Copyright (c), by Zend Technologies

Package mettle/sendportal-core has a PHP requirement incompatible with your PHP version, PHP extensions and Composer version

Visual Builder

Hello,

I want to express my gratitude to everyone involved in this project for their efforts in making our lives easier.

Currently, I'm encountering challenges with the Unlayer installation in Sendportal. I placed version 2.0.5 in the vendor/mettle/sendportal-core directory, but it appears that nothing is happening on the frontend.

Could you kindly offer guidance on how to seamlessly integrate Unlayer into the project? Is there a need to install Unlayer externally, and if so, where should it be installed? I'm uncertain about what might be missing, as the Visual Builder isn't operating as expected for me.

I would greatly appreciate it if you could provide additional information on Visual Builder integration.

Thank you in advance.

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.