buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java
author wbernard
Thu, 22 Jul 2010 17:08:43 +0300
branchhelium-9.0
changeset 618 df88fead2976
parent 587 85df38eb4012
child 628 7c4a911dc066
permissions -rw-r--r--
helium_9.0.5-4399343f4f50
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description:  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.core;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.util.Arrays;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.Properties;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.util.Hashtable;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import java.util.zip.GZIPOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.io.BufferedInputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.io.ByteArrayOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import java.io.File;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import java.io.FileInputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import java.io.IOException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
import javax.mail.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
import javax.mail.internet.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
import javax.naming.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import javax.naming.directory.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
import javax.activation.DataHandler;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
import javax.mail.util.ByteArrayDataSource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
import org.apache.log4j.Logger;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
import org.apache.commons.io.FileUtils;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
 * Send compressed or uncompressed xml data with email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
public class EmailDataSender {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
    // Logger
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
    private static Logger log = Logger.getLogger(EmailDataSender.class);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
    // Address email is sent from
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    private String from;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    // The target address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    private String[] toAddressList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
    // LDAP config
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    private String ldapURL;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    // TODO all reference to nokia internals MUST be removed.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    private String rootdn = "o=Nokia";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    // Configured smtp server address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    private String smtpServerAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    * Constructor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    *            comma separeted email recepients list
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    *            smtp server 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    *            ldap server
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    public EmailDataSender(String toStrings, String smtpServer,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
            String ldapAddress) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
        if (toStrings != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
            String[] splitList = toStrings.split(",");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
            toAddressList = splitList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    * Constructor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
    *            email recepient list in array
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
    *            smtp server 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    *            ldap server
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    public EmailDataSender(String[] toList, String smtpServer,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
            String ldapAddress) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
        toAddressList = toList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
    * Constructor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
    *            email recepients list in array
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    *            smtp server 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
    *            ldap server
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
    *            root domain in ldap server
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    public EmailDataSender(String[] toList, String smtpServer,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
            String ldapAddress, String rootdn) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
        toAddressList = toList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        this.rootdn = rootdn;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
    * Set sender address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
    *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
    *            mail sender address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
    public void setFrom(String from) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        this.from = from;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
    * Add current user to recipient list.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
    *    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
    public void addCurrentUserToAddressList() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
        // Create an empty array if needed
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
        if (toAddressList == null)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
            toAddressList = new String[0];
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
            String userEmail;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
            userEmail = getUserEmail();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
            toAddressList = Arrays.copyOf(toAddressList,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
                    toAddressList.length + 1);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
            toAddressList[toAddressList.length - 1] = userEmail;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
        } catch (javax.mail.internet.AddressException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
            return;    //does this so that it passes checkstyle and builds
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
        } catch (javax.naming.NamingException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
            return;    //without it build complains that errors are thrown and not caught
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
                       //methods are used else where and are caught and exercised.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
    * Get recipient address list.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
    * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
    *       Recipient address list.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
    private InternetAddress[] getToAddressList() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        int toListLength = 0;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        if (toAddressList != null)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
            toListLength = toAddressList.length;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
        InternetAddress[] addressList = new InternetAddress[toListLength];
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
            log.debug("getToAddressList:length: "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
                    + toListLength);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
            for (int i = 0; i < toListLength; i++) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
                log.debug("getToAddressList:address:"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
                        + toAddressList[i]);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
                addressList[i] = new InternetAddress(toAddressList[i]);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        } catch (javax.mail.internet.AddressException aex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
            log.error("AddressException: " + aex);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
        return addressList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
    * Send xml data without compression
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
    *            purpose of this email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
    *            file to send 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
    *            mime type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
    *            subject of email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
    *            header of email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
    public void sendData(String purpose, String fileToSend, String mimeType,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
            String subject, String header) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
        sendData(purpose, fileToSend, mimeType, subject, header, false);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
   
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
    * Sending the XML data(compressed) through email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
    *            purpose of this email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
    *            file to send     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
    *            subject of email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
    *            header of email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
    public void compresseAndSendData(String purpose, String fileToSend,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
            String subject, String header) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
        sendData(purpose, fileToSend, null, subject, header, true);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
    * Send xml data 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
    *            purpose of this email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
    *            file to send 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
    *            mime type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
    *            subject of email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
    * @param String
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
    *            header of mail
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
    * @param boolean
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
    *            compress data if true
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
    public void sendData(String purpose, String fileToSend, String mimeType,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
            String subject, String header, boolean compressData) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
            log.debug("sendData:Send file: " + fileToSend + " and mimetype: " + mimeType);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
            if (fileToSend != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
                InternetAddress[] toAddresses = getToAddressList();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
                Properties props = new Properties();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
                if (smtpServerAddress != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
                    log.debug("sendData:smtp address: " + smtpServerAddress);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
                    props.setProperty("mail.smtp.host", smtpServerAddress);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
                Session mailSession = Session.getDefaultInstance(props, null);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
                MimeMessage message = new MimeMessage(mailSession);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
                String subjectToSend = subject;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
                if (subject == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
                    subjectToSend = "";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
                message.setSubject(subjectToSend);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
                MimeMultipart multipart = new MimeMultipart("related");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
                BodyPart messageBodyPart = new MimeBodyPart();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
                ByteArrayDataSource dataSrc = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
                String fileName = new File(fileToSend).getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
                if (compressData) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
                    log.debug("Sending compressed data");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
                    dataSrc = compressFile(fileToSend);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
                    dataSrc.setName(fileName + ".gz");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
                    messageBodyPart.setFileName(fileName + ".gz");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
                } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
                    log.debug("Sending uncompressed data:");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
                    dataSrc = new ByteArrayDataSource(new FileInputStream(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
                            new File(fileToSend)), mimeType);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
                    message.setContent(FileUtils.readFileToString(new File(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
                            fileToSend)), "text/html");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
                    multipart = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
                String headerToSend = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
                if (header == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
                    headerToSend = "";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
                messageBodyPart.setHeader("helium-bld-data", headerToSend);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
                messageBodyPart.setDataHandler(new DataHandler(dataSrc));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
                if (multipart != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
                    multipart.addBodyPart(messageBodyPart); // add to the
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
                    // multipart
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
                    message.setContent(multipart);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
                try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
                    InternetAddress fromAddress = getFromAddress(); 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
                    message.setFrom(fromAddress);
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   271
                } catch (HlmAntLibException e) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   272
                    // We are Ignoring the errors as no need to fail the build.
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   273
                    log.debug("Error retrieving current user email address: " + e.getMessage(), e);                    
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
                } catch (javax.mail.internet.AddressException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
                    // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
                    log.debug("Error retrieving current user email address: " + e.getMessage(), e);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
                } catch (javax.naming.NamingException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
                    // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
                    log.debug("Error retrieving current user email address: " + e.getMessage(), e);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
                message.addRecipients(Message.RecipientType.TO, toAddresses);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
                log.info("Sending email alert: " + subject);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
                Transport.send(message);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
        } catch (javax.mail.MessagingException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
            String errorMessage = e.getMessage();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
            String fullErrorMessage = "Failed sending e-mail: " + purpose;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
            if (errorMessage != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
                fullErrorMessage += " " + errorMessage;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
        } catch (java.io.IOException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
            String errorMessage = e.getMessage();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
            String fullErrorMessage = "Failed sending e-mail: " + purpose;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
            if (errorMessage != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
                fullErrorMessage += " " + errorMessage;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
            // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
            log.info(fullErrorMessage);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
     * GZipping a string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
     * @param data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
     *            the content to be gzipped.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
     * @param filename
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
     *            the name for the file.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
     * @return a ByteArrayDataSource.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
    protected ByteArrayDataSource compressFile(String fileName)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
            throws IOException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
        ByteArrayOutputStream out = new ByteArrayOutputStream();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
        GZIPOutputStream gz = new GZIPOutputStream(out);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
        BufferedInputStream bufferedInputStream = new BufferedInputStream(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
                new FileInputStream(new File(fileName)));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
        byte[] dataBuffer = new byte[512];
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
        while ((bufferedInputStream.read(dataBuffer)) != -1) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
            gz.write(dataBuffer);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
        gz.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
        bufferedInputStream.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
        ByteArrayDataSource dataSrc = new ByteArrayDataSource(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
                out.toByteArray(), "application/x-gzip");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
        return dataSrc;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
    * Get sender address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
    * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
    * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
    *       sender address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   332
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
    private InternetAddress getFromAddress() throws javax.mail.internet.AddressException, javax.naming.NamingException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
        if (from != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
            return new InternetAddress(from);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
        return new InternetAddress(getUserEmail());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
     * Getting user email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
     *    the user email address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
    protected String getUserEmail() throws javax.mail.internet.AddressException, javax.naming.NamingException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
        String username = System.getProperty("user.name");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
        log.debug("EmailDataSender:getUserEmail:username: " + username);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
        // Set up environment for creating initial context
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
        Hashtable<String, String> env = new Hashtable<String, String>(11);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
        env.put(Context.INITIAL_CONTEXT_FACTORY,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
                "com.sun.jndi.ldap.LdapCtxFactory");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
        env.put(Context.PROVIDER_URL, ldapURL + "/" + rootdn);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
        // Create initial context
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
        DirContext ctx = new InitialDirContext(env);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
        SearchControls controls = new SearchControls();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
            NamingEnumeration<SearchResult> en = ctx.search("", "uid=" + username, controls);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
            if (en.hasMore()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
                SearchResult sr = en.next();
618
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   364
                if (sr.getAttributes().get("mail") != null) {
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   365
                    String email = (String) sr.getAttributes().get("mail").get();
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   366
                    log.debug("getUserEmail:" + email);
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   367
                    return email;
df88fead2976 helium_9.0.5-4399343f4f50
wbernard
parents: 587
diff changeset
   368
                }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
        } catch (javax.naming.NameNotFoundException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
            throw new HlmAntLibException("Error finding user email for " + username );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
        throw new HlmAntLibException("Could not find user email in LDAP.");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378