1

here I'm working on sun Solaris 10, I have tried before to send a normal email with and without attach and its worked fine with me , but now I'm trying to cat-file element and send attach in the same email but it does not work

this is my result.txt file body :

Total Number of Files = 8
Total Number of Fixed Files = 4
Total Number of Notification Files = 4

Total Number of Courrpted Files = 0

Total Execution Time = 3 Seconds.

this is my data.txt file body :

Notification Files : 
file number 1
file number 2

unix command :

RECEIPIENTS="mm@gmail.com"
SUBJECT="!! testtt !!"
(cat Results.txt ; uuencode Data.txt Data.txt) | mailx -s "$SUBJECT" -c mm@gmail.com,dd@gmail.com -r zz@gmail.com $RECEIPIENTS

this is what i got after sending the email :

Total Number of Files = 8
Total Number of Fixed Files = 4
Total Number of Notification Files = 4

Total Number of Courrpted Files = 0

Total Execution Time = 3 Seconds.
begin 777 Data
M#0I.;W1I9FEC871I;VX@1FEL97,@.B -"@T*,2U#1$M(34LU2D]21DPP,#0R
M,@T*,BU#1$Q454]-2D]21DPP-S$Q- T*,RU#1$Q454]-2D]21DPP-S$Q-@T* M-"U#1$Q604Q-2D]21DPP-#0U, T*#0I&:7AE9"!&:6QE<R Z( T*#0HQ+4-$ M051'2SE*3U)&3# P,3$T#0HR+4-$051'2SE*3U)&3# P,3$U#0HS+4-$0TA.
C0U5*3U)&3#,Q.3DT#0HT+4-$0TA.0U5*3U)&3#,Q.3DU#0HU

end

note: if I use echo or echo -e or attach the file with uuencode without cat its worked fine, the problem only when I use cat with uuencode

RavinderSingh13
  • 130,504
  • 14
  • 57
  • 93
Nikolan Asad
  • 178
  • 1
  • 11
  • What you show is exactly what `uuencode` looks like. What do you expect? Probably try to find if you have a mail client which can handle MIME attachments instead. (Your `mailx` might, or might not; see https://stackoverflow.com/a/48588035/874188) – tripleee Jan 06 '20 at 12:04
  • i can send a normal email with an attachment , i have this problem only when i use `cat` and `uuencode` together, the desired output is viewed the body of `result.txt` by using cat and send `data.txt` as an attachment in the same email , the email sent but without attachment "enncode command does not work here only wiht cat command" – Nikolan Asad Jan 06 '20 at 12:09
  • 2
    What you see is probably that your own email program helpfully hides the `uuencode` horror when it's the only text in the email body and *displays* it as if it was an attachment, though it isn't really. Again, my recommendation would be to abandon this legacy format in favor of MIME if at all possible. – tripleee Jan 06 '20 at 12:11
  • Why are you using `uuencode` anyway? You're not really sending an email attachment with what you've posted - you're sending the encoded text as the body of the email. – Andrew Henle Jan 06 '20 at 14:50
  • unfortunately, we are working on the legacy environment, `uuencode` is the only thing that available here, can you advise me in this situation – Nikolan Asad Jan 07 '20 at 07:55

1 Answers1

2

There was a time in the last millennium when uuencode made sense, but you really should be using MIME instead in this day and age.

Here is a simple Python 3 script which combines a message from standard input with an attachment into a valid RFC822 message which you can send with sendmail or similar. It is rather closely based on the Python documentation's examples.

#!/usr/bin/env python3

from email.message import EmailMessage
import sys

msg = EmailMessage()
msg['From'] = sys.argv[1]
msg['To'] = sys.argv[2]
msg['Subject'] = sys.argv[3]
# Don't mess with the preamble, the documentation is wrong to suggest you do

msg.set_content(''.join([line for line in sys.stdin]))

with open(sys.argv[4], 'r') as attachment:
    msg.add_attachment(attachment.read(), maintype='text', subtype='plain')

print(msg.as_string())

To use this in your example,

# If `sendmail` is not in your `PATH`, maybe add it.
# For example, if you have it in `/usr/lib/sendmail`
# and `/usr/lib´ is not in your `PATH`, you can add it with
#PATH=$PATH:/usr/lib

# Don't use upper case for private variables; check spelling of "recipients"
# To demo an example of sending to multiple addresses, adds a second recipient
recipients="mm@gmail.com,another@example.com"
subject="!! testtt !!"

python3 path/to/script.py "zz@gmail.com" "$recipients" "$subject" Data.txt <Results.txt |
sendmail -oi -t

You can leave out the pipe to sendmail to see what the message looks like. Instead of uuencode smack dab in the message body, it creates a multipart MIME message with two parts, one of which is inline and contains the text from standard input, and another which is properly tagged as an attachment. It's slightly bulky, but I'm including an example here just to show you.

From: zz@gmail.com
To: mm@gmail.com,another@example.com
Subject: !! testtt !!
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============2189027902917283968=="

--===============2189027902917283968==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit

Total Number of Files = 8
Total Number of Fixed Files = 4
Total Number of Notification Files = 4

Total Number of Courrpted Files = 0

Total Execution Time = 3 Seconds.

--===============2189027902917283968==
Content-Type: text/plain
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Content-Disposition: attachment

Tm90aWZpY2F0aW9uIEZpbGVzIDogCmZpbGUgbnVtYmVyIDEKZmlsZSBudW1iZXIgMgo=

--===============2189027902917283968==--

The attachment is rather needlessly base64-encoded in this particular example; you can tweak the Python code if you absolutely need it to be human-readable (but then neither was the uuencode).

(Also, no idea why the body part has a separate MIME-Version: header -- that seems like a bug.)

tripleee
  • 175,061
  • 34
  • 275
  • 318
  • 1
    That was one of the quickest accepts I have seen -- thanks! Notice I made a minor edit after you accepted which isn't visible in the edit history (there is a five-minute time window on Stack Overflow for "grace edits" which don't show up as new versions). – tripleee Jan 07 '20 at 08:17
  • 1
    If you don't have a working `sendmail`, the linked documentation also has examples of how to use Python's `smtplib` library to submit the message to a mail server. Perhaps also note that your ISP probably prevents you from using port 25 if you have a consumer-grade upstream connection; the solution to that is often to use authenticated and encrypted SMTP (port 465 or 587, with SSL) to an SMTP server where you have an account. – tripleee Jan 07 '20 at 09:11