Jira Notification emails are badly formatted

Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

Intermittently email notifications are received with improper formatting

Body of email may look like the below:

(Auto-migrated image: description temporarily unavailable)

Diagnosis

Several Exceptions are logged when in atlassian-jira.log when the Outgoing Notifications are sent indicating "java.lang.RuntimeException: Couldn't load css! templates/email/css/aui-styles.css" as well as all-clients.css, wiki-renderer.css, jira-styles.css, and jira-status-lozenges.css when loading from Cache:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 WARN anonymous Mail Queue Service [c.a.jira.template.CachingJiraHomeTemplateContentLoaderImpl] Exception: com.atlassian.cache.CacheException: java.lang.RuntimeException: Couldn't load css! cssFile:templates/email/css/aui-styles.css at com.atlassian.cache.ehcache.DelegatingCache.get(DelegatingCache.java:133) at com.atlassian.jira.template.CachingJiraHomeTemplateContentLoaderImpl.getCssContent(CachingJiraHomeTemplateContentLoaderImpl.java:70) at com.atlassian.jira.mail.BotoCssInliner.createStyles(BotoCssInliner.java:93) at com.atlassian.jira.mail.BotoCssInliner.access$200(BotoCssInliner.java:31) at com.atlassian.jira.mail.BotoCssInliner$BotocssCreator.load(BotoCssInliner.java:125) at com.atlassian.jira.mail.BotoCssInliner$BotocssCreator.load(BotoCssInliner.java:122) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3528) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2277) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) at com.google.common.cache.LocalCache.get(LocalCache.java:3952) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964) at com.atlassian.jira.mail.BotoCssInliner.applyStyles(BotoCssInliner.java:79) at com.atlassian.jira.mail.builder.EmailRenderer.renderHtmlBody(EmailRenderer.java:143) at com.atlassian.jira.mail.builder.EmailRenderer.renderEmailBody(EmailRenderer.java:121) at com.atlassian.jira.mail.builder.EmailRenderer.render(EmailRenderer.java:170) at com.atlassian.jira.mail.builder.EmailBuilder.renderNow(EmailBuilder.java:155) at com.atlassian.jira.mail.builder.EmailBuilder.renderNowAsQueueItem(EmailBuilder.java:145) at com.atlassian.jira.mail.MailingListCompiler$1.evaluateEmailForRecipient(MailingListCompiler.java:345) at com.atlassian.jira.mail.NotificationRecipientProcessor.evaluateEmails(NotificationRecipientProcessor.java:39) at com.atlassian.jira.mail.MailingListCompiler.evaluateEmails(MailingListCompiler.java:276) at com.atlassian.jira.mail.MailingListCompiler.access$300(MailingListCompiler.java:52) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.lambda$addEmailsToQueue$0(MailingListCompiler.java:475) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1723) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.addEmailsToQueue(MailingListCompiler.java:477) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.sendLists(MailingListCompiler.java:447) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.evaluateForEvent(MailingListCompiler.java:404) at com.atlassian.jira.mail.MailingListCompiler.prepareEmail(MailingListCompiler.java:170) at com.atlassian.jira.mail.MailingListCompiler.sendLists(MailingListCompiler.java:106) at com.atlassian.jira.mail.IssueMailQueueItem.send(IssueMailQueueItem.java:128) at com.atlassian.mail.queue.MailQueueImpl.sendBufferUnderLock(MailQueueImpl.java:83) at com.atlassian.mail.queue.MailQueueImpl.sendBuffer(MailQueueImpl.java:47) at com.atlassian.jira.mail.JiraMailQueue.lambda$sendBuffer$0(JiraMailQueue.java:49) at com.atlassian.jira.util.velocity.DefaultVelocityRequestContextFactory.runWithStaticBaseUrl(DefaultVelocityRequestContextFactory.java:110) at com.atlassian.jira.util.DefaultBaseUrl.runWithStaticBaseUrl(DefaultBaseUrl.java:56) at com.atlassian.jira.mail.JiraMailQueue.sendBuffer(JiraMailQueue.java:48) at com.atlassian.jira.service.services.mail.MailQueueService.run(MailQueueService.java:21) at com.atlassian.jira.service.JiraServiceContainerImpl.run(JiraServiceContainerImpl.java:68) at com.atlassian.jira.service.ServiceRunner.runService(ServiceRunner.java:62) at com.atlassian.jira.service.ServiceRunner.runServiceId(ServiceRunner.java:44) at com.atlassian.jira.service.ServiceRunner.runJob(ServiceRunner.java:32) at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:134) at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:106) at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:90) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:435) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeLocalJob(CaesiumSchedulerService.java:402) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:380) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:66) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:60) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:35) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.RuntimeException: Couldn't load css! cssFile:templates/email/css/aui-styles.css at com.atlassian.jira.template.CachingJiraHomeTemplateContentLoaderImpl.lambda$null$2(CachingJiraHomeTemplateContentLoaderImpl.java:72) at java.util.Optional.orElseThrow(Optional.java:290) at com.atlassian.jira.template.CachingJiraHomeTemplateContentLoaderImpl.lambda$getCssContent$3(CachingJiraHomeTemplateContentLoaderImpl.java:72) at com.atlassian.cache.ehcache.ReferenceCacheLoader.load(ReferenceCacheLoader.java:31) at com.atlassian.cache.ehcache.wrapper.ValueProcessorEhcacheLoaderDecorator.load(ValueProcessorEhcacheLoaderDecorator.java:30) at net.sf.ehcache.Cache.getWithLoader(Cache.java:1859) at com.atlassian.cache.ehcache.DelegatingCache.get(DelegatingCache.java:128) ... 58 more

Solution

If email templates have not been modified we can Revert to the Default templates, which should clear the template cache and thus the missing .CSS files would be cached again:

Reverting templates to default

If something isn't right with your modified templates, you can bring the default ones by clicking Revert to default. Here's what happens when you do it:

  1. Jira copies the default templates from its resources to the Jira shared home directory.

  2. The default templates overwrite any existing templates in <Jira-shared-home>/data/templates.

  3. After a successful revert, we clear the template cache, so the default templates are applied right away.

This should result in all of the Notification emails being formatted correctly

Updated on April 8, 2025

Still need help?

The Atlassian Community is here for you.