johnnyq
4c65b8c561
Clear mail bodies after successful delivery
2026-07-28 00:18:07 -04:00
johnnyq
97490bef3b
Security Fix in recurring invoices in cron
2026-07-27 18:07:15 -04:00
johnnyq
a844d7b428
Adds a shared flock guard used by all five cron entry points, keyed per
...
script and per install. Replaces the mail queue's own lock file, which
was not atomic and could be deleted out from under a long run. Bounds
the SMTP conversation so an unresponsive server cannot hold the lock.
Recovers rows left at Sending by a run that died, which nothing
previously picked up.
2026-07-27 17:35:39 -04:00
johnnyq
686fca99e1
Fix Possible duplicate emails in a race condition in mail queue
2026-07-27 16:59:10 -04:00
johnnyq
409d769eb7
Scope the cron lock per install so instances don't block each other
...
Report an unopenable cron lock file instead of claiming cron is running
2026-07-27 16:41:21 -04:00
johnnyq
65de8c35e6
Prevent duplicate Stripe payment bookings and overlapping cron runs
2026-07-27 15:22:16 -04:00
johnnyq
8f43b92496
Use stripe_init include to init stripe and updated code everywhere
2026-07-23 13:00:01 -04:00
johnnyq
8ee780566e
Cleanup Expense Code in post blocks and remove single use function since stripe payments get reconciled during nightly cron
2026-07-22 17:06:10 -04:00
johnnyq
08334b22c3
Add Stripe fee reconciliation to cron
...
Balance transactions aren't always attached when a payment completes,
so the fee expense can be skipped at payment time. Daily cron pass now
finds recent Stripe payments with no matching fee expense and records
the actual fee once available. Dedupes by expense reference prefix,
30-day lookback.
2026-07-22 16:47:28 -04:00
johnnyq
66b38b7f19
Get Expense from Stripe instead of Static Entry
2026-07-22 16:07:39 -04:00
johnnyq
21a23e79b0
Replace Function getSSL() with getSslCertificate()
2026-07-14 17:54:31 -04:00
johnnyq
52b5063066
Replace Function getDomainRecords() with getDnsRecords()
2026-07-14 17:53:16 -04:00
johnnyq
9d540f4bfe
Replace Function customAction() with triggerCustomAction()
2026-07-14 17:43:55 -04:00
johnnyq
f1836c70cd
Replace Function logAction() with logAudit()
2026-07-14 17:35:23 -04:00
johnnyq
29a0b3ead8
Replace Function fetchUpdates() with checkForUpdates()
2026-07-14 17:31:54 -04:00
johnnyq
b57ddc0e5c
Replace Function sanitizeInput() with just escapeSql() and update all instances throughout
2026-07-14 17:17:50 -04:00
johnnyq
8da3a107fb
Rename plugins to libs and update all file references
2026-07-10 13:24:20 -04:00
johnnyq
ae5c9fe8ec
Mail Parser: Add logic when creating ITFlow folder to determine if the namespace is INBOX. or can be created in root directory. Fixes issue with CPanel Dovecot Maildir++ configuration where their namespace is just INBOX
2026-07-08 15:58:00 -04:00
johnnyq
171a0d38f8
Mail Parser: Completely remove Webklex IMAP and all dependcies
2026-06-24 13:39:07 -04:00
johnnyq
6e7d2b2d6a
Invoice Late Overdue notices shows correct balance when late fees are attached and if partial invoice was paid
2026-06-24 13:07:52 -04:00
johnnyq
a819dff19a
Mail: Update mail configuration check to use smtp_provider instead of smtp_host as host is blank upon using oath2
2026-06-24 12:47:41 -04:00
johnnyq
b1a5b34725
Do not send an inapp alert on successful cron execution, keep it in logging only
2026-06-23 18:22:20 -04:00
johnnyq
2204bd52f4
Rewrite email parser using ImapEngine, harden processing loop
...
Replace webklex/php-imap with directorytree/imapengine in the ticket
email parser. ImapEngine is pure PHP over sockets.
Parser improvements:
- Wrap per-message processing in try/catch so one malformed email
can't abort the run; failures are flagged and logged with UID
- Query unseen + unflagged so previously-failed (flagged) messages
are no longer re-processed on every cron run
- Skip vacation/auto-responder emails (RFC 3834) to prevent mail
loops with the ticket auto-reply
- Cap messages per run (50) and attachment size (15MB); inline
images over 2MB are stored as attachments instead of base64-embedded
in ticket details
- Atomic lock file creation
- preg_quote() the ticket prefix in subject matching
- Dedupe CC watchers and exclude the sender
- Map webklex 'tls' encryption setting to STARTTLS for compatibility
NDR/DSN parsing now walks MIME parts via the underlying
zbateson parser instead of relying on attachment extraction.
2026-06-12 16:56:39 -04:00
wrongecho
163581cbcd
Expire all PW reset tokens nightly with cron
2026-04-27 13:36:39 +01:00
johnnyq
e9c3ee4661
Shared Items via secure link: Do not delete shared items that have not been viewed before cron runs
2026-04-24 11:40:38 -04:00
johnnyq
6d1b654d0c
Invoice: Do not apply late fee on first overdue reminder (day 1)
2026-03-20 17:44:33 -04:00
johnnyq
6122efc870
Updated all Queries related to invoice items to reflect their new tables quote, invoice, recurring invoice items
2026-03-07 19:35:44 -05:00
johnnyq
92fba49a91
Revert "Add new optional beta email parser thats based on ImapEngine instead of Webklex"
...
This reverts commit 9cb1ff7330 .
2026-02-26 16:44:49 -05:00
johnnyq
ac4bb32081
Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean"
...
This reverts commit 87fd23f443 .
2026-02-26 16:44:39 -05:00
johnnyq
7927312f4f
Revert "Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean""
...
This reverts commit 04a74b5a34 .
2026-02-26 16:41:50 -05:00
johnnyq
04a74b5a34
Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean"
...
This reverts commit 87fd23f443 .
2026-02-26 16:41:03 -05:00
johnnyq
87fd23f443
Beta Mail Parser Add inline images as attachments keeps the DB clean
2026-02-26 16:30:29 -05:00
johnnyq
9cb1ff7330
Add new optional beta email parser thats based on ImapEngine instead of Webklex
2026-02-26 16:11:49 -05:00
wrongecho
1ba19cc249
New Ticket Parsing - Anyone CC'ed onto the original email that created the ticket is added as a ticket watcher
2026-02-26 12:49:32 +00:00
johnnyq
ef7794c411
Added non payment invoice reminder / Late fee if enabled after 1 day an invoice is overdue. currently it was jumping right to 30,60,90... now its 1,30,90...
2026-02-19 12:20:26 -05:00
johnnyq
2ca8112daf
Revert Git change test to ticket_email_parser.php
2026-02-06 15:14:37 -05:00
johnnyq
546f10bc82
Testing Git changes on ticket_email_parser.php
2026-02-06 15:13:54 -05:00
cs2000
fc33312e79
SonarCube Suggestion
...
Rename multiple functions to conform to project naming rules (^[a-z][a-zA-Z0-9]*$). This is a non-functional refactor for style/CI compliance and consistency.
2026-02-05 10:15:52 +00:00
cs2000
10d1a902d9
Changes for M365 oAuth now using latest dev code
...
My bad, my changes were made previously using my installed version and not the latest changes in the dev branch, i have pulled the dev branch and merged my changes with the latest codebase.
2026-02-05 09:37:22 +00:00
cs2000
2cca4f2f0e
Changes for M365 oAuth
...
- Added null-safe guard around folder path logging during message move failure to prevent property_exists() fatal when folder object is null.
2026-02-04 13:26:52 +00:00
cs2000
f3f9d0dd71
Changes for M365 oAuth
...
- Added OAuth token lifecycle helpers (expiry check, refresh, persistence).
- Updated SMTP XOAUTH2 send path to automatically refresh expired/missing access tokens for Microsoft/Google providers before sending queued mail.
2026-02-04 13:25:32 +00:00
wrongecho
07df657848
Bugfix: newline char showing in parsed emails
2026-01-27 17:25:53 +00:00
johnnyq
bd8bf026f0
Allow svg email attachemment for mail parser
2026-01-23 11:24:26 -05:00
johnnyq
e0f7460e08
If not client_id then do not include &client_id= in ticket uris as this would cause ticket viewing to break if client_id is 0.
2026-01-19 17:01:38 -05:00
johnnyq
ae1d71dcd7
append client_id to the uri for agent ticket links so that the when clicked will take them to the client section and show client header along with the bread crumbs link of client tickets
2026-01-19 16:24:31 -05:00
wrongecho
e7f6f8a4c7
Mail Parser - NDR Parsing
2026-01-15 17:35:13 +00:00
wrongecho
a398ac7a8d
Mail Parser - Support flowed text
2026-01-15 11:54:37 +00:00
wrongecho
7e7909cec1
Mail Parser - Do not automatically send new ticket notifications to noreply/donotreply addresses
2026-01-15 10:38:25 +00:00
johnnyq
0a30300bde
replace all instances of mysqli_fetch_array with mysqli_fetch_assoc for better performance and memory usage
2026-01-14 17:30:23 -05:00
johnnyq
a79ce23ae5
Fix randomString() to generate cryptographically secure URL-safe tokens, reduced url keys to 32 Characters for performance and easy copy and paste and compatibility while still mainitaining ubreakable cryptographic keys
2025-12-18 14:24:53 -05:00