2 # Prints the user's email address, with confirmation from the user.
4 # Copyright (C) 2001-2003, 2005 Free Software Foundation, Inc.
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # Prerequisites for using ${exec_prefix}/lib and ${datarootdir}/locale.
21 exec_prefix
="${prefix}"
22 datarootdir
="${prefix}/share"
23 datadir
="${datarootdir}"
24 # Set variables libdir, localedir.
25 libdir
="${exec_prefix}/lib"
26 localedir
="${datarootdir}/locale"
28 # Support for relocatability.
29 if test "yes" = yes; then
30 orig_installdir
="$libdir"/gettext # see Makefile.am's install rule
31 # Determine curr_installdir without caring for symlinked callers.
32 curr_installdir
=`echo "$0" | sed -e 's,/[^/]*$,,'`
33 curr_installdir
=`cd "$curr_installdir" && pwd`
34 # Compute the original/current installation prefixes by stripping the
35 # trailing directories off the original/current installation directories.
37 orig_last
=`echo "$orig_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
38 curr_last
=`echo "$curr_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
39 if test -z "$orig_last" ||
test -z "$curr_last"; then
42 if test "$orig_last" != "$curr_last"; then
45 orig_installdir
=`echo "$orig_installdir" | sed -e 's,/[^/]*$,,'`
46 curr_installdir
=`echo "$curr_installdir" | sed -e 's,/[^/]*$,,'`
48 # Now relocate the directory variables that we use.
49 libdir
=`echo "$libdir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
50 localedir
=`echo "$localedir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
53 # Internationalization.
55 TEXTDOMAIN
=gettext-tools
57 TEXTDOMAINDIR
="$localedir"
60 # Redirect fileno 3 to interactive I/O.
68 # Find the user name on the local machine.
69 user
=`id -u -n 2>/dev/null`
70 if test -z "$user"; then
72 if test -z "$user"; then
74 if test -z "$user"; then
81 # hostname on some systems (SVR3.2, old Linux) returns a bogus exit status,
82 # so uname gets run too, so we keep only the first line of output.
83 #host=`(hostname || uname -n) 2>/dev/null | sed 1q`
84 host=`"$libdir"/gettext/hostname --short 2>/dev/null | sed 1q`
87 hostfqdn
=`"$libdir"/gettext/hostname --fqdn 2>/dev/null | sed 1q`
89 # Find a list of email addresses from various mailer configuration files.
90 # All mailers use configuration files under $HOME. We handle them in a
91 # last-modified - first-priority order.
95 # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
97 # Mozilla Thunderbird addresses
98 files
="$files .thunderbird/*/prefs.js"
101 files
="$files .mozilla/*/prefs.js"
103 # Netscape 4 addresses
104 files
="$files .netscape/liprefs.js .netscape/preferences.js"
106 # Netscape 3 addresses
107 files
="$files .netscape/preferences"
109 # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
110 # XEmacs mew addresses
111 files
="$files .emacs .emacs.el"
114 files
="$files .kde2/share/config/emaildefaults"
116 # KDE kmail addresses
117 files
="$files .kde2/share/config/kmailrc"
119 # GNOME evolution 2 addresses
120 files
="$files .gconf/apps/evolution/mail/%gconf.xml"
122 # GNOME evolution 1 addresses
123 files
="$files evolution/config.xmldb"
125 # GNOME balsa addresses
126 files
="$files .gnome/balsa"
128 # StarOffice and OpenOffice addresses
129 sed_dos2unix
='s/\r$//'
130 sed_soffice51
='s,StarOffice 5\.1=\(.*\)$,\1/sofficerc,p'
131 sed_soffice52
='s,StarOffice 5\.2=\(.*\)$,\1/user/sofficerc,p'
132 sed_ooffice
='s,^OpenOffice[^=]*=\(.*\)$,\1/user/config/registry/instance/org/openoffice/UserProfile.xml,p'
133 files
="$files Office51/sofficerc Office52/user/sofficerc "`sed -n -e "$sed_dos2unix" -e "$sed_soffice51" -e "$sed_soffice52" -e "$sed_ooffice" .sversionrc 2>/dev/null | sed -e 's,^file://*,/,'`
136 files
="$files .muttrc"
139 files
="$files .pinerc"
142 files
="$files .xfmail/.xfmailrc"
145 files
="$files .ratatosk/ratatoskrc"
147 # ----------------------- END MAILER SPECIFIC CODE -----------------------
149 # Expand wildcards and remove nonexistent files from the list.
151 for file in $files; do
152 if test -r "$file" && test ! -d "$file"; then
153 nfiles
="$nfiles $file"
160 if test -n "$files"; then
162 for file in `ls -t $files`; do
166 # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
168 # Mozilla and Mozilla Thunderbird addresses
169 .mozilla
/*/prefs.js | .thunderbird
/*/prefs.js
)
170 addresses
="$addresses "`grep -h '^user_pref("mail\.identity\..*\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\..*\.useremail", "\(.*\)");$/\1/'`
173 # Netscape 4 addresses
174 .netscape
/liprefs.js | .netscape
/preferences.js
)
175 addresses
="$addresses "`grep -h '^user_pref("mail\.identity\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\.useremail", "\(.*\)");$/\1/'`
178 # Netscape 3 addresses
179 .netscape
/preferences
)
180 addresses
="$addresses "`grep -h '^EMAIL_ADDRESS:' $file 2>/dev/null | sed -e 's/^EMAIL_ADDRESS:[ ]*//'`
184 # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
185 addresses
="$addresses "`grep -h '[ (]user-mail-address "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]user-mail-address "\([^"]*\)".*$/\1/'`
186 # XEmacs mew addresses
187 domains
=`grep -h '[ (]mew-mail-domain "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]mew-mail-domain "\([^"]*\)".*$/\1/'`
188 if test -n "$domains"; then
189 for domain
in $domains; do
190 addresses
="$addresses ${user}@$domain"
196 .kde
2/share
/config
/emaildefaults
)
197 addresses
="$addresses "`grep -h '^EmailAddress=' $file 2>/dev/null | sed -e 's/^EmailAddress=//'`
200 # KDE kmail addresses
201 .kde
2/share
/config
/kmailrc
)
202 addresses
="$addresses "`grep -h '^Email Address=' $file 2>/dev/null | sed -e 's/^Email Address=//'`
205 # GNOME evolution 2 addresses
206 .gconf
/apps
/evolution
/mail
/%gconf.xml
)
207 sedexpr0
='s,^.*<addr-spec>\(.*\)</addr-spec>.*$,\1,p'
208 addresses
="$addresses "`sed -n -e "$sedexpr0" < $file`
211 # GNOME evolution 1 addresses
212 evolution
/config.xmldb
)
213 sedexpr0
='s/^.*<entry name="identity_address_[0-9]*" type="string" value="\([^"]*\)".*$/\1/p'
214 sedexpr1
='s/\(..\)/\\x\1/g'
216 addresses
="$addresses "`sed -n -e "$sedexpr0" < $file | while read hexstring; do printf \`echo "$hexstring" |
sed -e "$sedexpr1" -e "$sedexpr2"\
`; done`
219 # GNOME balsa addresses
221 addresses
="$addresses "`grep -h '^Address=' $file 2>/dev/null | sed -e 's/^Address=//'`
224 # OpenOffice addresses
226 addresses
="$addresses "`sed -n -e 's,^.*<mail cfg:type="string">\(.*\)</mail>.*$,\1,p' $file 2>/dev/null`
229 # StarOffice addresses
230 # Not a typo. They really write "Adress" with a single d.
231 # German orthography...
233 addresses
="$addresses "`grep -h '^User-Adress=' $file 2>/dev/null | sed -e 's/#[^#]*$//' -e 's/^.*#//'`
238 mutt_addresses
=`grep -h '^set from="[^"]*"[ ]*$' $file 2>/dev/null | sed -e 's/^set from="\([^"]*\)"[ ]*$/\1/'`
239 if test -n "$mutt_addresses"; then
240 addresses
="$addresses $mutt_addresses"
242 # mutt uses $EMAIL as fallback.
243 if test -n "$EMAIL"; then
244 addresses
="$addresses $EMAIL"
251 domains
=`grep -h '^user-domain=' $file 2>/dev/null | sed -e 's/^user-domain=//'`
252 if test -n "$domains"; then
253 for domain
in $domains; do
254 addresses
="$addresses ${user}@$domain"
257 # The use-only-domain-name option is only used if the user-domain option is not present.
258 domains
=`grep -h '^use-only-domain-name=' $file 2>/dev/null | sed -e 's/^use-only-domain-name=//'`
259 if test "Yes" = "$domains"; then
260 addresses
="$addresses ${user}@"`echo "$hostfqdn" | sed -e 's/^[^.]*\.//'`
267 addresses
="$addresses "`grep -h '^from=.*<.*>' $file 2>/dev/null | sed -e 's/^.*<\([^<>]*\)>.*$/\1/'`
271 .ratatosk
/ratatoskrc
)
272 domains
=`grep -h '^set option(masquerade_as) ' $file 2>/dev/null | sed -e 's/^set option(masquerade_as) //'`
273 if test -n "$domains"; then
274 for domain
in $domains; do
275 addresses
="$addresses ${user}@$domain"
278 # The domain option is used only if the masquerade_as option is not present.
279 domains
=`grep -h '^set option(domain) ' $file 2>/dev/null | sed -e 's/^set option(domain) //'`
280 if test -n "$domains"; then
281 for domain
in $domains; do
282 addresses
="$addresses ${user}@${host}.$domain"
288 # ----------------------- END MAILER SPECIFIC CODE -----------------------
296 # Some Debian systems have a file /etc/mailname.
297 if test -r /etc
/mailname
; then
298 hostmailname
=`cat /etc/mailname`
299 if test -n "$hostmailname"; then
300 addresses
="$addresses ${user}@$hostmailname"
304 # SuSE Linux >= 8.0 systems have a file /etc/sysconfig/mail.
305 if test -r /etc
/sysconfig
/mail; then
306 hostmailname
=`. /etc/sysconfig/mail && echo "$FROM_HEADER"`
307 if test -n "$hostmailname"; then
308 addresses
="$addresses ${user}@$hostmailname"
312 # elm has no user-defined addresses.
313 # mailx has no user-defined addresses.
314 # mh has no user-defined addresses.
315 # They use the system default.
316 addresses
="$addresses ${user}@$hostfqdn"
318 # Normalize addresses: remove addresses without @, lowercase the part after @,
319 # and remove duplicates.
323 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
332 for addr
in $addresses; do
334 "<"*">") addr
=`echo "$addr" | sed -e 's/^<//' -e 's/>$//'` ;;
338 addr
=`echo "$addr" | sed -n -e "$lowercase_sed"`
339 case " $naddresses " in
341 *) naddresses
="$naddresses $addr" ;;
346 addresses
="$naddresses"
348 # Now it's time to ask the user.
351 # At least two addresses.
354 for addr
in $addresses; do
356 lines
="${lines}${i} ${addr}
360 { gettext "Which is your email address?"; echo; } 1>&3
362 { gettext "Please choose the number, or enter your email address."; echo; } 1>&3
363 read answer
< /dev
/tty
368 for addr
in $addresses; do
370 if test "$i" = "$answer"; then
377 "<"*">") answer
=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
380 *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
382 *@
*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
383 *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
385 addr
=`echo "$answer" | sed -n -e "$lowercase_sed"`
392 { gettext "Is the following your email address?"; echo; } 1>&3
393 echo " $addresses" 1>&3
394 { gettext "Please confirm by pressing Return, or enter your email address."; echo; } 1>&3
395 read answer
< /dev
/tty
396 if test -z "$answer"; then
397 addr
=`echo "$addresses" | sed -e 's/^ //'`
401 "<"*">") answer
=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
404 *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
406 *@
*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
407 *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
409 addr
=`echo "$answer" | sed -n -e "$lowercase_sed"`
415 { gettext "Couldn't find out about your email address."; echo; } 1>&3
417 { gettext "Please enter your email address."; echo; } 1>&3
418 read answer
< /dev
/tty
420 "<"*">") answer
=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
423 *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
425 *@
*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
426 *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
428 addr
=`echo "$answer" | sed -n -e "$lowercase_sed"`
432 *) echo "internal error" 1>&3 ; exit 1 ;;
435 # Print to standard output.