buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
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.zip.GZIPOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import java.io.BufferedInputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.io.ByteArrayOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.io.File;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import java.io.FileInputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import java.io.IOException;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    28
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    29
import javax.mail.BodyPart;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    30
import javax.mail.Message;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    31
import javax.mail.MessagingException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    32
import javax.mail.Session;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    33
import javax.mail.Transport;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    34
import javax.mail.internet.InternetAddress;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    35
import javax.mail.internet.MimeBodyPart;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    36
import javax.mail.internet.MimeMessage;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    37
import javax.mail.internet.MimeMultipart;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
import javax.activation.DataHandler;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
import javax.mail.util.ByteArrayDataSource;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    41
import javax.mail.internet.AddressException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    42
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
import org.apache.log4j.Logger;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
import org.apache.commons.io.FileUtils;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
 * Send compressed or uncompressed xml data with email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
public class EmailDataSender {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    // Logger
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
    private static Logger log = Logger.getLogger(EmailDataSender.class);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    // Address email is sent from
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    private String from;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    56
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    // The target address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    private String[] toAddressList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    // LDAP config
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    private String ldapURL;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    // TODO all reference to nokia internals MUST be removed.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    private String rootdn = "o=Nokia";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
    // Configured smtp server address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    private String smtpServerAddress;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    67
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    69
     * Constructor
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    70
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    71
     * @param String comma separeted email recepients list
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    72
     * @param String smtp server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    73
     * @param String ldap server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    74
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    75
    public EmailDataSender(String toStrings, String smtpServer, String ldapAddress) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        if (toStrings != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
            String[] splitList = toStrings.split(",");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
            toAddressList = splitList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    83
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    85
     * Constructor
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    86
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    87
     * @param String email recepient list in array
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    88
     * @param String smtp server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    89
     * @param String ldap server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    90
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    91
    public EmailDataSender(String[] toList, String smtpServer, String ldapAddress) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
        toAddressList = toList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    96
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    98
     * Constructor
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    99
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   100
     * @param String email recepients list in array
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   101
     * @param String smtp server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   102
     * @param String ldap server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   103
     * @param String root domain in ldap server
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   104
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   105
    public EmailDataSender(String[] toList, String smtpServer, String ldapAddress, String rootdn) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        toAddressList = toList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
        smtpServerAddress = smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
        ldapURL = ldapAddress;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
        this.rootdn = rootdn;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   111
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   113
     * Set sender address.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   114
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   115
     * @param String mail sender address
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   116
     */
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
    public void setFrom(String from) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
        this.from = from;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   120
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   122
     * Add current user to recipient list.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   123
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   124
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   125
    public void addCurrentUserToAddressList() throws EmailSendException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
        // Create an empty array if needed
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   127
        if (toAddressList == null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
            toAddressList = new String[0];
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   129
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
        try {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   131
            String[] tmpToAddressList = Arrays.copyOf(toAddressList, toAddressList.length + 1);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   132
            tmpToAddressList[tmpToAddressList.length - 1] = getUserEmail();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   133
            toAddressList = tmpToAddressList;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   134
        } catch (LDAPException ex) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   135
            throw new EmailSendException(ex.getMessage(), ex);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   138
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   140
     * Get recipient address list.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   141
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   142
     * @return Recipient address list.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   143
     */
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
    private InternetAddress[] getToAddressList() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
        int toListLength = 0;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   146
        if (toAddressList != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
            toListLength = toAddressList.length;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   148
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
        InternetAddress[] addressList = new InternetAddress[toListLength];
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
        try {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   151
            log.debug("getToAddressList:length: " + toListLength);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
            for (int i = 0; i < toListLength; i++) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   153
                log.debug("getToAddressList:address:" + toAddressList[i]);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
                addressList[i] = new InternetAddress(toAddressList[i]);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   156
        }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   157
        catch (AddressException aex) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
            log.error("AddressException: " + aex);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
        return addressList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   162
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   164
     * Send xml data without compression
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   165
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   166
     * @param String purpose of this email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   167
     * @param String file to send
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   168
     * @param String mime type
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   169
     * @param String subject of email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   170
     * @param String header of email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   171
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   172
    public void sendData(String purpose, File fileToSend, String mimeType,
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   173
            String subject, String header) throws EmailSendException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
        sendData(purpose, fileToSend, mimeType, subject, header, false);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   178
     * Sending the XML data(compressed) through email.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   179
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   180
     * @param String purpose of this email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   181
     * @param String file to send
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   182
     * @param String subject of email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   183
     * @param String header of email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   184
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   185
    public void compresseAndSendData(String purpose, File fileToSend,
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   186
            String subject, String header) throws EmailSendException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
        sendData(purpose, fileToSend, null, subject, header, true);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   189
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   191
     * Send xml data
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   192
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   193
     * @param String purpose of this email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   194
     * @param String file to send
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   195
     * @param String mime type
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   196
     * @param String subject of email
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   197
     * @param String header of mail
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   198
     * @param boolean compress data if true
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   199
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   200
    public void sendData(String purpose, File fileToSend, String mimeType,
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   201
            String subject, String header, boolean compressData) throws EmailSendException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
            log.debug("sendData:Send file: " + fileToSend + " and mimetype: " + mimeType);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   204
            if (fileToSend != null && fileToSend.exists()) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
                InternetAddress[] toAddresses = getToAddressList();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
                Properties props = new Properties();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
                if (smtpServerAddress != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
                    log.debug("sendData:smtp address: " + smtpServerAddress);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
                    props.setProperty("mail.smtp.host", smtpServerAddress);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
                Session mailSession = Session.getDefaultInstance(props, null);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
                MimeMessage message = new MimeMessage(mailSession);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   213
                message.setSubject(subject == null ? "" : subject);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
                MimeMultipart multipart = new MimeMultipart("related");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
                BodyPart messageBodyPart = new MimeBodyPart();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
                ByteArrayDataSource dataSrc = null;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   217
                String fileName = fileToSend.getName();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
                if (compressData) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
                    log.debug("Sending compressed data");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
                    dataSrc = compressFile(fileToSend);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
                    dataSrc.setName(fileName + ".gz");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
                    messageBodyPart.setFileName(fileName + ".gz");
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   223
                }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   224
                else {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
                    log.debug("Sending uncompressed data:");
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   226
                    dataSrc = new ByteArrayDataSource(new FileInputStream(fileToSend), mimeType);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   228
                    message.setContent(FileUtils.readFileToString(fileToSend), "text/html");
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
                    multipart = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
                String headerToSend = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
                if (header == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
                    headerToSend = "";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
                messageBodyPart.setHeader("helium-bld-data", headerToSend);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
                messageBodyPart.setDataHandler(new DataHandler(dataSrc));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
                if (multipart != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
                    multipart.addBodyPart(messageBodyPart); // add to the
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
                    // multipart
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
                    message.setContent(multipart);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
                try {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   244
                    message.setFrom(getFromAddress());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   245
                }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   246
                catch (AddressException e) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   247
                    throw new EmailSendException("Error retrieving the from address: " + e.getMessage(), e);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   248
                } catch (LDAPException e) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   249
                    throw new EmailSendException("Error retrieving the from address: " + e.getMessage(), e);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
                message.addRecipients(Message.RecipientType.TO, toAddresses);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
                log.info("Sending email alert: " + subject);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
                Transport.send(message);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
            }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   255
        } catch (MessagingException e) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
            String fullErrorMessage = "Failed sending e-mail: " + purpose;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   257
            if (e.getMessage() != null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   258
                fullErrorMessage += ": " + e.getMessage();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
            }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   260
            throw new EmailSendException(fullErrorMessage, e);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   261
        } catch (IOException e) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
            String fullErrorMessage = "Failed sending e-mail: " + purpose;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   263
            if (e.getMessage() != null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   264
                fullErrorMessage += ": " + e.getMessage();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
            // We are Ignoring the errors as no need to fail the build.
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   267
            throw new EmailSendException(fullErrorMessage, e);
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
     * GZipping a string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
     * 
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   274
     * @param data the content to be gzipped.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   275
     * @param filename the name for the file.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
     * @return a ByteArrayDataSource.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
     */
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   278
    protected ByteArrayDataSource compressFile(File fileName) throws IOException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
        ByteArrayOutputStream out = new ByteArrayOutputStream();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
        GZIPOutputStream gz = new GZIPOutputStream(out);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   281
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(fileName));
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
        byte[] dataBuffer = new byte[512];
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
        while ((bufferedInputStream.read(dataBuffer)) != -1) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
            gz.write(dataBuffer);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
        gz.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
        bufferedInputStream.close();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   288
        ByteArrayDataSource dataSrc = new ByteArrayDataSource(out.toByteArray(), "application/x-gzip");
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
        return dataSrc;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   291
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   293
     * Get sender address.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   294
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   295
     * @return sender address.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   296
     * @throws AddressException 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   297
     * @throws LDAPException 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   298
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   299
    private InternetAddress getFromAddress() throws AddressException, LDAPException {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
        if (from != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
            return new InternetAddress(from);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
        return new InternetAddress(getUserEmail());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   305
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
     * Getting user email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
     * 
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   309
     * @return the user email address.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
     */
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   311
    protected String getUserEmail() throws LDAPException {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   312
        if (ldapURL != null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   313
            LDAPHelper helper = new LDAPHelper(this.ldapURL, this.rootdn);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   314
            String email = helper.getUserAttributeAsString(LDAPHelper.EMAIL_ATTRIBUTE_NAME);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   315
            if (email == null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   316
                throw new LDAPException("Could not find email for current user. (" + System.getProperty("user.name") + ")");
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
            }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   318
            return email;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   320
        throw new LDAPException("LDAP url is not defined.");
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
}