<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Tue, 06 Oct 2026 19:40:29 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 31 Aug 2026 18:32:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37486 – mail: fix prod outage -- MailOutboxService must not implement MailQueue ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: fix prod outage -- MailOutboxService must not implement MailQueue&lt;br /&gt;
&lt;br /&gt;
r37478 added &apos;implements MailQueue&apos; to MailOutboxService. That took down both&lt;br /&gt;
ROOT.war and profitmandi-web.war on the 18:19 deploy today; every route 404&apos;d&lt;br /&gt;
because neither Spring context would start.&lt;br /&gt;
&lt;br /&gt;
MailOutboxService has @Transactional methods, so Spring has to proxy it, and&lt;br /&gt;
@EnableTransactionManagement in both WebDBContextConfigure classes runs with the&lt;br /&gt;
default proxyTargetClass=false. While the class implemented no interface Spring&lt;br /&gt;
proxied it with a CGLIB subclass, which is still a MailOutboxService. Adding an&lt;br /&gt;
interface switched it to a JDK proxy implementing only MailQueue, so all 39&lt;br /&gt;
sites that inject the concrete MailOutboxService failed:&lt;br /&gt;
&lt;br /&gt;
  BeanNotOfRequiredTypeException: Bean named &apos;mailOutboxService&apos; is expected to&lt;br /&gt;
  be of type MailOutboxService but was actually of type com.sun.proxy.$Proxy1519&lt;br /&gt;
&lt;br /&gt;
The interface moves to a new MailQueueAdapter, which delegates to&lt;br /&gt;
MailOutboxService and carries no transactional annotations. MailQueueHolder and&lt;br /&gt;
EmailServiceImpl inject it by the MailQueue interface, so Utils.sendMail* and&lt;br /&gt;
EmailService still reach the outbox unchanged. MailOutboxService goes back to&lt;br /&gt;
implementing nothing, and its ~112 existing call sites are untouched.&lt;br /&gt;
&lt;br /&gt;
Chose this over proxyTargetClass=true, which would have flipped proxying for&lt;br /&gt;
every interface-implementing service in the app -- too broad for a hot fix.&lt;br /&gt;
&lt;br /&gt;
Verified with javap inside both built WARs: MailOutboxService declares no&lt;br /&gt;
interfaces, MailQueueAdapter implements MailQueue.&lt;br /&gt;
&lt;br /&gt;
Note for cron: it shares the dao jar, so a rebuild picks this up. Do not restart&lt;br /&gt;
cron on trunk without rebuilding it first.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailQueueAdapter.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37486</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37486</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:11:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37483 – mail: migrate mail_outbox SENDGRID rows to RELAY (applied to production) ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: migrate mail_outbox SENDGRID rows to RELAY (applied to production)&lt;br /&gt;
&lt;br /&gt;
SENDGRID never meant SendGrid -- resolveSender() already routed it to the&lt;br /&gt;
Workspace relay, which is why outbox mail kept being delivered while direct&lt;br /&gt;
JavaMailSender injections failed against the real, dead SendGrid bean. So this&lt;br /&gt;
relabels rows without changing where anything is sent.&lt;br /&gt;
&lt;br /&gt;
Applied to hadb1 2026-08-31 18:10 IST:&lt;br /&gt;
  before  SENDGRID=5956  RELAY=0     GOOGLE=4896  (total 10852)&lt;br /&gt;
  after   SENDGRID=0     RELAY=5956  GOOGLE=4896  (total 10852)&lt;br /&gt;
  backup  dtr.mail_outbox_sendgrid_backup_20260831_1810 (5956 rows)&lt;br /&gt;
&lt;br /&gt;
The one PENDING row (id=26838) migrated cleanly and still routes to the relay.&lt;br /&gt;
Only GOOGLE and RELAY remain in the column. Rollback statement is in the script.&lt;br /&gt;
&lt;br /&gt;
The comment claiming legacy SENDGRID rows exist is now false and has been&lt;br /&gt;
corrected; SendGrid appears nowhere in the codebase.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/migration_mail_outbox_sendgrid_to_relay.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37483</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37483</guid></item>
<item><pubDate>Mon, 31 Aug 2026 17:38:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37478 – mail: MailOutboxService implements MailQueue  Adds the single entry point, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: MailOutboxService implements MailQueue&lt;br /&gt;
&lt;br /&gt;
Adds the single entry point, queue(MailRequest). The twenty-odd queueMail*&lt;br /&gt;
overloads remain as delegates because ~112 call sites use them, but they now&lt;br /&gt;
funnel through one path rather than each building their own argument list.&lt;br /&gt;
&lt;br /&gt;
Selecting the transport moves here too: MailSenderType.GOOGLE maps to the&lt;br /&gt;
authenticated sender, anything else to the relay.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37478</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37478</guid></item>
<item><pubDate>Mon, 31 Aug 2026 17:11:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37473 – mail: retire the SENDGRID sender label  SendGrid was never ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: retire the SENDGRID sender label&lt;br /&gt;
&lt;br /&gt;
SendGrid was never actually used by the outbox -- resolveSender() already fell&lt;br /&gt;
through to the Workspace relay for it, which is why outbox mail kept working&lt;br /&gt;
while direct JavaMailSender injections failed.&lt;br /&gt;
&lt;br /&gt;
Two senders remain, each named for what it is:&lt;br /&gt;
  GOOGLE - authenticates as &lt;a href=&quot;mailto:sdtech@smartdukaan.com&quot;&gt;sdtech@smartdukaan.com&lt;/a&gt;; AuthenticatedIdentityMailSender&lt;br /&gt;
           rewrites every From to that identity, because Workspace binds an&lt;br /&gt;
           authenticated session to one address and rejects any other with&lt;br /&gt;
           &apos;535 Authorization failed: Authenticated user is not authorized to send mail&apos;&lt;br /&gt;
  RELAY  - Workspace relay, no auth, authorised by source IP, may send as noreply@&lt;br /&gt;
&lt;br /&gt;
Default convenience methods now route to RELAY explicitly rather than through a&lt;br /&gt;
label that named a provider we do not use.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37473</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37473</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:32:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37361 – Mail outbox: one transaction per mail, retry once more, stable ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Mail outbox: one transaction per mail, retry once more, stable Message-ID&lt;br /&gt;
&lt;br /&gt;
processPendingMails ran the whole batch in a single REQUIRES_NEW transaction, so a&lt;br /&gt;
crash mid-batch rolled back the status of every mail already delivered in that cycle&lt;br /&gt;
and the next run re-sent them.&lt;br /&gt;
&lt;br /&gt;
- Split into selectPendingIds (read-only) plus sendOne per mail, each REQUIRES_NEW via&lt;br /&gt;
  a @Lazy self-reference so the proxy actually applies. Outcome is committed as soon&lt;br /&gt;
  as it is known; a crash now loses at most the mail in flight.&lt;br /&gt;
- MailOutbox.selectPending retries FAILED rows once more (retryCount &amp;lt; 2).&lt;br /&gt;
- Stable per-row Message-ID so a retry arrives as the same message and the receiving&lt;br /&gt;
  server can collapse it instead of showing a duplicate.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail/MailOutbox.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37361</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=37361</guid></item>
<item><pubDate>Mon, 27 Apr 2026 14:52:32 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36399 – Replace mailSender (SendGrid) with gmailRelaySender - SendGrid API key expired/revoked</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Replace mailSender (SendGrid) with gmailRelaySender - SendGrid API key expired/revoked&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/cs/CsServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/BidServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/LocationTrackingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/OtpProcessor.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/TrialServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AuthServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/CustomerServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/EmailService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/BulkOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/PerformanceServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/CreditNoteServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/invoicing/InvoiceService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/scheduled/SDCreditScheduler.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/SDCreditServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/UserServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36399</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36399</guid></item>
<item><pubDate>Sun, 12 Apr 2026 07:42:57 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36250 – Sender-type-aware mail cleanup: 6 months for SendGrid/Relay, 1 month for ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Sender-type-aware mail cleanup: 6 months for SendGrid/Relay, 1 month for Google SMTP&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail/MailOutbox.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36250</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36250</guid></item>
<item><pubDate>Sun, 12 Apr 2026 07:36:39 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36249 – Route all SendGrid mail through Google Workspace Relay</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route all SendGrid mail through Google Workspace Relay&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36249</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36249</guid></item>
<item><pubDate>Sun, 12 Apr 2026 07:33:37 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36245 – Add Google Workspace SMTP Relay as third mail sender (RELAY) ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add Google Workspace SMTP Relay as third mail sender (RELAY) alongside SendGrid and Google&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36245</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36245</guid></item>
<item><pubDate>Thu, 26 Mar 2026 12:54:35 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36067 – Fix:Duplicate Mail Sending issue and bug fixing</title><description>&lt;div&gt;&lt;strong&gt;aman – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Duplicate Mail Sending issue and bug fixing&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36067</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36067</guid></item>
<item><pubDate>Wed, 25 Mar 2026 18:51:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36059 – Fix mail outbox: load by ID instead of selectPending filter ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix mail outbox: load by ID instead of selectPending filter to prevent cascade failure&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36059</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=36059</guid></item>
<item><pubDate>Sat, 07 Mar 2026 13:04:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35960 – MailOutboxService: dev recipient guard (no mail to real users in ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;MailOutboxService: dev recipient guard (no mail to real users in non-prod), fix self-invocation for @Async/@Transactional via @Lazy self-proxy&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=35960</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=35960</guid></item>
<item><pubDate>Sat, 07 Mar 2026 12:50:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35956 – Mail outbox pattern: persist mail in transaction, send async after ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Mail outbox pattern: persist mail in transaction, send async after commit. Fixes lock contention between /cancelOrder and /om/addBillingDetailsForGrouppedOrders caused by SMTP calls inside transactions holding DB locks.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/config/AsyncConfig.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail/MailOutbox.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail/MailOutboxAttachment.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/mail/MailOutboxRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/biuedart/BluedartServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/dtdc/DTDCServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/PurSaleServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AuthServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciLombardService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/BulkOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/CreditNoteServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/scheduled/SDCreditScheduler.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/RetailerServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/UserServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/mail_outbox.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=35956</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fmail%2FMailOutboxService.java&amp;rev=35956</guid></item>
</channel></rss>