I am writing a script that needs to send some emails. And I've used smtplib in the past and it is pretty easy. But I thought, gee it would be easier if I could just call it as a function, passing the from, to, subject, and message text. So I wrote it up as a function and it sort of works, but I get a weird error. When it runs it inserts a "\t" tab character before each item during the send portion (which I can see when I turn on debug). The end result is that I don't get any body or subject in my emails. It works fine when I copy the inside of the function and run it directly. It isn't a dealbreaker, I can certainly just call it direct, but from a learning Python perspective I'm wondering if anyone knows what exactly is happening. I'm more interested in the why this is happening than a solution (though that would be great too). Oh and if you could explain it to me, with no CS background, that would be even better.
I am working on Windows Vista with Python 2.5.2 (activestate). Thanks --Joshua Snip of script (more or less a copy/paste from effbot): fromaddress = '[EMAIL PROTECTED]' tolist = ['[EMAIL PROTECTED]','[EMAIL PROTECTED]'] msgsubj = "Hello!" messagebody = "This message was sent with Python's smtplib." def send_mail(fromaddress,tolist,msgsubj,messagebody): import smtplib SERVER = "mymailserver.mydomain.com" message = """\ From: %s To: %s Subject: %s %s """ % (fromaddress, ", ".join(tolist),msgsubj, messagebody) print message server = smtplib.SMTP(SERVER) server.set_debuglevel(1) server.sendmail(fromaddress, tolist, message) server.quit() send_mail(fromaddress, tolist, msgsubj, messagebody) Output when called from function: send: 'ehlo twaus-mycomputer.mydomain.local\r\n' reply: '250-mymailserver.mydomain.com Hello [10.10.10.119]\r\n' reply: '250-TURN\r\n' reply: '250-SIZE\r\n' reply: '250-ETRN\r\n' reply: '250-PIPELINING\r\n' reply: '250-DSN\r\n' reply: '250-ENHANCEDSTATUSCODES\r\n' reply: '250-8bitmime\r\n' reply: '250-BINARYMIME\r\n' reply: '250-CHUNKING\r\n' reply: '250-VRFY\r\n' reply: '250-X-EXPS GSSAPI NTLM LOGIN\r\n' reply: '250-X-EXPS=LOGIN\r\n' reply: '250-AUTH GSSAPI NTLM LOGIN\r\n' reply: '250-AUTH=LOGIN\r\n' reply: '250-X-LINK2STATE\r\n' reply: '250-XEXCH50\r\n' reply: '250 OK\r\n' reply: retcode (250); Msg: mymailserver.mydomain.com Hello [10.10.10.119] TURN SIZE ETRN PIPELINING DSN ENHANCEDSTATUSCODES 8bitmime BINARYMIME CHUNKING VRFY X-EXPS GSSAPI NTLM LOGIN X-EXPS=LOGIN AUTH GSSAPI NTLM LOGIN AUTH=LOGIN X-LINK2STATE XEXCH50 OK send: 'mail FROM:<[EMAIL PROTECTED]> size=159\r\n' reply: '250 2.1.0 [EMAIL PROTECTED] OK\r\n' reply: retcode (250); Msg: 2.1.0 [EMAIL PROTECTED] OK send: 'rcpt TO:<[EMAIL PROTECTED]>\r\n' reply: '250 2.1.5 [EMAIL PROTECTED] \r\n' reply: retcode (250); Msg: 2.1.5 [EMAIL PROTECTED] send: 'rcpt TO:<[EMAIL PROTECTED]>\r\n' reply: '250 2.1.5 [EMAIL PROTECTED] \r\n' reply: retcode (250); Msg: 2.1.5 [EMAIL PROTECTED] 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: "\tFrom: [EMAIL PROTECTED]: [EMAIL PROTECTED], j [EMAIL PROTECTED]: Hello!\r\n\tThis message was sent with Python's smtplib.\r\n\t\r\n.\r\n" reply: '250 2.6.0 <[EMAIL PROTECTED]> Queued mail for delivery\r\n' reply: retcode (250); Msg: 2.6.0 <[EMAIL PROTECTED] mydomain.com> Queued mail for delivery data: (250, '2.6.0 <[EMAIL PROTECTED] > Queued mail for delivery') send: 'quit\r\n' reply: '221 2.0.0 mymailserver.mydomain.com Service closing transmission channel\r\n' reply: retcode (221); Msg: 2.0.0 mymailserver.mydomain.com Service closin g transmission channel From: [EMAIL PROTECTED] To: [EMAIL PROTECTED], [EMAIL PROTECTED] Subject: Hello! This message was sent with Python's smtplib. Output if you just run the internal part of the function directly: send: 'ehlo twaus-mycomputer.mydomain.local\r\n' reply: '250-mymailserver.mydomain.com Hello [10.10.10.119]\r\n' reply: '250-TURN\r\n' reply: '250-SIZE\r\n' reply: '250-ETRN\r\n' reply: '250-PIPELINING\r\n' reply: '250-DSN\r\n' reply: '250-ENHANCEDSTATUSCODES\r\n' reply: '250-8bitmime\r\n' reply: '250-BINARYMIME\r\n' reply: '250-CHUNKING\r\n' reply: '250-VRFY\r\n' reply: '250-X-EXPS GSSAPI NTLM LOGIN\r\n' reply: '250-X-EXPS=LOGIN\r\n' reply: '250-AUTH GSSAPI NTLM LOGIN\r\n' reply: '250-AUTH=LOGIN\r\n' reply: '250-X-LINK2STATE\r\n' reply: '250-XEXCH50\r\n' reply: '250 OK\r\n' reply: retcode (250); Msg: mymailserver.mydomain.com Hello [10.10.10.119] TURN SIZE ETRN PIPELINING DSN ENHANCEDSTATUSCODES 8bitmime BINARYMIME CHUNKING VRFY X-EXPS GSSAPI NTLM LOGIN X-EXPS=LOGIN AUTH GSSAPI NTLM LOGIN AUTH=LOGIN X-LINK2STATE XEXCH50 OK send: 'mail FROM:<[EMAIL PROTECTED]> size=154\r\n' reply: '250 2.1.0 [EMAIL PROTECTED] OK\r\n' reply: retcode (250); Msg: 2.1.0 [EMAIL PROTECTED] OK send: 'rcpt TO:<[EMAIL PROTECTED]>\r\n' reply: '250 2.1.5 [EMAIL PROTECTED] \r\n' reply: retcode (250); Msg: 2.1.5 [EMAIL PROTECTED] send: 'rcpt TO:<[EMAIL PROTECTED]>\r\n' reply: '250 2.1.5 [EMAIL PROTECTED] \r\n' reply: retcode (250); Msg: 2.1.5 [EMAIL PROTECTED] 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: [EMAIL PROTECTED]: [EMAIL PROTECTED], jhunt [EMAIL PROTECTED]: Hello!\r\nThis message was sent with Python's smtplib.\r\n.\r\n" reply: '250 2.6.0 <[EMAIL PROTECTED]> Queued mail for delivery\r\n' reply: retcode (250); Msg: 2.6.0 <[EMAIL PROTECTED] mydomain.com> Queued mail for delivery data: (250, '2.6.0 <[EMAIL PROTECTED] > Queued mail for delivery') send: 'quit\r\n' reply: '221 2.0.0 mymailserver.mydomain.com Service closing transmission channel\r\n' reply: retcode (221); Msg: 2.0.0 mymailserver.mydomain.com Service closin g transmission channel -- http://mail.python.org/mailman/listinfo/python-list