xref: /core/shell/source/unix/misc/senddoc.sh (revision 70bcf9e8)
1#!/bin/sh
2#
3# This file is part of the LibreOffice project.
4#
5# This Source Code Form is subject to the terms of the Mozilla Public
6# License, v. 2.0. If a copy of the MPL was not distributed with this
7# file, You can obtain one at http://mozilla.org/MPL/2.0/.
8#
9# This file incorporates work covered by the following license notice:
10#
11#   Licensed to the Apache Software Foundation (ASF) under one or more
12#   contributor license agreements. See the NOTICE file distributed
13#   with this work for additional information regarding copyright
14#   ownership. The ASF licenses this file to you under the Apache
15#   License, Version 2.0 (the "License"); you may not use this file
16#   except in compliance with the License. You may obtain a copy of
17#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18#
19
20URI_ENCODE=$(dirname "$0")/uri-encode
21FOPTS=""
22sd_platform=$(uname -s)
23
24# linux file utility needs -L option to resolve symlinks
25if [ "$sd_platform" = "Linux" ] ; then
26  FOPTS="-L"
27fi
28
29# do not confuse the system mail clients with OOo and Java libraries
30unset LD_LIBRARY_PATH
31
32# tries to locate the executable specified
33# as first parameter in the user's path.
34which() {
35    if [ ! -z "$1" ]; then
36        for i in $(echo "$PATH" | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'); do
37            if [ -x "$i/$1" -a ! -d "$i/$1" ]; then
38                echo "$i/$1"
39                break;
40            fi
41        done
42    fi
43}
44
45# checks for the original mozilla start script(s)
46# and restrict the "-remote" semantics to those.
47run_mozilla() {
48    # find mozilla script in PATH if necessary
49    if [ "$(basename "$1")" = "$1" ]; then
50        moz=$(which "$1")
51    else
52        moz=$1
53    fi
54
55    if file $FOPTS "$moz" | grep "script" > /dev/null && grep "[NM]PL" "$moz" > /dev/null; then
56        "$moz" -remote 'ping()' 2>/dev/null >/dev/null
57        if [ $? -eq 2 ]; then
58            "$1" -compose "$2" &
59        else
60            "$1" -remote "xfeDoCommand(composeMessage,$2)" &
61        fi
62    else
63        "$1" -compose "$2" &
64    fi
65}
66
67if [ "$1" = "--mailclient" ]; then
68    shift
69    MAILER=$1
70    shift
71fi
72
73# autodetect mail client from executable name
74case $(basename "$MAILER" | sed 's/-.*$//') in
75
76    iceape | mozilla | netscape | seamonkey | icedove | thunderbird | betterbird)
77
78        while [ "$1" != "" ]; do
79            case $1 in
80                --to)
81                    TO=${TO:-}${TO:+,}$2
82                    shift
83                    ;;
84                --cc)
85                    CC=${CC:-}${CC:+,}$2
86                    shift
87                    ;;
88                --bcc)
89                    BCC=${BCC:-}${BCC:+,}$2
90                    shift
91                    ;;
92                --subject)
93                    SUBJECT=$2
94                    shift
95                    ;;
96                --body)
97                    BODY=$2
98                    shift
99                    ;;
100                --attach)
101                    ATTACH=${ATTACH:-}${ATTACH:+,}$(echo "file://$2" | "${URI_ENCODE}")
102                    shift
103                    ;;
104                *)
105                    ;;
106            esac
107            shift;
108        done
109
110        if [ "$TO" != "" ]; then
111            COMMAND=${COMMAND:-}${COMMAND:+,}to=\'${TO}\'
112        fi
113        if [ "$CC" != "" ]; then
114            COMMAND=${COMMAND:-}${COMMAND:+,}cc=\'${CC}\'
115        fi
116        if [ "$BCC" != "" ]; then
117            COMMAND=${COMMAND:-}${COMMAND:+,}bcc=\'${BCC}\'
118        fi
119        if [ "$SUBJECT" != "" ]; then
120            COMMAND=${COMMAND:-}${COMMAND:+,}subject=\'${SUBJECT}\'
121        fi
122        if [ "$BODY" != "" ]; then
123            COMMAND=${COMMAND:-}${COMMAND:+,}body=\'${BODY}\'
124        fi
125        if [ "$ATTACH" != "" ]; then
126            COMMAND=${COMMAND:-}${COMMAND:+,}attachment=\'${ATTACH}\'
127        fi
128
129        run_mozilla "$MAILER" "$COMMAND"
130        ;;
131
132    kmail)
133
134        while [ "$1" != "" ]; do
135            case $1 in
136                --to)
137                    TO="${TO:-}${TO:+,}$2"
138                    shift
139                    ;;
140                --cc)
141                    CC="${CC:-}${CC:+,}$2"
142                    shift
143                    ;;
144                --bcc)
145                    BCC="${BCC:-}${BCC:+,}$2"
146                    shift
147                    ;;
148                --subject)
149                    SUBJECT="$2"
150                    shift
151                    ;;
152                --body)
153                    BODY="$2"
154                    shift
155                    ;;
156                --from)
157                    FROM="$2"
158                    shift
159                    ;;
160                --attach)
161                    ATTACH="${ATTACH:-}${ATTACH:+ }--attach "$(echo "file://$2" | "${URI_ENCODE}")
162                    shift
163                    ;;
164                *)
165                    ;;
166            esac
167            shift;
168        done
169
170        ${MAILER} --composer \
171            ${CC:+--cc} ${CC:+"${CC}"}  \
172            ${BCC:+--bcc} ${BCC:+"${BCC}"} \
173            ${SUBJECT:+--subject} ${SUBJECT:+"${SUBJECT}"}  \
174            ${BODY:+--body} ${BODY:+"${BODY}"} \
175            ${FROM:+--header} ${FROM:+"From: ${FROM}"} \
176            ${ATTACH:+${ATTACH}}  \
177            ${TO:+"${TO}"}
178        ;;
179
180    mutt)
181
182        while [ "$1" != "" ]; do
183            case $1 in
184                --from)
185                    FROM="$2"
186                    shift
187                    ;;
188                --to)
189                    TO="${TO:-}${TO:+,}$2"
190                    shift
191                    ;;
192                --cc)
193                    CC="${CC:-}${CC:+,}$2"
194                    shift
195                    ;;
196                --bcc)
197                    BCC="${BCC:-}${BCC:+,}$2"
198                    shift
199                    ;;
200                --subject)
201                    SUBJECT="$2"
202                    shift
203                    ;;
204                --body)
205                    TEMPLATE="$(basename "$0").mutt.XXXXXXXX"
206                    BODY=$(mktemp -q -t "${TEMPLATE}")
207                    echo "$2" > "$BODY"
208                    shift
209                    ;;
210                --attach)
211                    ATTACH="$2"
212                    shift
213                    ;;
214                *)
215                    ;;
216            esac
217            shift;
218        done
219
220        x-terminal-emulator -e ${MAILER} \
221            ${FROM:+-e} ${FROM:+"set from=\"${FROM}\""} \
222            ${CC:+-c} ${CC:+"${CC}"} \
223            ${BCC:+-b} ${BCC:+"${BCC}"} \
224            ${SUBJECT:+-s} ${SUBJECT:+"${SUBJECT}"} \
225            ${BODY:+-i} ${BODY:+"${BODY}"} \
226            ${ATTACH:+-a} ${ATTACH:+"${ATTACH}"} \
227            ${TO:+"${TO}"} &
228        rm -f "$BODY"
229        ;;
230
231    evolution | gnome | xdg) # NB. shortened from the dash on
232
233        while [ "$1" != "" ]; do
234            case $1 in
235                --to)
236                    if [ "${TO}" != "" ]; then
237                        MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
238                    else
239                        TO="$2"
240                    fi
241                    shift
242                    ;;
243                --cc)
244                    MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}")
245                    shift
246                    ;;
247                --bcc)
248                    MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}")
249                    shift
250                    ;;
251                --subject)
252                    MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}")
253                    shift
254                    ;;
255                --body)
256                    MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}")
257                    shift
258                    ;;
259                --attach)
260                    MAILTO="${MAILTO:-}${MAILTO:+&}attach="$(echo "file://$2" | "${URI_ENCODE}")
261                    shift
262                    ;;
263                *)
264                    ;;
265            esac
266            shift;
267        done
268
269        MAILTO="mailto:${TO}?${MAILTO}"
270        ${MAILER} "${MAILTO}" &
271        ;;
272
273    groupwise)
274
275        while [ "$1" != "" ]; do
276            case $1 in
277                --to)
278                    if [ "${TO}" != "" ]; then
279                        MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
280                    else
281                        TO="$2"
282                    fi
283                    shift
284                    ;;
285                --cc)
286                    MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}")
287                    shift
288                    ;;
289                --bcc)
290                    MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}")
291                    shift
292                    ;;
293                --subject)
294                    MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}")
295                    shift
296                    ;;
297                --body)
298                    MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}")
299                    shift
300                    ;;
301                --attach)
302                    MAILTO="${MAILTO:-}${MAILTO:+&}attachment="$(echo "file://$2" | "${URI_ENCODE}")
303                    shift
304                    ;;
305                *)
306                    ;;
307            esac
308            shift;
309        done
310
311        MAILTO="mailto:${TO}?${MAILTO}"
312        ${MAILER} "${MAILTO}" &
313        ;;
314
315    dtmail)
316
317        while [ "$1" != "" ]; do
318            case $1 in
319                --to)
320                    TO=${TO:-}${TO:+,}$2
321                    shift
322                    ;;
323                --attach)
324                    ATTACH="$2"
325                    shift
326                    ;;
327                *)
328                    ;;
329            esac
330            shift;
331        done
332
333        ${MAILER} ${TO:+-T} ${TO:-} ${ATTACH:+-a} ${ATTACH:+"${ATTACH}"}
334        ;;
335
336    sylpheed | claws)
337
338        while [ "$1" != "" ]; do
339            case $1 in
340                --to)
341                    TO=${TO:-}${TO:+,}$2
342                    shift
343                    ;;
344                --attach)
345                    ATTACH=${ATTACH:-}${ATTACH:+,}$(echo "file://$2" | "${URI_ENCODE}")
346                    shift
347                    ;;
348                *)
349                    ;;
350            esac
351            shift;
352        done
353
354         ${MAILER} ${TO:+--compose} ${TO:-} ${ATTACH:+--attach} ${ATTACH:-}
355        ;;
356
357    Mail | Thunderbird | Betterbird | *.app )
358
359        while [ "$1" != "" ]; do
360            case $1 in
361                --attach)
362                    #i95688# fix filenames containing accented chars, whatever alien
363                    ATTACH="${ATTACH:-}${ATTACH:+ }"$(echo "file://$2" | "${URI_ENCODE}")
364                    shift
365                    ;;
366                *)
367                    ;;
368            esac
369            shift;
370        done
371        /usr/bin/open -a "${MAILER}" ${ATTACH}
372        ;;
373
374    *)
375
376        # LO is configured to use something we do not recognize, or is not configured.
377        # Try to be smart, and send the mail anyway, if we have the
378        # possibility to do so.
379
380        if [ -x /usr/bin/xdg-email ] ; then
381            MAILER=/usr/bin/xdg-email
382        elif [ -n "$DESKTOP_LAUNCH" ]; then
383            # http://lists.freedesktop.org/pipermail/xdg/2004-August/002873.html
384            MAILER=${DESKTOP_LAUNCH}
385        elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open ] ; then
386            MAILER=/usr/bin/kde-open
387        elif [ -x /usr/bin/xdg-open ] ; then
388            MAILER=/usr/bin/xdg-open
389        elif command -v xdg-open >/dev/null 2>&1 ; then
390            MAILER=$(command -v xdg-open)
391        else
392            echo "Unsupported mail client: $(basename $MAILER | sed 's/-.*^//')"
393            exit 2
394        fi
395
396        while [ "$1" != "" ]; do
397            case $1 in
398                --to)
399                    if [ "${TO}" != "" ]; then
400                        MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
401                    else
402                        TO="$2"
403                    fi
404                    shift
405                    ;;
406                --cc)
407                    MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}")
408                    shift
409                    ;;
410                --bcc)
411                    MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}")
412                    shift
413                    ;;
414                --subject)
415                    MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}")
416                    shift
417                    ;;
418                --body)
419                    MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}")
420                    shift
421                    ;;
422                --attach)
423                    if [ "$MAILER" = "/usr/bin/xdg-email" ]; then
424                        MAILTO="${MAILTO:-}${MAILTO:+&}attach="$(echo "file://$2" | "${URI_ENCODE}")
425                    else
426                        MAILTO="${MAILTO:-}${MAILTO:+&}attachment="$(echo "file://$2" | "${URI_ENCODE}")
427                    fi
428                    shift
429                    ;;
430                *)
431                    ;;
432            esac
433            shift;
434        done
435
436        MAILTO="mailto:${TO}?${MAILTO}"
437        ${MAILER} "${MAILTO}" &
438        ;;
439esac
440