diff --git a/common/src/main/java/com/genexus/CommonUtil.java b/common/src/main/java/com/genexus/CommonUtil.java index 42af5b2e8..f89416989 100644 --- a/common/src/main/java/com/genexus/CommonUtil.java +++ b/common/src/main/java/com/genexus/CommonUtil.java @@ -3490,4 +3490,69 @@ public static String Sanitize(String input, HashMap whiteL } return sanitizedInput.toString(); } + + + public static boolean isKnownContentType(String type) + { + if (type != null) + { + for (int i = 0; i < contentTypes.length; i++) + { + if (contentTypes[i].length >= 2) + { + if (type.equalsIgnoreCase(contentTypes[i][1])) + return true; + } + } + } + return false; + } + + public static String getContentFromExt( String extension) + { + if (extension != null) + { + extension = extension.toLowerCase(); + for (int i = 0; i < contentTypes.length; i++) { + if (contentTypes[i][0].equals(extension.trim())) + return contentTypes[i][1]; + } + } + return null; + } + + private static final String contentTypes[][] = { + {"txt" , "text/plain"}, + {"rtx" , "text/richtext"}, + {"htm" , "text/html"}, + {"html" , "text/html"}, + {"xml" , "text/xml"}, + {"aif" , "audio/x-aiff"}, + {"au" , "audio/basic"}, + {"wav" , "audio/wav"}, + {"bmp" , "image/bmp"}, + {"gif" , "image/gif"}, + {"jpe" , "image/jpeg"}, + {"jpeg" , "image/jpeg"}, + {"jpg" , "image/jpeg"}, + {"jfif" , "image/pjpeg"}, + {"tif" , "image/tiff"}, + {"tiff" , "image/tiff"}, + {"png" , "image/x-png"}, + {"3gp" , "video/3gpp"}, + {"3g2" , "video/3gpp2"}, + {"mpg" , "video/mpeg"}, + {"mpeg" , "video/mpeg"}, + {"mov" , "video/quicktime"}, + {"qt" , "video/quicktime"}, + {"avi" , "video/x-msvideo"}, + {"exe" , "application/octet-stream"}, + {"dll" , "application/x-msdownload"}, + {"ps" , "application/postscript"}, + {"pdf" , "application/pdf"}, + {"svg" , "image/svg+xml"}, + {"tgz" , "application/x-compressed"}, + {"zip" , "application/x-zip-compressed"}, + {"gz" , "application/x-gzip"} + }; } diff --git a/gxmail/src/main/java/com/genexus/internet/SMTPSessionJavaMail.java b/gxmail/src/main/java/com/genexus/internet/SMTPSessionJavaMail.java index 4e06763b8..1a0550be2 100644 --- a/gxmail/src/main/java/com/genexus/internet/SMTPSessionJavaMail.java +++ b/gxmail/src/main/java/com/genexus/internet/SMTPSessionJavaMail.java @@ -217,16 +217,31 @@ private void addAttachment(Multipart multipart, String fileNamePath, String atta { fileNamePath = attachDir + fileNamePath; } - BodyPart messageBodyPart = new MimeBodyPart(); - DataSource source = new FileDataSource(fileNamePath); - messageBodyPart.setDataHandler(new DataHandler(source)); + if (filename.lastIndexOf(File.separator) != -1) { filename = filename.substring(filename.lastIndexOf(File.separator) + 1); } + + int lastDot = filename.lastIndexOf('.'); + String extension = (lastDot == -1) ? "" : filename.substring(lastDot + 1).toLowerCase(); + + String mt = CommonUtil.getContentFromExt(extension); + final String mimeType = (mt == null || mt.isEmpty()) ? "application/octet-stream" : mt; + + DataSource source = new FileDataSource(fileNamePath) { + @Override + public String getContentType() { + return mimeType; + } + }; + + BodyPart messageBodyPart = new MimeBodyPart(); + messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); + multipart.addBodyPart(messageBodyPart); - } + } public void logout(GXSMTPSession sessionInfo) { diff --git a/java/src/main/java/com/genexus/internet/HttpContext.java b/java/src/main/java/com/genexus/internet/HttpContext.java index 2eae1a453..cf7ed307e 100644 --- a/java/src/main/java/com/genexus/internet/HttpContext.java +++ b/java/src/main/java/com/genexus/internet/HttpContext.java @@ -877,31 +877,12 @@ public boolean checkContentType(String contentKey, String contentType, String fu public static boolean isKnownContentType(String type) { - if (type != null) - { - for (int i = 0; i < contentTypes.length; i++) - { - if (contentTypes[i].length >= 2) - { - if (type.equalsIgnoreCase(contentTypes[i][1])) - return true; - } - } - } - return false; + return CommonUtil.isKnownContentType(type); } public static String getContentFromExt( String extension) { - if (extension != null) - { - extension = extension.toLowerCase(); - for (int i = 0; i < contentTypes.length; i++) { - if (contentTypes[i][0].equals(extension.trim())) - return contentTypes[i][1]; - } - } - return null; + return CommonUtil.getContentFromExt(extension); } int GX_NULL_TIMEZONEOFFSET = 9999; @@ -913,42 +894,6 @@ public void setRestService() public boolean isRestService() { return restService; } - - private static final String contentTypes[][] = { - {"txt" , "text/plain"}, - {"rtx" , "text/richtext"}, - {"htm" , "text/html"}, - {"html" , "text/html"}, - {"xml" , "application/xml"}, - {"aif" , "audio/x-aiff"}, - {"au" , "audio/basic"}, - {"wav" , "audio/wav"}, - {"bmp" , "image/bmp"}, - {"gif" , "image/gif"}, - {"jpe" , "image/jpeg"}, - {"jpeg" , "image/jpeg"}, - {"jpg" , "image/jpeg"}, - {"jfif" , "image/pjpeg"}, - {"tif" , "image/tiff"}, - {"tiff" , "image/tiff"}, - {"png" , "image/x-png"}, - {"3gp" , "video/3gpp"}, - {"3g2" , "video/3gpp2"}, - {"mpg" , "video/mpeg"}, - {"mpeg" , "video/mpeg"}, - {"mov" , "video/quicktime"}, - {"qt" , "video/quicktime"}, - {"avi" , "video/x-msvideo"}, - {"exe" , "application/octet-stream"}, - {"dll" , "application/x-msdownload"}, - {"ps" , "application/postscript"}, - {"pdf" , "application/pdf"}, - {"svg" , "image/svg+xml"}, - {"tgz" , "application/x-compressed"}, - {"zip" , "application/x-zip-compressed"}, - {"gz" , "application/x-gzip"}, - {"json" , "application/json"} - }; public boolean willRedirect() {