Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-43997

IssueMail can't include system avatar images, they are not present

      NOTE: This bug report is for JIRA Server. Using JIRA Cloud? See the corresponding bug report.

      Summary

      System avatar icons used for custom issue types causes the following symptoms when a notification is sent:

      • Users will see broken image in email.
      • Administrator will see error in logs.
        System Avatar not found at the following resource path: /avatars/medium_genericissue.png
        

        See below for full stack-trace.

      Steps to Reproduce

      1. Enable email notification
      2. Create custom issue type 'tst', use any of system avatars.
      3. Create issue with custom issue type 'tst'
      4. Wait for notification to be sent
      5. Check logs and notification email

      Expected Results

      No errors in logs when email is sent. User receives email without broken image.

      Actual Results

      The below exception is thrown in the atlassian-jira.log file for every notification sent:

      2015-06-24 19:03:53,107 Sending mailitem com.atlassian.jira.mail.IssueMailQueueItem@1962e1e5[issue=com.atlassian.jira.issue.IssueImpl@569a4e86[id=10300,summary=test zip,key=PRG-3,created=2015-06-24 13:59:
      13.015,updated=2015-06-24 18:24:37.939,assignee=test:1,reporter=admin:1],remoteUser=admin:1,notificationType=Current_Assignee,eventTypeId=6,templateId=6] ERROR admin 1143x924x1 1so34qn 127.0.0.1 /secure/a
      dmin/MailQueueAdmin.jspa [atlassian.jira.avatar.AvatarManagerImpl] System Avatar not found at the following resource path: /avatars/medium_genericissue.png
      2015-06-24 19:03:53,108 Sending mailitem com.atlassian.jira.mail.IssueMailQueueItem@1962e1e5[issue=com.atlassian.jira.issue.IssueImpl@569a4e86[id=10300,summary=test zip,key=PRG-3,created=2015-06-24 13:59:
      13.015,updated=2015-06-24 18:24:37.939,assignee=test:1,reporter=admin:1],remoteUser=admin:1,notificationType=Current_Assignee,eventTypeId=6,templateId=6] WARN admin 1143x924x1 1so34qn 127.0.0.1 /secure/ad
      min/MailQueueAdmin.jspa [jira.mail.util.MailAttachmentsManagerImpl] Cannot add avatar as Mail attachment for 'issue type: tst'
      java.io.IOException: File not found
              at com.atlassian.jira.avatar.AvatarManagerImpl.processAvatarData(AvatarManagerImpl.java:379)
              at com.atlassian.jira.avatar.AvatarManagerImpl.readAvatarData(AvatarManagerImpl.java:492)
              at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$AvatarAttachment.buildBodyPart(MailAttachmentsManagerImpl.java:370)
              at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$1.apply(MailAttachmentsManagerImpl.java:205)
              at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$1.apply(MailAttachmentsManagerImpl.java:201)
              at com.google.common.collect.Iterators$8.next(Iterators.java:812)
              at com.google.common.collect.Iterators$7.computeNext(Iterators.java:648)
              at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
              at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
              at com.google.common.collect.Iterators$5.hasNext(Iterators.java:543)
              at com.atlassian.jira.mail.builder.EmailRenderer.buildMailWithAttachments(EmailRenderer.java:151)
              at com.atlassian.jira.mail.builder.EmailRenderer.renderEmailBody(EmailRenderer.java:123)
              at com.atlassian.jira.mail.builder.EmailRenderer.render(EmailRenderer.java:166)
              at com.atlassian.jira.mail.builder.EmailBuilder.renderNow(EmailBuilder.java:162)
              at com.atlassian.jira.mail.builder.EmailBuilder.renderNowAsQueueItem(EmailBuilder.java:152)
              at com.atlassian.jira.mail.MailingListCompiler$1.processRecipient(MailingListCompiler.java:307)
              at com.atlassian.jira.mail.NotificationRecipientProcessor.process(NotificationRecipientProcessor.java:39)
              at com.atlassian.jira.mail.MailingListCompiler.addMailsToQueue(MailingListCompiler.java:332)
              at com.atlassian.jira.mail.MailingListCompiler.access$200(MailingListCompiler.java:47)
              at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.addEmailsToQueue(MailingListCompiler.java:455)
              at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.sendLists(MailingListCompiler.java:425)
              at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.sendForEvent(MailingListCompiler.java:378)
              at com.atlassian.jira.mail.MailingListCompiler.sendLists(MailingListCompiler.java:140)
              at com.atlassian.jira.mail.IssueMailQueueItem.send(IssueMailQueueItem.java:150)
              at com.atlassian.mail.queue.MailQueueImpl.sendBuffer(MailQueueImpl.java:66)
              at com.atlassian.jira.mail.JiraMailQueue$1.apply(JiraMailQueue.java:57)
              at com.atlassian.jira.mail.JiraMailQueue$1.apply(JiraMailQueue.java:53)
              at com.atlassian.jira.util.velocity.DefaultVelocityRequestContextFactory.runWithStaticBaseUrl(DefaultVelocityRequestContextFactory.java:127)
              at com.atlassian.jira.util.DefaultBaseUrl.runWithStaticBaseUrl(DefaultBaseUrl.java:58)
              at com.atlassian.jira.mail.JiraMailQueue.sendBuffer(JiraMailQueue.java:52)
              at com.atlassian.jira.web.action.admin.MailQueueAdmin.doExecute(MailQueueAdmin.java:51)  <+1> (ActionSupport.java:165)
              at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:88)  <+7> (DefaultInterceptorChain.java:39) (NestedInterceptorChain.java:31) (ChainedInterceptor.java:16) (DefaultInte
      rceptorChain.java:35) (GenericDispatcher.java:225) (GenericDispatcher.java:154) (JiraWebworkActionDispatcher.java:152)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)  <+2> (ApplicationFilterChain.java:303) (ApplicationFilterChain.java:208)
              at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  <+14> (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationF
      ilterChain.java:241) (ApplicationFilterChain.java:208) (XContentTypeOptionsNoSniffFilter.java:22) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (HeaderSa
      nitisingFilter.java:44) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
              at com.atlassian.jira.onboarding.postsetup.ui.PostSetupAnnouncementsFilter.doFilter(PostSetupAnnouncementsFilter.java:61)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (Del
      egatingPluginFilter.java:70)
              at com.atlassian.jira.tzdetect.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:40)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.jira.baseurl.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:38)  <+8> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (ContextFilter.java:25) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:36)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36)  <+26> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AccessLogFilter.java:107) (AccessLogFilter.java:91) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SiteMeshFilter.java:181) (SiteMeshFilter.java:85) (SitemeshPageFilter.java:124) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (PageBuilderFilter.java:90) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (CommittedResponseHtmlErrorRecoveryFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+22> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SecurityFilter.java:239) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (BaseLoginFilter.java:172) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) (OAuthFilter.java:79) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+13> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ProfilingFilter.java:99) (JIRAProfilingFilter.java:19) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208)
              at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
              at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
              at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)  <+5> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
              at com.atlassian.analytics.client.filter.JiraAnalyticsFilter.doFilter(JiraAnalyticsFilter.java:40)
              at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
              at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+45> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:49) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (JiraStartupChecklistFilter.java:79) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:61) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (GzipFilter.java:115) (GzipFilter.java:92) (JiraGzipFilter.java:56) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (StandardWrapperValve.java:220) (StandardContextValve.java:122) (AuthenticatorBase.java:501) (StandardHostValve.java:171) (ErrorReportValve.java:103) (StandardEngineValve.java:116) (AccessLogValve.java:950) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1070) (AbstractProtocol.java:611) (JIoEndpoint.java:316)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
              at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
              at java.lang.Thread.run(Thread.java:745)
      

      Notes

      these system avatars have only one size: xsmall

      ls -1 atlassian-jira-6.4.6-standalone/atlassian-jira/WEB-INF/classes/avatars/ | awk -F '_' '{if (length($3) > 0 ){print $2"_"$3} else {print $2} }' | sort | uniq -c | grep 1
      
         3 Avatar-1.png
         3 Avatar-10.png
         3 Avatar-11.png
         3 Avatar-12.png
         3 Avatar-13.png
         3 Avatar-14.png
         3 Avatar-15.png
         3 Avatar-16.png
         3 Avatar-17.png
         3 Avatar-18.png
         3 Avatar-19.png
         3 Avatar-21.png
         1 all_unassigned.png
         1 black.png
         1 blank.png
         1 brown.png
         1 bug.png
         1 confluence.png
         1 defect.png
         1 delete.png
         1 documentation.png
         1 epic.png
         1 exclamation.png
         1 genericissue.png
         1 health.png
         1 improvement.png
         1 newfeature.png
         1 orange.png
         1 red.png
         1 remove_feature.png
         1 requirement.png
         1 sales.png
         1 story.png
         1 subtask.png
         1 subtask_alternate.png
         1 task.png
         1 task_agile.png
         1 undefined.png
         1 white.png
         1 yellow.png
      

      Workaround #1

      Upload your own avatar and assign it to custom issue type. You can also re-upload same avatar from standard issue type if you want to have the same icon.

      Workaround #2

      According to this comment, issue can be resolved by copying the xsmall files to medium ones. Thanks agslab!

      If you are on Linux, you can simply run the below script we've put together on the <JIRA_INSTALL>/atlassian-jira/WEB-INF/classes/avatars directory (make sure you have read/write permission on the folder).
      rename.sh

            [JRASERVER-43997] IssueMail can't include system avatar images, they are not present

            Hi xiaopeng.lin,

            No, this exception does not cause the system to go down. Please file a support request with us at https://support.atlassian.com if you need help with your instance.

            Regards,

            Oswaldo Hernández.
            JIRA Bugmaster.
            [Atlassian].

            Oswaldo Hernandez (Inactive) added a comment - Hi xiaopeng.lin , No, this exception does not cause the system to go down. Please file a support request with us at https://support.atlassian.com if you need help with your instance. Regards, Oswaldo Hernández. JIRA Bugmaster. [Atlassian] .

            This exception will cause the system down?

            My production machine down yesterday, I was in the view of the log only found the exception, so is this exception caused the system down?

            Regards,
            Xiaopeng

            Xiaopeng Lin added a comment - This exception will cause the system down? My production machine down yesterday, I was in the view of the log only found the exception, so is this exception caused the system down? Regards, Xiaopeng

            This is fixed in the JIRA 7.0.0 Server version dieter

            Regards,

            Oswaldo Hernández.
            JIRA Bugmaster.
            [Atlassian].

            Oswaldo Hernandez (Inactive) added a comment - This is fixed in the JIRA 7.0.0 Server version dieter Regards, Oswaldo Hernández. JIRA Bugmaster. [Atlassian] .

            Can we have a fix for the server version of JIRA?

            Dieter Greiner added a comment - Can we have a fix for the server version of JIRA?

            Please note that the attached script will overwrite some existing medium files with xsmall version.

            Change the cp command in the script to cp -i to prevent overwriting.

            David Nichols added a comment - Please note that the attached script will overwrite some existing medium files with xsmall version. Change the cp command in the script to cp -i to prevent overwriting.

            mjparme, thanks for pointing out, fixed.

            Andriy Yakovlev [Atlassian] added a comment - mjparme , thanks for pointing out, fixed.

            Michael added a comment -

            The path listed in workaround #2 is incorrect, it is missing WEB-INF, should be:

            <JIRA_INSTALL>/atlassian-jira/WEB-INF/classes/avatars

            Michael added a comment - The path listed in workaround #2 is incorrect, it is missing WEB-INF, should be: <JIRA_INSTALL>/atlassian-jira/WEB-INF/classes/avatars

            agsqwe NA added a comment -

            We encountered this as well after upgrade. Fixed by doing:

            cd atlassian-jira/WEB-INF/classes/avatars
            cp xsmall_all_unassigned.png medium_all_unassigned.png
            cp xsmall_black.png medium_black.png
            cp xsmall_blank.png medium_blank.png
            cp xsmall_brown.png medium_brown.png
            cp xsmall_bug.png medium_bug.png
            cp xsmall_confluence.png medium_confluence.png
            cp xsmall_defect.png medium_defect.png
            cp xsmall_delete.png medium_delete.png
            cp xsmall_documentation.png medium_documentation.png
            cp xsmall_epic.png medium_epic.png
            cp xsmall_exclamation.png medium_exclamation.png
            cp xsmall_genericissue.png medium_genericissue.png
            cp xsmall_health.png medium_health.png
            cp xsmall_improvement.png medium_improvement.png
            cp xsmall_newfeature.png medium_newfeature.png
            cp xsmall_orange.png medium_orange.png
            cp xsmall_red.png medium_red.png
            cp xsmall_remove_feature.png medium_remove_feature.png
            cp xsmall_requirement.png medium_requirement.png
            cp xsmall_sales.png medium_sales.png
            cp xsmall_story.png medium_story.png
            cp xsmall_subtask.png medium_subtask.png
            cp xsmall_subtask_alternate.png medium_subtask_alternate.png
            cp xsmall_task.png medium_task.png
            cp xsmall_task_agile.png medium_task_agile.png
            cp xsmall_undefined.png medium_undefined.png
            cp xsmall_white.png medium_white.png
            cp xsmall_yellow.png medium_yellow.png

            agsqwe NA added a comment - We encountered this as well after upgrade. Fixed by doing: cd atlassian-jira/WEB-INF/classes/avatars cp xsmall_all_unassigned.png medium_all_unassigned.png cp xsmall_black.png medium_black.png cp xsmall_blank.png medium_blank.png cp xsmall_brown.png medium_brown.png cp xsmall_bug.png medium_bug.png cp xsmall_confluence.png medium_confluence.png cp xsmall_defect.png medium_defect.png cp xsmall_delete.png medium_delete.png cp xsmall_documentation.png medium_documentation.png cp xsmall_epic.png medium_epic.png cp xsmall_exclamation.png medium_exclamation.png cp xsmall_genericissue.png medium_genericissue.png cp xsmall_health.png medium_health.png cp xsmall_improvement.png medium_improvement.png cp xsmall_newfeature.png medium_newfeature.png cp xsmall_orange.png medium_orange.png cp xsmall_red.png medium_red.png cp xsmall_remove_feature.png medium_remove_feature.png cp xsmall_requirement.png medium_requirement.png cp xsmall_sales.png medium_sales.png cp xsmall_story.png medium_story.png cp xsmall_subtask.png medium_subtask.png cp xsmall_subtask_alternate.png medium_subtask_alternate.png cp xsmall_task.png medium_task.png cp xsmall_task_agile.png medium_task_agile.png cp xsmall_undefined.png medium_undefined.png cp xsmall_white.png medium_white.png cp xsmall_yellow.png medium_yellow.png

            In 7.0.0-OD-02 should be a new icon set, which should be complete.

            Andriy Yakovlev [Atlassian] added a comment - In 7.0.0-OD-02 should be a new icon set, which should be complete.

              Unassigned Unassigned
              ayakovlev@atlassian.com Andriy Yakovlev [Atlassian]
              Affected customers:
              8 This affects my team
              Watchers:
              37 Start watching this issue

                Created:
                Updated:
                Resolved: