From 39e7937458ef538b5977fc95ec90e363acfb7a28 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 20 Nov 2025 12:58:53 +0000 Subject: [PATCH] Fixed #18114 - include declined item name, added app headers --- .../Account/AcceptanceController.php | 14 +++++++------- app/Mail/BaseMailable.php | 18 ++++++++++++++++++ app/Mail/CheckinAccessoryMail.php | 4 +--- app/Mail/CheckinAssetMail.php | 4 +--- app/Mail/CheckinComponentMail.php | 4 +--- app/Mail/CheckinLicenseMail.php | 4 +--- app/Mail/CheckoutAcceptanceResponseMail.php | 4 +--- app/Mail/CheckoutAccessoryMail.php | 4 +--- app/Mail/CheckoutAssetMail.php | 4 +--- app/Mail/CheckoutComponentMail.php | 3 +-- app/Mail/CheckoutConsumableMail.php | 5 +---- app/Mail/CheckoutLicenseMail.php | 4 +--- app/Mail/ExpiringAssetsMail.php | 4 +--- app/Mail/ExpiringLicenseMail.php | 4 +--- app/Mail/SendUpcomingAuditMail.php | 4 +--- app/Mail/UnacceptedAssetReminderMail.php | 4 +--- ... => AcceptanceItemAcceptedNotification.php} | 16 ++++++++++------ ...ceptanceItemAcceptedToUserNotification.php} | 11 +++++++++-- ... => AcceptanceItemDeclinedNotification.php} | 18 ++++++++++++------ app/Notifications/AuditNotification.php | 4 +++- .../CheckinAccessoryNotification.php | 2 +- app/Notifications/CheckinAssetNotification.php | 1 + .../CheckinComponentNotification.php | 1 + .../CheckinLicenseSeatNotification.php | 1 + .../CheckoutAccessoryNotification.php | 9 ++++++++- .../CheckoutAssetNotification.php | 1 + .../CheckoutComponentNotification.php | 1 + .../CheckoutConsumableNotification.php | 1 + .../CheckoutLicenseSeatNotification.php | 1 + app/Notifications/CurrentInventory.php | 9 ++++++++- .../ExpectedCheckinAdminNotification.php | 9 ++++++++- .../ExpectedCheckinNotification.php | 9 ++++++++- .../ExpiringAssetsNotification.php | 9 ++++++++- .../ExpiringLicenseNotification.php | 9 ++++++++- app/Notifications/FirstAdminNotification.php | 9 ++++++++- app/Notifications/InventoryAlert.php | 8 +++++++- app/Notifications/MailTest.php | 10 ++++++++-- app/Notifications/RequestAssetCancelation.php | 9 ++++++++- app/Notifications/RequestAssetNotification.php | 9 ++++++++- .../SendUpcomingAuditNotification.php | 9 ++++++++- app/Notifications/WelcomeNotification.php | 9 ++++++++- resources/lang/en-US/mail.php | 6 ++++-- .../markdown/asset-acceptance.blade.php | 2 +- .../Ui/AccessoryAcceptanceTest.php | 8 ++++---- 44 files changed, 193 insertions(+), 86 deletions(-) create mode 100644 app/Mail/BaseMailable.php rename app/Notifications/{AcceptanceAssetAcceptedNotification.php => AcceptanceItemAcceptedNotification.php} (82%) rename app/Notifications/{AcceptanceAssetAcceptedToUserNotification.php => AcceptanceItemAcceptedToUserNotification.php} (87%) rename app/Notifications/{AcceptanceAssetDeclinedNotification.php => AcceptanceItemDeclinedNotification.php} (77%) diff --git a/app/Http/Controllers/Account/AcceptanceController.php b/app/Http/Controllers/Account/AcceptanceController.php index e77426b3a6..2c58cc1e2d 100644 --- a/app/Http/Controllers/Account/AcceptanceController.php +++ b/app/Http/Controllers/Account/AcceptanceController.php @@ -13,9 +13,9 @@ use App\Models\Company; use App\Models\Contracts\Acceptable; use App\Models\Setting; use App\Models\User; -use App\Notifications\AcceptanceAssetAcceptedNotification; -use App\Notifications\AcceptanceAssetAcceptedToUserNotification; -use App\Notifications\AcceptanceAssetDeclinedNotification; +use App\Notifications\AcceptanceItemAcceptedNotification; +use App\Notifications\AcceptanceItemAcceptedToUserNotification; +use App\Notifications\AcceptanceItemDeclinedNotification; use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; @@ -145,7 +145,7 @@ class AcceptanceController extends Controller // Get the data array ready for the notifications and PDF generation $data = [ 'item_tag' => $item->asset_tag, - 'item_name' => $item->name, // this handles licenses seats, which don't have a 'name' field + 'item_name' => $item->display_name, // this handles licenses seats, which don't have a 'name' field 'item_model' => $item->model?->name, 'item_serial' => $item->serial, 'item_status' => $item->assetstatus?->name, @@ -183,13 +183,13 @@ class AcceptanceController extends Controller // Add the attachment for the signing user into the $data array $data['file'] = $pdf_filename; try { - $assigned_user->notify((new AcceptanceAssetAcceptedToUserNotification($data))->locale($assigned_user->locale)); + $assigned_user->notify((new AcceptanceItemAcceptedToUserNotification($data))->locale($assigned_user->locale)); } catch (\Exception $e) { Log::warning($e); } } try { - $acceptance->notify((new AcceptanceAssetAcceptedNotification($data))->locale(Setting::getSettings()->locale)); + $acceptance->notify((new AcceptanceItemAcceptedNotification($data))->locale(Setting::getSettings()->locale)); } catch (\Exception $e) { Log::warning($e); } @@ -204,7 +204,7 @@ class AcceptanceController extends Controller $acceptance->decline($sig_filename, $request->input('note')); } - $acceptance->notify(new AcceptanceAssetDeclinedNotification($data)); + $acceptance->notify(new AcceptanceItemDeclinedNotification($data)); Log::debug('New event acceptance.'); event(new CheckoutDeclined($acceptance)); $return_msg = trans('admin/users/message.declined'); diff --git a/app/Mail/BaseMailable.php b/app/Mail/BaseMailable.php new file mode 100644 index 0000000000..470be9d957 --- /dev/null +++ b/app/Mail/BaseMailable.php @@ -0,0 +1,18 @@ + 'OOF, DR, RN, NRN, AutoReply', + 'X-System-Sender' => 'Snipe-IT', + ] + ); + } +} \ No newline at end of file diff --git a/app/Mail/CheckinAccessoryMail.php b/app/Mail/CheckinAccessoryMail.php index 311ee87a25..fac194e588 100644 --- a/app/Mail/CheckinAccessoryMail.php +++ b/app/Mail/CheckinAccessoryMail.php @@ -6,14 +6,12 @@ use App\Models\Accessory; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckinAccessoryMail extends Mailable +class CheckinAccessoryMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckinAssetMail.php b/app/Mail/CheckinAssetMail.php index 72f129dd6d..b4caefeb82 100644 --- a/app/Mail/CheckinAssetMail.php +++ b/app/Mail/CheckinAssetMail.php @@ -7,15 +7,13 @@ use App\Models\Asset; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Queue\SerializesModels; -class CheckinAssetMail extends Mailable +class CheckinAssetMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckinComponentMail.php b/app/Mail/CheckinComponentMail.php index 5b62a2c4b8..77af16ae28 100644 --- a/app/Mail/CheckinComponentMail.php +++ b/app/Mail/CheckinComponentMail.php @@ -7,14 +7,12 @@ use App\Models\Component; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckinComponentMail extends Mailable +class CheckinComponentMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckinLicenseMail.php b/app/Mail/CheckinLicenseMail.php index 6895fb9695..7fe7cd7916 100644 --- a/app/Mail/CheckinLicenseMail.php +++ b/app/Mail/CheckinLicenseMail.php @@ -6,14 +6,12 @@ use App\Models\LicenseSeat; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckinLicenseMail extends Mailable +class CheckinLicenseMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutAcceptanceResponseMail.php b/app/Mail/CheckoutAcceptanceResponseMail.php index fba6dd3de2..512bf18fc7 100644 --- a/app/Mail/CheckoutAcceptanceResponseMail.php +++ b/app/Mail/CheckoutAcceptanceResponseMail.php @@ -5,13 +5,11 @@ namespace App\Mail; use App\Models\CheckoutAcceptance; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckoutAcceptanceResponseMail extends Mailable +class CheckoutAcceptanceResponseMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutAccessoryMail.php b/app/Mail/CheckoutAccessoryMail.php index 24efd57933..e5aaa44662 100644 --- a/app/Mail/CheckoutAccessoryMail.php +++ b/app/Mail/CheckoutAccessoryMail.php @@ -8,15 +8,13 @@ use App\Models\Location; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -class CheckoutAccessoryMail extends Mailable +class CheckoutAccessoryMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutAssetMail.php b/app/Mail/CheckoutAssetMail.php index ae855b7226..d14a2430f4 100644 --- a/app/Mail/CheckoutAssetMail.php +++ b/app/Mail/CheckoutAssetMail.php @@ -8,8 +8,6 @@ use App\Models\Location; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Attachment; use Illuminate\Mail\Mailables\Content; @@ -17,7 +15,7 @@ use Illuminate\Mail\Mailables\Envelope; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Queue\SerializesModels; -class CheckoutAssetMail extends Mailable +class CheckoutAssetMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutComponentMail.php b/app/Mail/CheckoutComponentMail.php index 4a866b1410..f68b9f1431 100644 --- a/app/Mail/CheckoutComponentMail.php +++ b/app/Mail/CheckoutComponentMail.php @@ -6,13 +6,12 @@ use App\Models\Component; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckoutComponentMail extends Mailable +class CheckoutComponentMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutConsumableMail.php b/app/Mail/CheckoutConsumableMail.php index 6a3d806790..4d2cf7bd75 100644 --- a/app/Mail/CheckoutConsumableMail.php +++ b/app/Mail/CheckoutConsumableMail.php @@ -6,15 +6,12 @@ use App\Models\Consumable; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; -class CheckoutConsumableMail extends Mailable +class CheckoutConsumableMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/CheckoutLicenseMail.php b/app/Mail/CheckoutLicenseMail.php index f3688bae5a..91a8faa30a 100644 --- a/app/Mail/CheckoutLicenseMail.php +++ b/app/Mail/CheckoutLicenseMail.php @@ -7,14 +7,12 @@ use App\Models\LicenseSeat; use App\Models\Setting; use App\Models\User; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class CheckoutLicenseMail extends Mailable +class CheckoutLicenseMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/ExpiringAssetsMail.php b/app/Mail/ExpiringAssetsMail.php index 13d322f060..de193f27b5 100644 --- a/app/Mail/ExpiringAssetsMail.php +++ b/app/Mail/ExpiringAssetsMail.php @@ -3,14 +3,12 @@ namespace App\Mail; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class ExpiringAssetsMail extends Mailable +class ExpiringAssetsMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/ExpiringLicenseMail.php b/app/Mail/ExpiringLicenseMail.php index 77d94df637..73bfd1cea4 100644 --- a/app/Mail/ExpiringLicenseMail.php +++ b/app/Mail/ExpiringLicenseMail.php @@ -3,14 +3,12 @@ namespace App\Mail; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class ExpiringLicenseMail extends Mailable +class ExpiringLicenseMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/SendUpcomingAuditMail.php b/app/Mail/SendUpcomingAuditMail.php index d0b511771a..4a6c63e8e7 100644 --- a/app/Mail/SendUpcomingAuditMail.php +++ b/app/Mail/SendUpcomingAuditMail.php @@ -3,14 +3,12 @@ namespace App\Mail; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class SendUpcomingAuditMail extends Mailable +class SendUpcomingAuditMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Mail/UnacceptedAssetReminderMail.php b/app/Mail/UnacceptedAssetReminderMail.php index 0e4473aaad..09fb5bf8f9 100644 --- a/app/Mail/UnacceptedAssetReminderMail.php +++ b/app/Mail/UnacceptedAssetReminderMail.php @@ -3,14 +3,12 @@ namespace App\Mail; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; -class UnacceptedAssetReminderMail extends Mailable +class UnacceptedAssetReminderMail extends BaseMailable { use Queueable, SerializesModels; diff --git a/app/Notifications/AcceptanceAssetAcceptedNotification.php b/app/Notifications/AcceptanceItemAcceptedNotification.php similarity index 82% rename from app/Notifications/AcceptanceAssetAcceptedNotification.php rename to app/Notifications/AcceptanceItemAcceptedNotification.php index 07c35d66d7..a2616a74f3 100644 --- a/app/Notifications/AcceptanceAssetAcceptedNotification.php +++ b/app/Notifications/AcceptanceItemAcceptedNotification.php @@ -3,15 +3,14 @@ namespace App\Notifications; use AllowDynamicProperties; -use App\Helpers\Helper; use App\Models\Setting; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; -use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; -#[AllowDynamicProperties] class AcceptanceAssetAcceptedNotification extends Notification +#[AllowDynamicProperties] +class AcceptanceItemAcceptedNotification extends Notification { use Queueable; @@ -77,9 +76,14 @@ use Illuminate\Notifications\Notification; 'assigned_to' => $this->assigned_to, 'company_name' => $this->company_name, 'qty' => $this->qty, - 'intro_text' => trans('mail.acceptance_asset_accepted'), + 'intro_text' => trans('mail.acceptance_accepted_greeting'), ]) - ->subject(trans('mail.acceptance_asset_accepted')); + ->subject('✅ '.trans('mail.acceptance_accepted')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/AcceptanceAssetAcceptedToUserNotification.php b/app/Notifications/AcceptanceItemAcceptedToUserNotification.php similarity index 87% rename from app/Notifications/AcceptanceAssetAcceptedToUserNotification.php rename to app/Notifications/AcceptanceItemAcceptedToUserNotification.php index e745a5b8db..7c8fe9df09 100644 --- a/app/Notifications/AcceptanceAssetAcceptedToUserNotification.php +++ b/app/Notifications/AcceptanceItemAcceptedToUserNotification.php @@ -8,8 +8,10 @@ use App\Models\Setting; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; -#[AllowDynamicProperties] class AcceptanceAssetAcceptedToUserNotification extends Notification +#[AllowDynamicProperties] +class AcceptanceItemAcceptedToUserNotification extends Notification { use Queueable; @@ -73,7 +75,12 @@ use Illuminate\Notifications\Notification; 'intro_text' => trans_choice('mail.acceptance_asset_accepted_to_user', $this->qty, ['qty' => $this->qty, 'site_name' => $this->settings->site_name]), ]) ->attach($pdf_path) - ->subject(trans_choice('mail.acceptance_asset_accepted_to_user', $this->qty, ['qty' => $this->qty, 'site_name' => $this->settings->site_name])); + ->subject(trans_choice('mail.acceptance_asset_accepted_to_user', $this->qty, ['qty' => $this->qty, 'site_name' => $this->settings->site_name])) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/AcceptanceAssetDeclinedNotification.php b/app/Notifications/AcceptanceItemDeclinedNotification.php similarity index 77% rename from app/Notifications/AcceptanceAssetDeclinedNotification.php rename to app/Notifications/AcceptanceItemDeclinedNotification.php index e1def824d8..51fdcb76a1 100644 --- a/app/Notifications/AcceptanceAssetDeclinedNotification.php +++ b/app/Notifications/AcceptanceItemDeclinedNotification.php @@ -2,15 +2,14 @@ namespace App\Notifications; -use App\Helpers\Helper; use App\Models\Setting; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; -use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; -class AcceptanceAssetDeclinedNotification extends Notification +#[AllowDynamicProperties] +class AcceptanceItemDeclinedNotification extends Notification { use Queueable; @@ -21,6 +20,7 @@ class AcceptanceAssetDeclinedNotification extends Notification */ public function __construct($params) { + $this->item_name = $params['item_name']; $this->item_tag = $params['item_tag']; $this->item_model = $params['item_model']; $this->item_serial = $params['item_serial']; @@ -64,6 +64,7 @@ class AcceptanceAssetDeclinedNotification extends Notification $message = (new MailMessage)->markdown('notifications.markdown.asset-acceptance', [ 'item_tag' => $this->item_tag, + 'item_name' => $this->item_name, 'item_model' => $this->item_model, 'item_serial' => $this->item_serial, 'item_status' => $this->item_status, @@ -73,9 +74,14 @@ class AcceptanceAssetDeclinedNotification extends Notification 'company_name' => $this->company_name, 'qty' => $this->qty, 'admin' => $this->admin, - 'intro_text' => trans('mail.acceptance_asset_declined'), + 'intro_text' => trans('mail.acceptance_declined_greeting'), ]) - ->subject(trans('mail.acceptance_asset_declined')); + ->subject('⚠️ '.trans('mail.acceptance_declined', ['user' => $this->assigned_to, 'item' => $this->item_name])) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/AuditNotification.php b/app/Notifications/AuditNotification.php index 6d71e21bd2..abcd69c9b6 100644 --- a/app/Notifications/AuditNotification.php +++ b/app/Notifications/AuditNotification.php @@ -12,8 +12,10 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; +use Symfony\Component\Mime\Email; -#[AllowDynamicProperties] class AuditNotification extends Notification +#[AllowDynamicProperties] +class AuditNotification extends Notification { use Queueable; /** diff --git a/app/Notifications/CheckinAccessoryNotification.php b/app/Notifications/CheckinAccessoryNotification.php index 45c6fa617d..1716c49e19 100644 --- a/app/Notifications/CheckinAccessoryNotification.php +++ b/app/Notifications/CheckinAccessoryNotification.php @@ -18,8 +18,8 @@ use NotificationChannels\GoogleChat\Section; use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; -use Illuminate\Support\Facades\Log; +#[AllowDynamicProperties] class CheckinAccessoryNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckinAssetNotification.php b/app/Notifications/CheckinAssetNotification.php index 12f45884c9..8238681698 100644 --- a/app/Notifications/CheckinAssetNotification.php +++ b/app/Notifications/CheckinAssetNotification.php @@ -20,6 +20,7 @@ use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; use Illuminate\Support\Facades\Log; +#[AllowDynamicProperties] class CheckinAssetNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckinComponentNotification.php b/app/Notifications/CheckinComponentNotification.php index b302ee8979..5bb0edbfe1 100644 --- a/app/Notifications/CheckinComponentNotification.php +++ b/app/Notifications/CheckinComponentNotification.php @@ -18,6 +18,7 @@ use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; +#[AllowDynamicProperties] class CheckinComponentNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckinLicenseSeatNotification.php b/app/Notifications/CheckinLicenseSeatNotification.php index 60eec737d6..9352d83024 100644 --- a/app/Notifications/CheckinLicenseSeatNotification.php +++ b/app/Notifications/CheckinLicenseSeatNotification.php @@ -19,6 +19,7 @@ use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; +#[AllowDynamicProperties] class CheckinLicenseSeatNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckoutAccessoryNotification.php b/app/Notifications/CheckoutAccessoryNotification.php index f1a9551318..433d278b25 100644 --- a/app/Notifications/CheckoutAccessoryNotification.php +++ b/app/Notifications/CheckoutAccessoryNotification.php @@ -18,7 +18,9 @@ use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; use Illuminate\Support\Facades\Log; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class CheckoutAccessoryNotification extends Notification { use Queueable; @@ -210,6 +212,11 @@ class CheckoutAccessoryNotification extends Notification 'accept_url' => $accept_url, 'checkout_qty' => $this->checkout_qty, ]) - ->subject(trans('mail.Confirm_accessory_delivery')); + ->subject(trans('mail.Confirm_accessory_delivery')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); } } diff --git a/app/Notifications/CheckoutAssetNotification.php b/app/Notifications/CheckoutAssetNotification.php index 417634e04a..4dd9ea7301 100644 --- a/app/Notifications/CheckoutAssetNotification.php +++ b/app/Notifications/CheckoutAssetNotification.php @@ -25,6 +25,7 @@ use Illuminate\Support\Facades\Log; use Osama\LaravelTeamsNotification\Logging\TeamsLoggingChannel; use Osama\LaravelTeamsNotification\TeamsNotification; +#[AllowDynamicProperties] class CheckoutAssetNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckoutComponentNotification.php b/app/Notifications/CheckoutComponentNotification.php index 86ab20fcb4..7cdf3d39b6 100644 --- a/app/Notifications/CheckoutComponentNotification.php +++ b/app/Notifications/CheckoutComponentNotification.php @@ -20,6 +20,7 @@ use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; +#[AllowDynamicProperties] class CheckoutComponentNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckoutConsumableNotification.php b/app/Notifications/CheckoutConsumableNotification.php index 96568c4bd6..c17ecd1375 100644 --- a/app/Notifications/CheckoutConsumableNotification.php +++ b/app/Notifications/CheckoutConsumableNotification.php @@ -20,6 +20,7 @@ use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; use Illuminate\Support\Facades\Log; +#[AllowDynamicProperties] class CheckoutConsumableNotification extends Notification { use Queueable; diff --git a/app/Notifications/CheckoutLicenseSeatNotification.php b/app/Notifications/CheckoutLicenseSeatNotification.php index 43de9f698b..2b83d49d0a 100644 --- a/app/Notifications/CheckoutLicenseSeatNotification.php +++ b/app/Notifications/CheckoutLicenseSeatNotification.php @@ -19,6 +19,7 @@ use NotificationChannels\GoogleChat\Widgets\KeyValue; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel; use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage; +#[AllowDynamicProperties] class CheckoutLicenseSeatNotification extends Notification { use Queueable; diff --git a/app/Notifications/CurrentInventory.php b/app/Notifications/CurrentInventory.php index ae64b188cd..170f183d94 100644 --- a/app/Notifications/CurrentInventory.php +++ b/app/Notifications/CurrentInventory.php @@ -5,7 +5,9 @@ namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class CurrentInventory extends Notification { use Queueable; @@ -45,7 +47,12 @@ class CurrentInventory extends Notification 'licenses' => $this->user->licenses, 'consumables' => $this->user->consumables, ]) - ->subject(trans('mail.inventory_report')); + ->subject(trans('mail.inventory_report')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/ExpectedCheckinAdminNotification.php b/app/Notifications/ExpectedCheckinAdminNotification.php index 67c709f98d..061ae76189 100644 --- a/app/Notifications/ExpectedCheckinAdminNotification.php +++ b/app/Notifications/ExpectedCheckinAdminNotification.php @@ -5,7 +5,9 @@ namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class ExpectedCheckinAdminNotification extends Notification { use Queueable; @@ -48,7 +50,12 @@ class ExpectedCheckinAdminNotification extends Notification [ 'assets' => $this->assets, ]) - ->subject(trans('mail.Expected_Checkin_Report')); + ->subject(trans('mail.Expected_Checkin_Report')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/ExpectedCheckinNotification.php b/app/Notifications/ExpectedCheckinNotification.php index 3d7ec54d15..1ce672a827 100644 --- a/app/Notifications/ExpectedCheckinNotification.php +++ b/app/Notifications/ExpectedCheckinNotification.php @@ -7,7 +7,9 @@ use Carbon\Carbon; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class ExpectedCheckinNotification extends Notification { use Queueable; @@ -58,7 +60,12 @@ class ExpectedCheckinNotification extends Notification 'serial' => $this->params->serial, 'asset_tag' => $this->params->asset_tag, ]) - ->subject(($today > $this->params->expected_checkin) ? trans('mail.Expected_Checkin_Notification_Pastdue', ['name' => $this->params->display_name]) : trans('mail.Expected_Checkin_Notification', ['name' => $this->params->display_name])); + ->subject(($today > $this->params->expected_checkin) ? trans('mail.Expected_Checkin_Notification_Pastdue', ['name' => $this->params->display_name]) : trans('mail.Expected_Checkin_Notification', ['name' => $this->params->display_name])) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/ExpiringAssetsNotification.php b/app/Notifications/ExpiringAssetsNotification.php index 076db149fb..fbe8cad045 100644 --- a/app/Notifications/ExpiringAssetsNotification.php +++ b/app/Notifications/ExpiringAssetsNotification.php @@ -5,7 +5,9 @@ namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class ExpiringAssetsNotification extends Notification { use Queueable; @@ -51,7 +53,12 @@ class ExpiringAssetsNotification extends Notification 'assets' => $this->assets, 'threshold' => $this->threshold, ]) - ->subject(trans('mail.Expiring_Assets_Report')); + ->subject(trans('mail.Expiring_Assets_Report')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/ExpiringLicenseNotification.php b/app/Notifications/ExpiringLicenseNotification.php index 4be549e452..4ffdccf4f5 100644 --- a/app/Notifications/ExpiringLicenseNotification.php +++ b/app/Notifications/ExpiringLicenseNotification.php @@ -5,7 +5,9 @@ namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class ExpiringLicenseNotification extends Notification { use Queueable; @@ -52,7 +54,12 @@ class ExpiringLicenseNotification extends Notification 'licenses' => $this->licenses, 'threshold' => $this->threshold, ]) - ->subject(trans('mail.Expiring_Licenses_Report')); + ->subject(trans('mail.Expiring_Licenses_Report')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/FirstAdminNotification.php b/app/Notifications/FirstAdminNotification.php index 83e3a65de7..ba7d89edcd 100644 --- a/app/Notifications/FirstAdminNotification.php +++ b/app/Notifications/FirstAdminNotification.php @@ -5,7 +5,9 @@ namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class FirstAdminNotification extends Notification { use Queueable; @@ -46,6 +48,11 @@ class FirstAdminNotification extends Notification { return (new MailMessage) ->subject(trans('mail.welcome', ['name' => $this->_data['first_name'].' '.$this->_data['last_name']])) - ->markdown('notifications.FirstAdmin', $this->_data); + ->markdown('notifications.FirstAdmin', $this->_data) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); } } diff --git a/app/Notifications/InventoryAlert.php b/app/Notifications/InventoryAlert.php index a4c27ab902..e2a3f7fa3d 100644 --- a/app/Notifications/InventoryAlert.php +++ b/app/Notifications/InventoryAlert.php @@ -6,6 +6,7 @@ use AllowDynamicProperties; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; #[AllowDynamicProperties] class InventoryAlert extends Notification @@ -52,7 +53,12 @@ class InventoryAlert extends Notification 'threshold' => $this->threshold, ] ) - ->subject(trans('mail.Low_Inventory_Report')); + ->subject(trans('mail.Low_Inventory_Report')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/MailTest.php b/app/Notifications/MailTest.php index 65a6c63b77..00108b669d 100644 --- a/app/Notifications/MailTest.php +++ b/app/Notifications/MailTest.php @@ -2,11 +2,12 @@ namespace App\Notifications; -use App\Models\Settings; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class MailTest extends Notification { use Queueable; @@ -40,6 +41,11 @@ class MailTest extends Notification { return (new MailMessage) ->subject(trans('mail.test_email')) - ->markdown('notifications.Test'); + ->markdown('notifications.Test') + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); } } diff --git a/app/Notifications/RequestAssetCancelation.php b/app/Notifications/RequestAssetCancelation.php index d6e5f44fd9..25333a7ffa 100644 --- a/app/Notifications/RequestAssetCancelation.php +++ b/app/Notifications/RequestAssetCancelation.php @@ -8,7 +8,9 @@ use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Log; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class RequestAssetCancelation extends Notification { /** @@ -124,7 +126,12 @@ class RequestAssetCancelation extends Notification 'expected_checkin' => $this->expected_checkin, 'intro_text' => trans('mail.a_user_canceled'), ]) - ->subject(trans('Item Request Canceled')); + ->subject(trans('general.request_canceled')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/RequestAssetNotification.php b/app/Notifications/RequestAssetNotification.php index 85f5aef50c..1ce062adb2 100644 --- a/app/Notifications/RequestAssetNotification.php +++ b/app/Notifications/RequestAssetNotification.php @@ -7,7 +7,9 @@ use App\Models\Setting; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class RequestAssetNotification extends Notification { /** @@ -118,7 +120,12 @@ class RequestAssetNotification extends Notification 'intro_text' => trans('mail.a_user_requested'), 'qty' => $this->item_quantity, ]) - ->subject(trans('mail.Item_Requested')); + ->subject(trans('mail.Item_Requested')) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/SendUpcomingAuditNotification.php b/app/Notifications/SendUpcomingAuditNotification.php index a1005494f6..2f482b800d 100644 --- a/app/Notifications/SendUpcomingAuditNotification.php +++ b/app/Notifications/SendUpcomingAuditNotification.php @@ -7,7 +7,9 @@ use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class SendUpcomingAuditNotification extends Notification { use Queueable; @@ -45,7 +47,12 @@ class SendUpcomingAuditNotification extends Notification 'assets' => $this->assets, 'threshold' => $this->threshold, ]) - ->subject(trans_choice('mail.upcoming-audits', $this->assets->count(), ['count' => $this->assets->count(), 'threshold' => $this->threshold])); + ->subject(trans_choice('mail.upcoming-audits', $this->assets->count(), ['count' => $this->assets->count(), 'threshold' => $this->threshold])) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); return $message; } diff --git a/app/Notifications/WelcomeNotification.php b/app/Notifications/WelcomeNotification.php index 68d852e392..881c7dd4b6 100644 --- a/app/Notifications/WelcomeNotification.php +++ b/app/Notifications/WelcomeNotification.php @@ -7,7 +7,9 @@ use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Password; use App\Models\User; +use Symfony\Component\Mime\Email; +#[AllowDynamicProperties] class WelcomeNotification extends Notification { use Queueable; @@ -44,6 +46,11 @@ class WelcomeNotification extends Notification return (new MailMessage()) ->subject(trans('mail.welcome', ['name' => $this->user->first_name.' '.$this->user->last_name])) - ->markdown('notifications.Welcome', $this->user->toArray()); + ->markdown('notifications.Welcome', $this->user->toArray()) + ->withSymfonyMessage(function (Email $message) { + $message->getHeaders()->addTextHeader( + 'X-System-Sender', 'Snipe-IT' + ); + }); } } diff --git a/resources/lang/en-US/mail.php b/resources/lang/en-US/mail.php index 4f338bf8dd..dbdceca35a 100644 --- a/resources/lang/en-US/mail.php +++ b/resources/lang/en-US/mail.php @@ -34,8 +34,10 @@ return [ 'a_user_canceled' => 'A user has canceled an item request on the website', 'a_user_requested' => 'A user has requested an item on the website', 'acceptance_asset_accepted_to_user' => 'You have accepted an item assigned to you by :site_name|You have accepted :qty items assigned to you by :site_name', - 'acceptance_asset_accepted' => 'A user has accepted an item', - 'acceptance_asset_declined' => 'A user has declined an item', + 'acceptance_accepted' => 'ACCEPTED: :user has accepted :item', + 'acceptance_declined' => 'DECLINED: :user has declined :item', + 'acceptance_accepted_greeting' => ':user has accepted an item:', + 'acceptance_declined_greeting' => ':user has declined an item', 'send_pdf_copy' => 'Send a copy of this acceptance to my email address', 'accessory_name' => 'Accessory Name', 'additional_notes' => 'Additional Notes', diff --git a/resources/views/notifications/markdown/asset-acceptance.blade.php b/resources/views/notifications/markdown/asset-acceptance.blade.php index 1b010691a1..1e7001e255 100644 --- a/resources/views/notifications/markdown/asset-acceptance.blade.php +++ b/resources/views/notifications/markdown/asset-acceptance.blade.php @@ -7,7 +7,7 @@ | | | | ------------- | ------------- | @if (isset($item_name)) -| **{{ trans('general.asset_name') }}** | {{ $item_name }} | +| **{{ trans('general.item_name') }}** | {{ $item_name }} | @endif | **{{ trans('mail.user') }}** | {{ $assigned_to }} | @if (isset($user->location)) diff --git a/tests/Feature/CheckoutAcceptances/Ui/AccessoryAcceptanceTest.php b/tests/Feature/CheckoutAcceptances/Ui/AccessoryAcceptanceTest.php index 9e20b52475..7b3d8c49aa 100644 --- a/tests/Feature/CheckoutAcceptances/Ui/AccessoryAcceptanceTest.php +++ b/tests/Feature/CheckoutAcceptances/Ui/AccessoryAcceptanceTest.php @@ -7,8 +7,8 @@ use App\Models\AccessoryCheckout; use App\Models\Asset; use App\Models\CheckoutAcceptance; use App\Models\User; -use App\Notifications\AcceptanceAssetAcceptedNotification; -use App\Notifications\AcceptanceAssetDeclinedNotification; +use App\Notifications\AcceptanceItemAcceptedNotification; +use App\Notifications\AcceptanceItemDeclinedNotification; use Illuminate\Support\Facades\Notification; use Tests\TestCase; @@ -36,7 +36,7 @@ class AccessoryAcceptanceTest extends TestCase Notification::assertSentTo( $acceptance, - function (AcceptanceAssetAcceptedNotification $notification) use ($acceptance) { + function (AcceptanceItemAcceptedNotification $notification) use ($acceptance) { $this->assertStringContainsString( $acceptance->assignedTo->present()->fullName, $notification->toMail()->render() @@ -69,7 +69,7 @@ class AccessoryAcceptanceTest extends TestCase Notification::assertSentTo( $acceptance, - function (AcceptanceAssetDeclinedNotification $notification) use ($acceptance) { + function (AcceptanceItemDeclinedNotification $notification) use ($acceptance) { $this->assertStringContainsString( $acceptance->assignedTo->present()->fullName, $notification->toMail($acceptance)->render()