https://github.com/netcore/module-email
Email module for managing automated emails
https://github.com/netcore/module-email
Last synced: 4 months ago
JSON representation
Email module for managing automated emails
- Host: GitHub
- URL: https://github.com/netcore/module-email
- Owner: netcore
- License: mit
- Created: 2017-10-24T12:16:36.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-07-04T08:23:24.000Z (almost 8 years ago)
- Last Synced: 2024-04-18T14:12:22.859Z (about 2 years ago)
- Language: PHP
- Homepage:
- Size: 270 KB
- Stars: 0
- Watchers: 6
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Module - Email
This module was made for easy management of automated emails and email campaigns.
## Pre-installation
This package is part of Netcore CMS ecosystem and is only functional in a project that has following packages
installed:
1. https://github.com/netcore/netcore
2. https://github.com/netcore/module-admin
3. https://github.com/netcore/module-translate
4. https://github.com/netcore/module-user
5. https://github.com/netcore/module-setting
### Installation
- Require this package using composer
```
composer require netcore/module-email
```
- Publish assets/configuration/migrations
```
php artisan module:publish Email
php artisan module:publish-config Email
php artisan module:publish-migration Email
php artisan migrate
```
- Add automated emails command to scheduling in "app/Console/Kernel.php"
```
$schedule->command('automated-emails:send')->everyMinute();
```
- Set queue driver to redis
- In your supervisor configuration set --timeout to 3600 or larger if a project will have large user base to send campaigns to
- Add `Modules\User\Traits\ReplaceableAttributes` trait to your `User` model and set public property `$replaceable` which you want dynamically use in email templates:
```
public $replaceable = [
'first_name',
'last_name',
'email'
];
```
and set `$replaceablePrefix` to prefix the replaceable attributes.
- Add "getFilters" and "getFilterQuery" methods to User model, like so:
```
public function getFilters()
{
return [
'is_email_verified' => [
'name' => 'Email verified?',
'type' => 'select', // Available types: text, select, multi-select, from-to
'values' => [-1 => 'Not important', 1 => 'Yes', 0 => 'No']
],
'country' => [
'name' => 'Country',
'type' => 'multi-select', // Available types: text, select, multi-select, from-to
'values' => Country::all()->mapWithKeys(function ($country) {
return [
$country->id => $country->name
];
})
],
];
}
public function getFilterQuery()
{
$filters = request()->get('filters', []);
$query = User::select('id', 'email');
foreach ($this->getFilters() as $field => $filter) {
$data = (isset($filters[$field])) ? $filters[$field] : -1;
if ($data < 0) {
continue;
}
if ($filter['type'] == 'multi-select') {
$query->whereHas($field, function ($q) use ($data) {
$q->whereIn('id', $data);
});
} elseif ($filter['type'] == 'from-to') {
if (($data['from'] && $data['to']) && $data['to'] > $data['from']) {
$query->whereBetween($field, [$data['from'], $data['to']]);
}
} else {
$query->where($field, $data);
}
}
return $query;
}
```
### Configuration
- Configuration file is available at config/netcore/module-email.php
### Seeding automated emails
```php
use Modules\Email\Models\AutomatedEmail;
use Netcore\Translator\Helpers\TransHelper;
$emails = [
[
'key' => 'verify_email',
'period' => 'now',
'type' => 'static', // Available types: static, period, interval
'is_active' => true,
'translations' => [
'name' => 'Email verification',
'text' => 'Please verify your email by clicking on the link: [VERIFICATION_URL]'
]
]
];
foreach ($emails as $email) {
$emailModel = AutomatedEmail::create(array_except($email, 'translations'));
$translations = [];
foreach (TransHelper::getAllLanguages() as $language) {
$translations[$language->iso_code] = $email['translations'];
}
$emailModel->updateTranslations($translations);
}
```
### Usage
- Add/remove email to/from subscriptions list
```php
email()->subscribe('example@example.com');
email()->unsubscribe('example@example.com');
```
- Send automated email
```php
email()->send('verify_email', $user, [
'VERIFICATION_URL' => $verificationUrl
]);
```