SMTP Sending Mail Problem

T

the_ricka

Hi all,
I'm fairly new to python, but very excited about it's potential.

I'm trying to write a simple program that will accept input from a
command line and send email. The parameters I used on the command
line are for From address, To addresses, Subject and Body. For the
body, I thought it would be better to read the input from a file so I
could allow someone to nicely format the body with newlines in a text
editor and just read it into a string and send it.

However, whenever I try to read more than one line from the file, the
email is not being delivered. The only reason I know this is because
I tried just reading in the first line of the text file, and the email
sent fine. Right now I believe this must have something to do with
new line characters at the end of each line, but it doesn't quite make
sense to me why this is a problem, as I have also used the same script
and just created a string in it with multiple lines (\r\n) and sent it
and the email sends fine. To complicate the issue further, I have
turned used the set_debuglevel method so I can see the output from the
SMTP server, and it appears that the message was Queued for mail
delivery.

The SMTP server we are using is Exchange if that matters. I have
listed the code below, along with output from the SMTP server. Any
help would be much appreciated. (Note, I don't typically read in the
file with a range(n) iterator, but that is how I have noticed that I
can send only one line, but not send multiple lines. As soon as I
change the range value to 1, the email will successfully send the
first line of the text file).

import sys,smtplib
if len(sys.argv) != 5:
print """
Usage: sendmail FROM RECIPIENTS SUBJECT BODY
RECIPIENTS should be a semicolon delimited list of email addresses.
BODY should be a file where the message to send is stored
Use double quotes to surround the SUBJECT element if it is more than
one word
"""
exit()
fromaddr = sys.argv[1]
toaddrs = sys.argv[2].split(";")
subject = sys.argv[3]
body = ""
print toaddrs
print type(toaddrs)
try:
infile = open(sys.argv[4], 'r')
for i in range(4):
body = body + infile.readline()
except IOError:
print "Can't open the given file, please try again"
exit()
headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, ",
".join(toaddrs), subject)
msg = headers + body
server = smtplib.SMTP('##############')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

Output:

send: 'ehlo hplaptopr.############.com\r\n'
reply: '250-################.com Hello [10.#.#.#]\r\n'
reply: '250-SIZE 20971520\r\n'
reply: '250-DSN\r\n'
reply: '250-VRFY\r\n'
reply: '250-AUTH GSSAPI NTLM LOGIN\r\n'
reply: '250-AUTH=LOGIN\r\n'
reply: '250 OK\r\n'
reply: retcode (250); Msg: ################.com Hello [10.#.#.#]
SIZE 20971520
DSN
VRFY
AUTH GSSAPI NTLM LOGIN
AUTH=LOGIN
OK
send: 'mail FROM:<######@######.com> size=116\r\n'
reply: '250 2.1.0 #######@######.com....Sender OK\r\n'
reply: retcode (250); Msg: 2.1.0 ######@######.com....Sender OK
send: 'rcpt TO:<######@######.com>\r\n'
reply: '250 2.1.5 ######@######.com \r\n'
reply: retcode (250); Msg: 2.1.5 #######@######.com
send: 'data\r\n'
reply: '354 Start mail input; end with <CRLF>.<CRLF>\r\n'
reply: retcode (354); Msg: Start mail input; end with <CRLF>.<CRLF>
data: (354, 'Start mail input; end with <CRLF>.<CRLF>')
send: 'From: #######@######.com\r\nTo: ######@######.com\r\nSubject:
Test1\r\n\
r\nThis is from the file\r\nThis concludes our test\r\n\r\n\r\n.\r\n'
reply: '250 2.6.0 <############@###############.com> Qu
eued mail for delivery\r\n'
reply: retcode (250); Msg: 2.6.0 <##########@n#########.com> Queued
mail for delivery
data: (250, '2.6.0 <########@################.com> Q
ueued mail for delivery')
send: 'quit\r\n'
reply: '221 2.0.0 ################.com Service closing transmission
cha
nnel\r\n'
reply: retcode (221); Msg: 2.0.0 #################.com Service closing
t
ransmission channel
 
G

Gabriel Genellina

However, whenever I try to read more than one line from the file, the
email is not being delivered.  The only reason I know this is because
I tried just reading in the first line of the text file, and the email
sent fine.  Right now I believe this must have something to do with
new line characters at the end of each line, but it doesn't quite make
sense to me why this is a problem, as I have also used the same script
and just created a string in it with multiple lines (\r\n) and sent it
and the email sends fine.  To complicate the issue further, I have
turned used the set_debuglevel method so I can see the output from the
SMTP server, and it appears that the message was Queued for mail
delivery.

Your code is fine, and the message was queued as you noticed. Maybe
the recipient has some sort of black list, didn't like the sender, the
message was classified as spam, or something like that. I'd look for
problems elsewhere, not in the code.
 
T

the_ricka

I added a longer text file with vocabulary typically used in our
office and the email sent successfully. The crazy thing is I had
already checked all the spam filters and queues in Exchange, and the
older messages seem to have disappeared.

Sorry for the post, I thought I was going crazy for a bit! Thanks
again for the sanity check.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top