The following contents are in a file.i use a shell script to call a python script.This python script send the mail.But in the mail contents i see the output as shown below.Its all in oneline..What am i doing wrong
/usr/bin/python $DIR/sm.py "$message" "`cat /tmp/alert.txt`"
Input:The following are the contents of alert.txt
Thu Jun 28 14:29:26 IST 2012
Disk usage limit exceeded -Current disk usage is 167G-Configured disk usage is 200HTTPD connections exceeded configured usage limit -Current HTTPD connections is 21-Configured HTTPD connection is 20
========================OTHER INFO==================
Total fds: 8
Socket fds: 0
Other fds: 8
Free memory :Free Memory:183732
Buffered memory Buffered Memory:78224
Cache memory : Cache Memory:579040
Disk usage is 167G
DB connections 1
Network connections 21
CPU Usage: 0.0
Output:
Thu Jun 28 14:29:26 IST 2012 Disk usage limit exceeded -Current disk usage is 167G-Configured disk usage is 200HTTPD connections exceeded configured usage limit -Current HTTPD connections is 21-Configured HTTPD connection is 20 ========================OTHER INFO================== Total fds: 8 Socket fds: 0 Other fds: 8 Free memory :Free Memory:183732 Buffered memory Buffered Memory:78224 Cache memory : Cache Memory:579040 Disk usage is 167G DB connections 1 Network connections 21 CPU Usage: 0.0
This is sm.py
import logging
import smtplib
import sys
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
try:
smaid = qs[0].id
gmailUser = '[email protected]'
gmailPassword = '12345'
mailServer = smtplib.SMTP('smtp.gmail.com', 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmailUser, gmailPassword)
to_addr = "[email protected]"
subject = sys.argv[1]
body = sys.argv[2]
try:
msg = MIMEMultipart()
msg['From'] = gmailUser
msg['To'] = to_addr
msg["Content-type"] = "text/html"
sub = subject
msg['Subject'] = sub
body = body
msg.attach(MIMEText(body, 'html'))
mailServer.sendmail(gmailUser, to_addr, msg.as_string())
except:
write_exception("send exception")
mailServer.close()
except:
write_exception("send exception1")
If you insist on sending HTML, you need HTML line breaks:
import cgi
# escape special HTML characters
body = cgi.escape(body)
# use HTML line breaks
body = body.replace("\r\n", "\n").replace("\n", "<br />\n")
But probably you need neither Multipart nor HTML, so you can just use smtplib.SMTP.sendmail:
headers = (('From', gmailUser),
('To', to_addr),
('Subject', subject))
# normalize newlines to CR+LF, as required by SMTP
body = body.replace("\r\n", "\n").replace("\n", "\r\n")
msg = '\r\n'.join("%s: %s" % kv for kv in headers) + '\r\n'*2 + body
mailServer.sendmail(gmailUser, [to_addr], msg)
Also, you should not supply the file contents via the command line, because the command line is length-restricted. Instead you should supply the file via STDIN, like in python ... < /tmp/alert.txt and read it via
import sys
body = sys.stdin.read()
Send it as text/plain instead of text/html.
You do not have any HTML there.
That should fix it, because it's up to client to show the text correctly then. New lines do not have the same effect in HTML.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With