[logback-dev] [JIRA] Resolved: (LBCORE-69) SMTPAppenderBase: Allow to select charset encoding for email's subject and body

Ceki Gulcu (JIRA) noreply-jira at qos.ch
Mon Dec 29 15:11:38 CET 2008


     [ http://jira.qos.ch/browse/LBCORE-69?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ceki Gulcu resolved LBCORE-69.
------------------------------

    Fix Version/s: 0.9.14
       Resolution: Fixed

Hello Andrey,

Thank you for this report.  Your patch has been applied almost as is in revision 2110.


> SMTPAppenderBase: Allow to select charset encoding for email's subject and body
> -------------------------------------------------------------------------------
>
>                 Key: LBCORE-69
>                 URL: http://jira.qos.ch/browse/LBCORE-69
>             Project: logback-core
>          Issue Type: Improvement
>          Components: Appender
>            Reporter: Andrey Rybin
>            Assignee: Logback dev list
>             Fix For: 0.9.14
>
>
> Please add String charsetEncoding property to SMTPAppenderBase and use it for email's subject and content encoding.
> Now javaMail default charset encoding is used so only ASCII latin characters can be used in log messages.
> For example my fix for log4j SMTPAppender:
> +
>   private String charsetEncoding = "UTF-8";
>   public void activateOptions () {
> ..
>       addressMessage(msg);
>       if (getSubject() != null) {
>         ((MimeMessage)msg).setSubject(getSubject(), charsetEncoding);  //fix1. Cast looks ugly, but as we always create MimeMessage above, it's ok
>       }
>  /*** Send the contents of the cyclic buffer as an e-mail message.  */
>   @Override
>   protected void sendBuffer () {
>     /* Note: this code already owns the monitor for this
>     appender. This frees us from needing to synchronize on 'cb'. */
>     try {
>       final MimeBodyPart part = new MimeBodyPart();
>       final StringBuilder sb = new StringBuilder();
>       String t = layout.getHeader();
>       if (t != null) { sb.append(t); } //add header
>       final int len = cb.length();
>       for (int i = 0; i < len; i++) {
>         final LoggingEvent event = cb.get();
>         sb.append(layout.format(event));
>         if (layout.ignoresThrowable()) {
>           final String[] s = event.getThrowableStrRep();
>           if (s != null) {
>             for (int j = 0; j < s.length; j++) {
>               sb.append(s[j]).append(Layout.LINE_SEP);
>             }//for
>           }//if
>         }//if
>       }//for
>       t = layout.getFooter();
>       if (t != null) { sb.append(t); }
> //fix2:
>       t = layout.getContentType();  
>       if (t.startsWith("text/")) {
>         part.setText(sb.toString(), charsetEncoding, t.substring(5)); //remove 'text/' from contentType cause javaMail needs here only subtype (html, plain, etc)
>       } else {
>         part.setContent(sb.toString(), t); //for non text chartset isn't needed
>       }//if
>       final Multipart mp = new MimeMultipart();
>       mp.addBodyPart(part);
>       msg.setContent(mp);
>       msg.setSentDate(new Date());
>       Transport.send(msg);
>     } catch (Exception e) {
>       LogLog.error("sendBuffer: Error occured while sending e-mail notification from "+getFrom()+" to "+getTo(), e);
>     }//try
>   }//sendBuffer

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the logback-dev mailing list